From 7996248f796c3c5cde1ba43610c73ed95f9096b7 Mon Sep 17 00:00:00 2001 From: mnymkr Date: Fri, 12 Jul 2024 19:03:51 +0700 Subject: [PATCH 1/3] added changing student's program functionality --- accounts/forms.py | 15 ++++++++++++ accounts/urls.py | 2 ++ accounts/views.py | 29 +++++++++++++++++++++- templates/accounts/edit_program.html | 34 ++++++++++++++++++++++++++ templates/accounts/profile_single.html | 6 +++++ 5 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 templates/accounts/edit_program.html diff --git a/accounts/forms.py b/accounts/forms.py index d006ee4..cc99e1f 100644 --- a/accounts/forms.py +++ b/accounts/forms.py @@ -337,6 +337,21 @@ class ProfileUpdateForm(UserChangeForm): ] +class ProgramUpdateForm(UserChangeForm): + program = forms.ModelChoiceField( + queryset=Program.objects.all(), + widget=forms.Select( + attrs={"class": "browser-default custom-select form-control"} + ), + label="Program", + ) + + class Meta: + model = Student + fields = [ + "program" + ] + class EmailValidationOnForgotPassword(PasswordResetForm): def clean_email(self): email = self.cleaned_data["email"] diff --git a/accounts/urls.py b/accounts/urls.py index fd0737d..16dbe5a 100644 --- a/accounts/urls.py +++ b/accounts/urls.py @@ -22,6 +22,7 @@ from .views import ( student_add_view, edit_student, delete_student, + edit_program, ParentAdd, validate_username, register, @@ -47,6 +48,7 @@ urlpatterns = [ path("student/add/", student_add_view, name="add_student"), path("student//edit/", edit_student, name="student_edit"), path("students//delete/", delete_student, name="student_delete"), + path("edit_program//", edit_program, name="student_program_edit"), path("parents/add/", ParentAdd.as_view(), name="add_parent"), path("ajax/validate-username/", validate_username, name="validate_username"), path("register/", register, name="register"), diff --git a/accounts/views.py b/accounts/views.py index 47fbead..c506498 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -12,7 +12,7 @@ from core.models import Session, Semester from course.models import Course from result.models import TakenCourse from .decorators import admin_required -from .forms import StaffAddForm, StudentAddForm, ProfileUpdateForm, ParentAddForm +from .forms import StaffAddForm, StudentAddForm, ProfileUpdateForm, ParentAddForm, ProgramUpdateForm from .models import User, Student, Parent from .filters import LecturerFilter, StudentFilter @@ -477,6 +477,33 @@ def delete_student(request, pk): messages.success(request, "Student has been deleted.") return redirect("student_list") +@login_required +@admin_required +def edit_program(request, pk): + + instance = get_object_or_404(Student, student_id=pk) + user = get_object_or_404(User, pk=pk) + if request.method == "POST": + form = ProgramUpdateForm(request.POST, request.FILES, instance=instance) + full_name = user.get_full_name + if form.is_valid(): + form.save() + messages.success(request, message=full_name + " has been updated.") + url = "/accounts/profile/" + user.id.__str__() + "/detail/" # Botched job, must optimize + return redirect(to=url) + else: + messages.error(request, "Please correct the error(s) below.") + else: + form = ProgramUpdateForm(instance=instance) + return render( + request, + "accounts/edit_program.html", + context={ + "title": "Edit-program", + "form": form + }, + ) + # ######################################################## diff --git a/templates/accounts/edit_program.html b/templates/accounts/edit_program.html new file mode 100644 index 0000000..e45d193 --- /dev/null +++ b/templates/accounts/edit_program.html @@ -0,0 +1,34 @@ +{% extends 'base.html' %} +{% block title %}{{ title }} | Learning management system{% endblock title %} +{% load crispy_forms_tags %} +{% load static %} + +{% block content %} + + + +

Student Program Update Form

+ +{% include 'snippets/messages.html' %} + +
{% csrf_token %} +
+
+
+

Program

