diff --git a/oh_queue/static/js/components/admin_appointments_manager.js b/oh_queue/static/js/components/admin_appointments_manager.js
index cd3001f..382cc3b 100644
--- a/oh_queue/static/js/components/admin_appointments_manager.js
+++ b/oh_queue/static/js/components/admin_appointments_manager.js
@@ -61,8 +61,11 @@ function AdminAppointmentsManager({ state }) {
|
- How many appointments should a student have be pending simultaneously?
+ How many appointments should a student have be pending simultaneously?
+ (by
+
+ )
|
{
$('[data-toggle="tooltip"]').tooltip()
historyRef.current.scrollTop = historyRef.current.scrollHeight;
@@ -43,30 +45,64 @@ function ChatBox({ currentUser, socket, id, mode }) {
if (message.mode !== mode || message.id !== id) {
return;
}
- setMessages(messages.concat([[message.sender, message.content]]));
+ setMessages(messages.concat([[
+ message.sender,
+ message.content,
+ message.time
+ ]]));
});
return () => socket.removeAllListeners("chat_message");
}, [messages]);
- const body = messages.map(([sender, message], i) => {
+ const body = messages.map(([sender, message, time], i) => {
+ function formatTitle(name, time) {
+ if (name === undefined) {
+ return time
+ } else if (time === undefined) {
+ return name
+ }
+ return name + ' | ' + time;
+ }
+
if (sender.id === currentUser.id) {
return (
- {message}
+
+ {message}
+
)
} else if (messages[i + 1] && sender.id === messages[i + 1][0].id) {
return (
{sender.shortName[0]}
- {message}
+
+ {message}
+
)
} else {
return (
{sender.shortName[0]}
- {message}
+
+ {message}
+
)
}
diff --git a/oh_queue/views.py b/oh_queue/views.py
index 4dc92e7..4fa577c 100644
--- a/oh_queue/views.py
+++ b/oh_queue/views.py
@@ -319,6 +319,12 @@ def init_config():
public=True,
course=get_course(),
))
+ db.session.add(ConfigEntry(
+ key='appointment_or_minutes',
+ value='false',
+ public=True,
+ course=get_course(),
+ ))
db.session.add(ConfigEntry(
key='show_okpy_backups',
value='false',
@@ -922,6 +928,7 @@ def assign_appointment(data):
daily_threshold = int(ConfigEntry.query.filter_by(key="daily_appointment_limit", course=get_course()).one().value)
weekly_threshold = int(ConfigEntry.query.filter_by(key="weekly_appointment_limit", course=get_course()).one().value)
pending_threshold = int(ConfigEntry.query.filter_by(key="simul_appointment_limit", course=get_course()).one().value)
+ pending_metric= ConfigEntry.query.filter_by(key="appointment_or_minutes", course=get_course()).one().value
start = appointment.start_time.replace(hour=0, minute=0, second=0, microsecond=0)
week_start = start - datetime.timedelta(days=appointment.start_time.weekday())
@@ -940,13 +947,21 @@ def assign_appointment(data):
).count()
if num_today >= daily_threshold:
return socket_error("You have already signed up for {} OH slots for the same day".format(daily_threshold))
-
num_pending = AppointmentSignup.query.join(AppointmentSignup.appointment).filter(
Appointment.status == AppointmentStatus.pending,
AppointmentSignup.user_id == current_user.id,
- ).count()
- if num_pending >= pending_threshold:
- return socket_error("You have already signed up for {} OH slots that have not yet occurred.".format(pending_threshold))
+ )
+ if pending_metric != 'false':
+ start = appointment.duration
+ num_pend = [appt.appointment.duration for appt in list(num_pending)]
+ threshold = datetime.timedelta(minutes=pending_threshold)
+ for item in num_pend:
+ start += item
+ if start > threshold:
+ return socket_error("You cannot sign up for more than {} minutes of OH that have not yet occurred.".format(pending_threshold))
+ else:
+ if num_pending.count() >= pending_threshold:
+ return socket_error("You have already signed up for {} OH slots that have not yet occurred.".format(pending_threshold))
old_signup = AppointmentSignup.query.filter_by(
appointment_id=data["appointment_id"],
@@ -1140,6 +1155,8 @@ def send_chat_message(data):
event_id = data["id"]
data["sender"] = user_json(current_user)
+ message_time = get_current_time().strftime("%a %-I:%M%p")
+ data["time"] = message_time
if mode == "appointment":
appointment = Appointment.query.filter_by(course=get_course(), id=event_id).one()
|