Edoruin commited on
Commit
bd57b26
·
1 Parent(s): 1e1a036

Delete Classrooms and students create

Browse files
app/main.py CHANGED
@@ -329,6 +329,21 @@ class ClassroomManager(HFDatasetManager):
329
 
330
  return student_name_found # Retornamos el nombre para la notificación
331
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
332
  user_mgr = UserManager()
333
  classroom_manager = ClassroomManager()
334
 
@@ -837,6 +852,22 @@ def add_student(course_id):
837
  flash('Estudiante ya existe o error al agregar', 'red')
838
  return redirect(url_for('course_details', course_id=course_id))
839
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
840
  @app.route('/api/courses')
841
  def api_courses():
842
  """Devuelve la lista de cursos y sus estudiantes para el frontend."""
 
329
 
330
  return student_name_found # Retornamos el nombre para la notificación
331
 
332
+ def delete_course(self, course_id):
333
+ """Elimina un curso por ID."""
334
+ self.classrooms = [c for c in self.classrooms if c['id'] != course_id]
335
+ self.save()
336
+ return True
337
+
338
+ def delete_student(self, course_id, student_id):
339
+ """Elimina un estudiante de un curso."""
340
+ course = self.get_course(course_id)
341
+ if course:
342
+ course['students'] = [s for s in course['students'] if s.get('id') != student_id]
343
+ self.save()
344
+ return True
345
+ return False
346
+
347
  user_mgr = UserManager()
348
  classroom_manager = ClassroomManager()
349
 
 
852
  flash('Estudiante ya existe o error al agregar', 'red')
853
  return redirect(url_for('course_details', course_id=course_id))
854
 
855
+ @app.route('/classroom/<course_id>/delete', methods=['POST'])
856
+ @login_required
857
+ def delete_course(course_id):
858
+ classroom_manager.delete_course(course_id)
859
+ flash('Curso eliminado', 'green')
860
+ return redirect(url_for('classroom_dashboard'))
861
+
862
+ @app.route('/classroom/<course_id>/delete_student/<student_id>', methods=['POST'])
863
+ @login_required
864
+ def delete_student(course_id, student_id):
865
+ if classroom_manager.delete_student(course_id, student_id):
866
+ flash('Estudiante eliminado', 'green')
867
+ else:
868
+ flash('Error al eliminar estudiante', 'red')
869
+ return redirect(url_for('course_details', course_id=course_id))
870
+
871
  @app.route('/api/courses')
872
  def api_courses():
873
  """Devuelve la lista de cursos y sus estudiantes para el frontend."""
app/templates/classroom_dashboard.html CHANGED
@@ -16,14 +16,23 @@
16
 
17
  <div class="card-grid">
18
  {% for course in courses %}
19
- <a href="{{ url_for('course_details', course_id=course.id) }}" class="card glass"
20
- style="text-align: left; align-items: flex-start;">
21
- <div style="display: flex; justify-content: space-between; width: 100%;">
22
- <h2 style="margin: 0;">{{ course.name }}</h2>
23
- <i class="fas fa-chalkboard-teacher" style="font-size: 1.5rem; margin: 0;"></i>
24
- </div>
25
- <p class="text-dim" style="margin-top: 1rem;">{{ course.students|length }} Estudiantes inscritos</p>
26
- </a>
 
 
 
 
 
 
 
 
 
27
  {% else %}
28
  <div style="grid-column: 1 / -1; text-align: center; color: var(--text-dim);">
29
  <p>No hay cursos creados. ¡Crea el primero arriba!</p>
 
16
 
17
  <div class="card-grid">
18
  {% for course in courses %}
19
+ <div class="card glass" style="text-align: left; align-items: flex-start; position: relative;">
20
+ <a href="{{ url_for('course_details', course_id=course.id) }}"
21
+ style="text-decoration: none; color: inherit; flex: 1;">
22
+ <div style="display: flex; justify-content: space-between; width: 100%;">
23
+ <h2 style="margin: 0;">{{ course.name }}</h2>
24
+ <i class="fas fa-chalkboard-teacher" style="font-size: 1.5rem; margin: 0;"></i>
25
+ </div>
26
+ <p class="text-dim" style="margin-top: 1rem;">{{ course.students|length }} Estudiantes inscritos</p>
27
+ </a>
28
+ <form action="{{ url_for('delete_course', course_id=course.id) }}" method="POST"
29
+ style="position: absolute; top: 1rem; right: 1rem;" onsubmit="return confirm('¿Eliminar este curso?');">
30
+ <button type="submit" class="btn"
31
+ style="background: rgba(239, 68, 68, 0.2); color: #ef4444; padding: 0.5rem; border-radius: 0.5rem;">
32
+ <i class="fas fa-trash"></i>
33
+ </button>
34
+ </form>
35
+ </div>
36
  {% else %}
37
  <div style="grid-column: 1 / -1; text-align: center; color: var(--text-dim);">
38
  <p>No hay cursos creados. ¡Crea el primero arriba!</p>
app/templates/course_details.html CHANGED
@@ -27,9 +27,18 @@
27
  <ul style="list-style: none; padding: 0; margin-top: 1rem; max-height: 400px; overflow-y: auto;">
28
  {% for student in course.students %}
29
  <li
30
- style="padding: 0.8rem; border-bottom: 1px solid rgba(255,255,255,0.1); display: flex; align-items: center; gap: 0.5rem;">
31
- <i class="fas fa-user-graduate" style="color: var(--accent);"></i>
32
- {{ student.name }}
 
 
 
 
 
 
 
 
 
33
  </li>
34
  {% else %}
35
  <li class="text-dim">No hay estudiantes inscritos.</li>
 
27
  <ul style="list-style: none; padding: 0; margin-top: 1rem; max-height: 400px; overflow-y: auto;">
28
  {% for student in course.students %}
29
  <li
30
+ style="padding: 0.8rem; border-bottom: 1px solid rgba(255,255,255,0.1); display: flex; align-items: center; justify-content: space-between;">
31
+ <div style="display: flex; align-items: center; gap: 0.5rem;">
32
+ <i class="fas fa-user-graduate" style="color: var(--accent);"></i>
33
+ {{ student.name }}
34
+ </div>
35
+ <form action="{{ url_for('delete_student', course_id=course.id, student_id=student.id) }}"
36
+ method="POST" onsubmit="return confirm('¿Eliminar a {{ student.name }}?');">
37
+ <button type="submit" class="btn"
38
+ style="background: rgba(239, 68, 68, 0.2); color: #ef4444; padding: 0.3rem 0.6rem; font-size: 0.8rem;">
39
+ <i class="fas fa-trash"></i>
40
+ </button>
41
+ </form>
42
  </li>
43
  {% else %}
44
  <li class="text-dim">No hay estudiantes inscritos.</li>