3283: I Supervisor-vyn av ett projekt visar att en författare har genomfört flera oppositioner

This commit is contained in:
Wayne Westmoreland 2023-11-27 13:06:38 +01:00
parent 15fa657527
commit 786c4dafda

@ -4,6 +4,7 @@ import com.google.common.eventbus.EventBus;
import com.google.inject.persist.Transactional;
import com.querydsl.core.BooleanBuilder;
import com.querydsl.core.types.dsl.BooleanExpression;
import com.querydsl.jpa.impl.JPAQuery;
import jakarta.persistence.EntityManager;
import org.springframework.data.domain.Pageable;
import se.su.dsv.scipro.file.FileReference;
@ -17,6 +18,7 @@ import se.su.dsv.scipro.report.OppositionReportService;
import se.su.dsv.scipro.reviewing.RoughDraftApproval;
import se.su.dsv.scipro.reviewing.RoughDraftApprovalService;
import se.su.dsv.scipro.system.AbstractServiceImpl;
import se.su.dsv.scipro.system.ProjectType;
import se.su.dsv.scipro.system.User;
import se.su.dsv.scipro.util.Either;
@ -60,8 +62,7 @@ public class FinalSeminarServiceImpl extends AbstractServiceImpl<FinalSeminar, L
FinalSeminarActiveParticipationRepository finalSeminarActiveParticipationRepository,
FinalSeminarRepository finalSeminarRepository,
Clock clock,
RoughDraftApprovalService roughDraftApprovalService)
{
RoughDraftApprovalService roughDraftApprovalService) {
super(em, FinalSeminar.class, QFinalSeminar.finalSeminar);
this.eventBus = eventBus;
this.authorRepository = authorRepository;
@ -113,8 +114,7 @@ public class FinalSeminarServiceImpl extends AbstractServiceImpl<FinalSeminar, L
private Either<SchedulingError, FinalSeminar> createSeminar(
Project project,
LocalDateTime when,
FinalSeminarDetails details)
{
FinalSeminarDetails details) {
FinalSeminar finalSeminar = new FinalSeminar(project);
FinalSeminar persisted = setDetails(finalSeminar, when, details);
eventBus.post(new FinalSeminarCreatedEvent(persisted));
@ -376,7 +376,7 @@ public class FinalSeminarServiceImpl extends AbstractServiceImpl<FinalSeminar, L
if (params.getOnlyActiveOrCompletedProjects() != null) {
bb.and(onlyActiveOrCompletedProjectsFilter());
}
if (params.getOnlyNonManualParticipants() != null){
if (params.getOnlyNonManualParticipants() != null) {
bb.and(onlyNonManualParticipantsFilter());
}
if (params.getDegreeType() != null) {
@ -480,14 +480,13 @@ public class FinalSeminarServiceImpl extends AbstractServiceImpl<FinalSeminar, L
QFinalSeminar seminar = QFinalSeminar.finalSeminar;
if (after == null && before == null) {
return seminar.oppositions.any().grade.isNull().or(
seminar.activeParticipations.any().grade.isNull().or(
seminar.activeParticipations.any().grade.isNull().or(
seminar.respondents.any().grade.isNull()));
}
else {
} else {
return seminar.startDate.between(after, before)
.andAnyOf(seminar.oppositions.any().grade.isNull(),
seminar.activeParticipations.any().grade.isNull(),
seminar.respondents.any().grade.isNull());
.andAnyOf(seminar.oppositions.any().grade.isNull(),
seminar.activeParticipations.any().grade.isNull(),
seminar.respondents.any().grade.isNull());
}
}
@ -500,9 +499,21 @@ public class FinalSeminarServiceImpl extends AbstractServiceImpl<FinalSeminar, L
}
private BooleanExpression projectOpposing(Project project) {
return allOf(
QFinalSeminar.finalSeminar.oppositions.any().user.in(project.getProjectParticipants()),
QFinalSeminar.finalSeminar.oppositions.any().project.projectType.eq(project.getProjectType()));
List<BooleanExpression> booleanExpressions = new ArrayList<>();
for (User projectParticipant : project.getProjectParticipants()) {
final BooleanExpression booleanExpression = QFinalSeminar.finalSeminar.oppositions.any()
.in(getFinalSeminarOppositions(projectParticipant, project.getProjectType()));
booleanExpressions.add(booleanExpression);
}
return anyOf(booleanExpressions.toArray(new BooleanExpression[0]));
}
private List<FinalSeminarOpposition> getFinalSeminarOppositions(User projectParticipant, ProjectType projectType) {
return new JPAQuery<FinalSeminarOpposition>(em())
.from(QFinalSeminarOpposition.finalSeminarOpposition)
.where(QFinalSeminarOpposition.finalSeminarOpposition.project.projectType.eq(projectType),
QFinalSeminarOpposition.finalSeminarOpposition.user.eq(projectParticipant))
.fetch();
}
private BooleanExpression projectParticipating(Project project) {