From 219be9cbdaadd2384ae210abd31ed32f5e5f2860 Mon Sep 17 00:00:00 2001
From: uhensler <urs.hensler@frentix.com>
Date: Wed, 20 May 2020 09:06:43 +0200
Subject: [PATCH] OO-4630: Disable to move appointments that already have
 participations

---
 .../nodes/appointments/ParticipationSearchParams.java    | 5 +++++
 .../nodes/appointments/ui/AppointmentEditController.java | 9 +++++++++
 2 files changed, 14 insertions(+)

diff --git a/src/main/java/org/olat/course/nodes/appointments/ParticipationSearchParams.java b/src/main/java/org/olat/course/nodes/appointments/ParticipationSearchParams.java
index e7c8b8556bd..4dc53578e81 100644
--- a/src/main/java/org/olat/course/nodes/appointments/ParticipationSearchParams.java
+++ b/src/main/java/org/olat/course/nodes/appointments/ParticipationSearchParams.java
@@ -20,6 +20,7 @@
 package org.olat.course.nodes.appointments;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Date;
 import java.util.stream.Collectors;
 
@@ -113,6 +114,10 @@ public class ParticipationSearchParams {
 				.map(AppointmentRef::getKey)
 				.collect(Collectors.toSet());
 	}
+	
+	public void setAppointment(AppointmentRef appointment) {
+		this.appointmentKeys = Collections.singletonList(appointment.getKey());
+	}
 
 	public Date getStartAfter() {
 		return startAfter;
diff --git a/src/main/java/org/olat/course/nodes/appointments/ui/AppointmentEditController.java b/src/main/java/org/olat/course/nodes/appointments/ui/AppointmentEditController.java
index f8a8e9f8955..ee414075559 100644
--- a/src/main/java/org/olat/course/nodes/appointments/ui/AppointmentEditController.java
+++ b/src/main/java/org/olat/course/nodes/appointments/ui/AppointmentEditController.java
@@ -56,6 +56,7 @@ public class AppointmentEditController extends FormBasicController {
 	
 	private Topic topic;
 	private Appointment appointment;
+	private final boolean hasParticipations;
 	
 	@Autowired
 	private AppointmentsService appointmentsService;
@@ -63,12 +64,18 @@ public class AppointmentEditController extends FormBasicController {
 	public AppointmentEditController(UserRequest ureq, WindowControl wControl, Topic topic) {
 		super(ureq, wControl);
 		this.topic = topic;
+		this.hasParticipations = false;
 		initForm(ureq);
 	}
 
 	public AppointmentEditController(UserRequest ureq, WindowControl wControl, Appointment appointment) {
 		super(ureq, wControl);
 		this.appointment = appointment;
+		
+		ParticipationSearchParams params = new ParticipationSearchParams();
+		params.setAppointment(appointment);
+		this.hasParticipations = appointmentsService.getParticipationCount(params).longValue() > 0;
+		
 		initForm(ureq);
 	}
 
@@ -78,12 +85,14 @@ public class AppointmentEditController extends FormBasicController {
 		startEl = uifactory.addDateChooser("appointment.start", start, formLayout);
 		startEl.setDateChooserTimeEnabled(true);
 		startEl.setMandatory(true);
+		startEl.setEnabled(!hasParticipations);
 		startEl.addActionListener(FormEvent.ONCHANGE);
 		
 		Date end = appointment != null? appointment.getEnd(): null;
 		endEl = uifactory.addDateChooser("appointment.end", end, formLayout);
 		endEl.setDateChooserTimeEnabled(true);
 		endEl.setMandatory(true);
+		endEl.setEnabled(!hasParticipations);
 		
 		String location = appointment != null? appointment.getLocation(): null;
 		locationEl = uifactory.addTextElement("appointment.location", 128, location, formLayout);
-- 
GitLab