+ +
+ {{ form.program|as_crispy_field }} +
+
+
+
+ +
+{% endblock content %} diff --git a/templates/accounts/profile_single.html b/templates/accounts/profile_single.html index f3030b8..32a76d6 100644 --- a/templates/accounts/profile_single.html +++ b/templates/accounts/profile_single.html @@ -38,6 +38,11 @@ Edit Profile +
+ {# had to name out of convention because it clashes with 'edit_[whatever]program', which directs to 'program/[id]/edit/ #} + + Change Program + {% endif %} {% if user.is_lecturer %} @@ -93,6 +98,7 @@

School: Hawas Preparatory School

Level: {{ level.level }}

+

Program: {{ student.program }}

{% endif %} From bf57019fda0716e2b8cf92d0b262a760f63924ea Mon Sep 17 00:00:00 2001 From: mnymkr Date: Fri, 12 Jul 2024 19:17:40 +0700 Subject: [PATCH 2/3] added the option to change a student's program in student update form --- accounts/forms.py | 8 ++++++++ accounts/views.py | 5 +++++ templates/accounts/edit_student.html | 1 + templates/accounts/profile_single.html | 7 +++---- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/accounts/forms.py b/accounts/forms.py index cc99e1f..a6ed970 100644 --- a/accounts/forms.py +++ b/accounts/forms.py @@ -324,6 +324,14 @@ class ProfileUpdateForm(UserChangeForm): label="Address / city", ) + program = forms.ModelChoiceField( + queryset=Program.objects.all(), + widget=forms.Select( + attrs={"class": "browser-default custom-select form-control"} + ), + label="Program", + ) + class Meta: model = User fields = [ diff --git a/accounts/views.py b/accounts/views.py index c506498..2da75c6 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -420,6 +420,10 @@ def edit_student(request, pk): if form.is_valid(): form.save() + student = Student.objects.get(student_id=instance.id) + student.program = form.cleaned_data["program"] + student.save() + messages.success(request, ("Student " + full_name + " has been updated.")) return redirect("student_list") else: @@ -477,6 +481,7 @@ def delete_student(request, pk): messages.success(request, "Student has been deleted.") return redirect("student_list") +# REDUNDANT @login_required @admin_required def edit_program(request, pk): diff --git a/templates/accounts/edit_student.html b/templates/accounts/edit_student.html index 8a56495..25b7169 100644 --- a/templates/accounts/edit_student.html +++ b/templates/accounts/edit_student.html @@ -30,6 +30,7 @@ {{ form.gender|as_crispy_field }} {{ form.phone|as_crispy_field }} {{ form.address|as_crispy_field }} + {{ form.program|as_crispy_field }} diff --git a/templates/accounts/profile_single.html b/templates/accounts/profile_single.html index 32a76d6..cc38a78 100644 --- a/templates/accounts/profile_single.html +++ b/templates/accounts/profile_single.html @@ -38,11 +38,10 @@
Edit Profile -
{# had to name out of convention because it clashes with 'edit_[whatever]program', which directs to 'program/[id]/edit/ #} - - Change Program - +{# #} +{# Change Program#} +{# #} {% endif %} {% if user.is_lecturer %} From 66f902b68030749daf6e490d63c9494cb72f79dd Mon Sep 17 00:00:00 2001 From: Hoannhi Date: Sun, 14 Jul 2024 21:30:30 +0700 Subject: [PATCH 3/3] Change student email template to show password and ID. --- .idea/.gitignore | 8 ++++++++ config/settings.py | 1 + .../accounts/email/new_student_account_confirmation.html | 4 ++-- 3 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 .idea/.gitignore diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/config/settings.py b/config/settings.py index d9df0c7..f841c49 100644 --- a/config/settings.py +++ b/config/settings.py @@ -199,6 +199,7 @@ EMAIL_USE_TLS = True EMAIL_HOST_USER = config("EMAIL_HOST_USER") EMAIL_HOST_PASSWORD = config("EMAIL_HOST_PASSWORD") EMAIL_FROM_ADDRESS = config("EMAIL_FROM_ADDRESS") +EMAIL_USE_SSL = False # crispy config CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5" diff --git a/templates/accounts/email/new_student_account_confirmation.html b/templates/accounts/email/new_student_account_confirmation.html index 9e35d9d..c04c6db 100755 --- a/templates/accounts/email/new_student_account_confirmation.html +++ b/templates/accounts/email/new_student_account_confirmation.html @@ -268,8 +268,8 @@

Login credentials for your DJ LMS account:
    -
  • ID: {user.username}
  • -
  • Your password: {password}
  • +
  • ID: {{ user.username }}
  • +
  • Your password: {{ password }}

To secure your account be sure to change your password.