Skip to content
This repository was archived by the owner on Sep 3, 2025. It is now read-only.

Commit 9cd102b

Browse files
Merge pull request #41 from SCCapstone/EditStudent
Can edit students
2 parents c8cb19d + 90aec50 commit 9cd102b

7 files changed

Lines changed: 164 additions & 118 deletions

File tree

File renamed without changes.

coldcall/templates/coldcall/add_student_manual.html

Lines changed: 0 additions & 74 deletions
This file was deleted.
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
{% include 'coldcall/base.html' %}
2+
<!DOCTYPE html>
3+
<html lang="en">
4+
{% load static %}
5+
<link rel="stylesheet" href="{% static 'coldcall/style.css' %}" />
6+
<link
7+
rel="stylesheet"
8+
href="{% static 'coldcall/addedit_student_manual.css' %}" />
9+
10+
<head>
11+
<meta charset="UTF-8" />
12+
<title>
13+
{% if student %}Edit Student{% else %}Add New Student{% endif %}
14+
</title>
15+
</head>
16+
<body>
17+
<div class="form-container">
18+
<h2>{% if student %}Edit Student{% else %}Add New Student{% endif %}</h2>
19+
<form method="post">
20+
{% csrf_token %}
21+
22+
<div class="form-group">
23+
<label for="first_name">First Name</label>
24+
<input
25+
type="text"
26+
id="first_name"
27+
name="first_name"
28+
value="{{ student.first_name|default:'' }}"
29+
required />
30+
</div>
31+
32+
<div class="form-group">
33+
<label for="last_name">Last Name</label>
34+
<input
35+
type="text"
36+
id="last_name"
37+
name="last_name"
38+
value="{{ student.last_name|default:'' }}"
39+
required />
40+
</div>
41+
42+
<div class="form-group">
43+
<label for="class_key">Class</label>
44+
<select id="class_key" name="class_key" required>
45+
{% for class in classes %}
46+
{% if not class.is_archived %}
47+
<option value="{{ class.id }}" {% if student and student.class_key.id == class.id %}selected{% endif %}>{{ class.class_name }}</option>
48+
{% endif %}
49+
{% endfor %}
50+
</select>
51+
</div>
52+
53+
<div class="form-group">
54+
<label for="seating">Seating</label>
55+
<select id="seating" name="seating">
56+
<option value="FR" {% if student and student.seating == 'FR' %}selected{% endif %}>Front Right</option>
57+
<option value="FM" {% if student and student.seating == 'FM' %}selected{% endif %}>Front Middle</option>
58+
<option value="FL" {% if student and student.seating == 'FL' %}selected{% endif %}>Front Left</option>
59+
<option value="BR" {% if student and student.seating == 'BR' %}selected{% endif %}>Back Right</option>
60+
<option value="BM" {% if student and student.seating == 'BM' %}selected{% endif %}>Back Middle</option>
61+
<option value="BL" {% if student and student.seating == 'BL' %}selected{% endif %}>Back Left</option>
62+
<option value="NA" {% if student and student.seating == 'NA' %}selected{% endif %}>None</option>
63+
</select>
64+
</div>
65+
66+
<div class="form-group">
67+
<label for="total_calls">Total Calls</label>
68+
<input
69+
type="number"
70+
id="total_calls"
71+
name="total_calls"
72+
min="0"
73+
value="{{ student.total_calls|default:0 }}"
74+
required />
75+
</div>
76+
77+
<div class="form-group">
78+
<label for="absent_calls">Absent Calls</label>
79+
<input
80+
type="number"
81+
id="absent_calls"
82+
name="absent_calls"
83+
min="0"
84+
value="{{ student.absent_calls|default:0 }}"
85+
required />
86+
</div>
87+
88+
<div class="form-group">
89+
<label for="total_score">Total Score</label>
90+
<input
91+
type="number"
92+
id="total_score"
93+
name="total_score"
94+
min="0"
95+
value="{{ student.total_score|default:0 }}"
96+
required />
97+
</div>
98+
99+
<div class="form-group">
100+
<button type="submit">{% if student %}Update Student{% else %}Add Student{% endif %}</button>
101+
</div>
102+
</form>
103+
</div>
104+
</body>
105+
</html>
Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
{% load static %}
2-
<link rel="stylesheet" href="{% static 'coldcall/base.css' %}">
2+
<link rel="stylesheet" href="{% static 'coldcall/base.css' %}" />
33

44
<div class="navbar">
5-
<button class="menuButton" onclick="show_menu()"></button>
6-
<div class="menu" id="menu">
7-
<ul>
8-
<li><a href="/">Home</a></li>
9-
<li><a href="/addcourse">Add Class</a></li>
10-
<li><a href="/addstudents/manual">Add Students</a></li>
11-
<li><a href="">Import From (TODO)</a></li>
12-
<li><a href="">Save To (TODO)</a></li>
13-
<button class="menuButton" onclick="show_menu()">Close Menu</button>
14-
</ul>
15-
</div>
5+
<button class="menuButton" onclick="show_menu()"></button>
6+
<div class="menu" id="menu">
7+
<ul>
8+
<li><a href="/">Home</a></li>
9+
<li><a href="/addcourse">Add Class</a></li>
10+
<li><a href="/addeditstudents/manual">Add Students</a></li>
11+
<li><a href="">Import From (TODO)</a></li>
12+
<li><a href="">Save To (TODO)</a></li>
13+
<button class="menuButton" onclick="show_menu()">Close Menu</button>
14+
</ul>
15+
</div>
1616
</div>
1717

