Skip to content

Commit 8d2995d

Browse files
committed
fix(announcements): improve teacher announcement approval ux
1 parent be67780 commit 8d2995d

File tree

7 files changed

+83
-3
lines changed

7 files changed

+83
-3
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.2.25 on 2025-05-03 02:03
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('announcements', '0036_auto_20250415_1251'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='announcementrequest',
15+
name='atleast_one_approved',
16+
field=models.BooleanField(default=False),
17+
),
18+
]
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Generated by Django 3.2.25 on 2025-05-03 16:47
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('announcements', '0037_announcementrequest_atleast_one_approved'),
10+
]
11+
12+
operations = [
13+
migrations.RemoveField(
14+
model_name='announcementrequest',
15+
name='atleast_one_approved',
16+
),
17+
]
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Generated by Django 3.2.25 on 2025-05-03 17:10
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
11+
('announcements', '0038_remove_announcementrequest_atleast_one_approved'),
12+
]
13+
14+
operations = [
15+
migrations.AddField(
16+
model_name='announcementrequest',
17+
name='teachers_rejected',
18+
field=models.ManyToManyField(blank=True, related_name='teachers_rejected', to=settings.AUTH_USER_MODEL),
19+
),
20+
]

intranet/apps/announcements/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,7 @@ class AnnouncementRequest(models.Model):
288288

289289
teachers_requested = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=False, related_name="teachers_requested")
290290
teachers_approved = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name="teachers_approved")
291+
teachers_rejected = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name="teachers_rejected")
291292

292293
posted = models.ForeignKey(Announcement, null=True, blank=True, on_delete=models.CASCADE)
293294
posted_by = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, related_name="posted_by", on_delete=set_historical_user)

intranet/apps/announcements/views.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ def approve_announcement_view(request, req_id):
256256

257257
return redirect("approve_announcement_success")
258258
else:
259+
obj.teachers_rejected.add(request.user)
259260
obj.save()
260261
return redirect("approve_announcement_reject")
261262

intranet/apps/dashboard/views.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from django.conf import settings
99
from django.contrib.auth.decorators import login_required
1010
from django.core.paginator import Page, Paginator
11-
from django.db.models import QuerySet
11+
from django.db.models import Q, QuerySet
1212
from django.http import HttpRequest
1313
from django.shortcuts import redirect, render
1414
from django.urls import reverse
@@ -683,9 +683,18 @@ def dashboard_view(request, show_widgets=True, show_expired=False, show_hidden_c
683683

684684
context.update({"awaiting_teacher": awaiting_teacher, "awaiting_approval": awaiting_approval})
685685

686-
self_awaiting_teacher = AnnouncementRequest.objects.filter(posted=None, rejected=False, teachers_requested=request.user).this_year()
686+
self_awaiting_teacher = (
687+
AnnouncementRequest.objects.filter(posted=None, rejected=False, teachers_requested=request.user)
688+
.exclude(Q(teachers_rejected=request.user) | Q(teachers_approved=request.user))
689+
.this_year()
690+
)
687691
context.update({"self_awaiting_teacher": self_awaiting_teacher})
688692

693+
already_teacher_approved = AnnouncementRequest.objects.filter(
694+
posted=None, rejected=False, teachers_requested=request.user, teachers_approved=request.user
695+
)
696+
context.update({"already_teacher_approved": already_teacher_approved})
697+
689698
if show_welcome:
690699
return render(request, "welcome/student.html", context)
691700
else:

intranet/templates/dashboard/dashboard.html

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,9 @@ <h3> <i class="fas fa-info-circle"></i> There {% if awaiting_teacher|length == 1
201201
</div>
202202
{% endif %}
203203
{% endif %}
204-
{% if self_awaiting_teacher %}
204+
{% if self_awaiting_teacher or already_teacher_approved %}
205205
<div class="announcement announcement-meta">
206+
{% if self_awaiting_teacher %}
206207
<h3>
207208
<i class="fas fa-exclamation-circle" style="color: red"></i> There {% if self_awaiting_teacher|length == 1 %}is 1 announcement request{% else %}are {{ self_awaiting_teacher|length }} announcement requests{% endif %} waiting for your approval
208209
</h3>
@@ -213,6 +214,19 @@ <h3>
213214
</ul>
214215
<br>
215216
Click on the link{{ self_awaiting_teacher|length|pluralize }} above to approve or reject {% if self_awaiting_teacher|length == 1 %}this announcement{% else %}these announcements{% endif %}.
217+
{% endif %}
218+
{% if already_teacher_approved %}
219+
{% if self_awaiting_teacher %}<br>{% endif %}
220+
<h3>
221+
<i class="fas fa-info-circle"></i>
222+
There {{ already_teacher_approved|length|pluralize:"is,are" }} {{ already_teacher_approved|length }} announcement request{{ already_teacher_approved|length|pluralize }} you have approved and {{ already_teacher_approved|length|pluralize:"is,are" }} pending admin approval
223+
</h3>
224+
<ul>
225+
{% for req in already_teacher_approved %}
226+
<li>{{ req }} -- requested by {{ req.user.full_name }}</li>
227+
{% endfor %}
228+
</ul>
229+
{% endif %}
216230
</div>
217231
{% endif %}
218232

0 commit comments

Comments
 (0)