1818
<script>
19-
function show_menu() {
20-
const menu = document.getElementById('menu')
21-
menu.style.display = (menu.style.display === 'flex' ? 'none' : 'flex');
22-
}
23-
</script>
19+
function show_menu() {
20+
const menu = document.getElementById("menu");
21+
menu.style.display = menu.style.display === "flex" ? "none" : "flex";
22+
}
23+
</script>

coldcall/templates/coldcall/home.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ <h1>Welcome, {{ user.username }}!</h1>
4747
<th>Absent Calls</th>
4848
<th>Total Score</th>
4949
<th>Actions</th>
50+
<th>Edit</th>
5051
</tr>
5152
</thead>
5253
<tbody>
@@ -59,6 +60,7 @@ <h1>Welcome, {{ user.username }}!</h1>
5960
<td>{{ student.absent_calls }}</td>
6061
<td>{{ student.total_score }}</td>
6162
<td><a href="{% url 'student_metrics' student.id %}">View Metrics</a></td>
63+
<td><a href="{% url 'addedit_student_manual_with_id' student.id %}">Edit</a></td>
6264
</tr>
6365
{% empty %}
6466
<tr>

coldcall/urls.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,8 @@
2222
#path("student/<int:student_id>", views.StudentMetricsView.as_view(), name="student_metrics"),
2323
# edited to int:pk which now works - cade
2424
path("student/<int:pk>", views.StudentMetricsView.as_view(), name="student_metrics"),
25-
path("addstudents/manual", views.AddStudentManualView.as_view(), name="add_student_manual"),
25+
path("addeditstudents/manual", views.AddEditStudentManualView.as_view(), name="addedit_student_manual"),
26+
path("addeditstudents/manual/<int:student_id>", views.AddEditStudentManualView.as_view(), name="addedit_student_manual_with_id"),
2627
path("addstudents/import", views.AddStudentImportView.as_view(), name="add_student_import"),
2728
path("addcourse", views.AddCourseView.as_view(), name="add_course"),
28-
path("editclasses/<int:course_id>/<int:student_id>/manual", views.EditStudentManualView.as_view(), name="edit_student_manual"),
29-
path("editclasses/<int:course_id>/<int:student_id>/csv", views.EditStudentCSVView.as_view(), name="edit_student_csv"),
3029
]

coldcall/views.py

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -185,15 +185,20 @@ def post(self,request):
185185
class AddStudentImportView(LoginRequiredMixin,TemplateView):
186186
template_name = "coldcall/add_student_import.html"
187187

188-
class AddStudentManualView(LoginRequiredMixin,TemplateView):
189-
template_name = "coldcall/add_student_manual.html"
188+
class AddEditStudentManualView(LoginRequiredMixin,TemplateView):
189+
template_name = "coldcall/addedit_student_manual.html"
190190

191191
# added this to help get classes for the add new student manual page
192-
def get(self, request):
192+
def get(self, request, student_id=None):
193193
classes = Class.objects.filter(professor_key = request.user)
194-
return render(request, self.template_name, {'classes': classes})
194+
try:
195+
student = Student.objects.get(id=student_id)
196+
except Student.DoesNotExist:
197+
student = None
198+
199+
return render(request, self.template_name, {'classes': classes, 'student': student})
195200

196-
def post(self, request):
201+
def post(self, request, student_id=None):
197202
# made to handle form submission. I was getting errors when submitting add
198203
# student form
199204
first_name = request.POST.get('first_name')
@@ -204,24 +209,33 @@ def post(self, request):
204209
absent_calls = request.POST.get('absent_calls', 0)
205210
total_score = request.POST.get('total_score', 0)
206211

207-
# Create and save the new Student instance
208-
Student.objects.create(
209-
first_name=first_name,
210-
last_name=last_name,
211-
class_key=Class.objects.get(id=class_key_id),
212-
seating=seating,
213-
total_calls=total_calls,
214-
absent_calls=absent_calls,
215-
total_score=total_score,
216-
)
212+
try:
213+
class_key = Class.objects.get(id=class_key_id)
214+
except Class.DoesNotExist:
215+
return HttpResponseBadRequest("Invalid class ID.")
216+
217+
# if student_id is provided, update the existing Student instance
218+
if student_id:
219+
student = Student.objects.get(id=student_id)
220+
student.first_name = first_name
221+
student.last_name = last_name
222+
student.class_key = class_key
223+
student.seating = seating
224+
student.total_calls = total_calls
225+
student.absent_calls = absent_calls
226+
student.total_score = total_score
227+
student.save()
228+
# create a new student if no ID is provided
229+
else:
230+
Student.objects.create(
231+
first_name=first_name,
232+
last_name=last_name,
233+
class_key=class_key,
234+
seating=seating,
235+
total_calls=total_calls,
236+
absent_calls=absent_calls,
237+
total_score=total_score,
238+
)
217239

218240
# send the user back to home page
219-
return redirect('/')
220-
221-
class EditStudentManualView(LoginRequiredMixin,generic.DetailView):
222-
model = Student
223-
template_name = "coldcall/edit_student_manual.html"
224-
225-
class EditStudentCSVView(LoginRequiredMixin,generic.DetailView):
226-
model = Student
227-
template_name = "coldcall/edit_student_csv.html"
241+
return redirect('/')

0 commit comments

Comments
 (0)