def details_by_num(request, num): """This will show the book's description based on the id""" if UserProfile.objects.get(user=request.user).entity != 'staff': return redirect('/home/') book = BookDescription.objects.get(id=num) base = get_base(request) book_tx = Transaction.objects.filter(book__details=book).order_by('-id') total_stock = len(list(Book.objects.filter(details=book))) available_nos = len(list(Book.objects.filter(details=book, available=True))) if available_nos > 0: available = available_nos else: available = False context = { "book": book, "base": base, "semesters": semesters, "available": available, "total_stock": total_stock, "departments": departments, "subjects": subjects, "book_tx": book_tx } return render(request, "book_details_num.html", context)
def return_confirm(request): """ This method will show details about the book and student and confirm the return """ base = get_base(request) if UserProfile.objects.get(user=request.user).entity != 'staff': return redirect('/home/') if request.method == "POST": book_number = request.POST.get("book_number") libcard = request.POST.get("libcard") book = Book.objects.get(book_number=book_number) student = Student.objects.get(libcard=libcard) tx = Transaction.objects.get(student=student, book=book, issued=True, returned=False) tx.returned = True tx.return_time = datetime.datetime.now() tx.save() book.available = True book.save() return redirect("/books/return/")
def search(request): """This method will search the entire database for the suggested books""" base = get_base(request) if request.method == 'POST': query = request.POST.get('param') if not query: return render(request, "search.html") books_by_name = BookDescription.objects.filter( Q(name__icontains=query) | Q(author__icontains=query) | Q(description__icontains=query) | Q(department__name__icontains=query) | Q(subject__name__icontains=query)) try: books_by_num = Book.objects.get(book_number=query) except: books_by_num = None context = { "base": base, "semesters": semesters, "departments": departments, "subjects": subjects, "query": query, "books_by_name": books_by_name, "books_by_num": books_by_num } return render(request, "search.html", context) return redirect("/home/")
def profile(request): """This function will show the user their profile details""" user = User.objects.get(id=request.user.id) base = get_base(request) userprofile = UserProfile.objects.get(user=user) if userprofile.entity == 'student': student = Student.objects.get(userprofile=userprofile) context = { "student": student, 'base': base, 'profile': 'student', 'semesters': semesters, 'departments': departments, 'subjects': subjects } elif userprofile.entity == 'staff': staff = Staff.objects.get(userprofile=userprofile) context = { "staff": staff, 'base': base, 'profile': 'staff', 'semesters': semesters, 'departments': departments, 'subjects': subjects } return render(request, "profile.html", context)
def student_details(request, libcard): """ This will act as the link for the admins to find details about the student """ base = get_base(request) if UserProfile.objects.get(user=request.user).entity != 'staff': return redirect('/home/') try: student = Student.objects.get(libcard=libcard) except: return render( request, "error.html", { "message": "No user could be found with that card number", "base": base }) tx_details = student.transaction_set.all().order_by('-id') context = { "base": base, "student": student, "tx_details": tx_details, 'semesters': semesters, 'departments': departments, 'subjects': subjects } return render(request, "student_details.html", context)
def return_book(request): """ This method will allow admin to take books back from students """ base = get_base(request) if UserProfile.objects.get(user=request.user).entity != 'staff': return redirect('/home/') if request.method == "POST": book_number = request.POST.get("book_number") library_card_num = request.POST.get("library_card_num") book = Book.objects.get(book_number=book_number, available=False) student = Student.objects.get(libcard=library_card_num) tx_detail = Transaction.objects.get(book=book, student=student, issued=True, returned=False) context = { "book": book, "student": student, "tx_detail": tx_detail, "base": base, "semesters": semesters, "departments": departments, "subjects": subjects } return render(request, "return_confirm.html", context) return render( request, "return.html", { "base": base, "semesters": semesters, "departments": departments, "subjects": subjects })
def student_search(request): """ This will act as the link for the admins to find details about the student """ base = get_base(request) if UserProfile.objects.get(user=request.user).entity != 'staff': return redirect('/home/') if request.method == "POST": query = request.POST.get('query') if query.isdecimal(): try: student = Student.objects.get(libcard=query) notfound = False except: try: student = Student.objects.get(rollno=query) notfound = False except: student = None notfound = True context = { "base": base, "student": student, "notfound": notfound, 'semesters': semesters, 'departments': departments, 'subjects': subjects } else: students = Student.objects.filter( Q(userprofile__user__first_name__icontains=query) | Q(userprofile__user__last_name__icontains=query)).filter( userprofile__entity="student") context = { "base": base, "students": students, 'semesters': semesters, 'departments': departments, 'subjects': subjects } else: context = { "base": base, 'semesters': semesters, 'departments': departments, 'subjects': subjects } return render(request, "student_search.html", context)
def login(request): """This is the login function""" base = get_base(request) # After the user enters the credentials if request.method == 'POST': rollno = request.POST.get('rollno') password = request.POST.get('password') user = authenticate(username=rollno, password=password) if user: if user.is_active: auth_login(request, user) entity = UserProfile.objects.get(user=user).entity if entity == "staff": return redirect('/users/admin/dashboard/') else: return redirect('/home/') else: message = """The user is not active. Kindly contact the administrator""" return render( request, 'login_error.html', { "message": message, "base": base, 'semesters': semesters, 'departments': departments, 'subjects': subjects }) else: message = """The user could not be found. Kindly ensure the email and password entered are correct.""" return render( request, 'login_error.html', { "message": message, "base": base, 'semesters': semesters, 'departments': departments, 'subjects': subjects }) return render( request, 'login.html', { "base": base, 'semesters': semesters, 'departments': departments, 'subjects': subjects })
def edit(request): """This function will let the user edit their details""" base = get_base(request) userprofile = UserProfile.objects.get(user=request.user) if request.method == "POST": if userprofile.entity == 'student': student = Student.objects.get(userprofile=userprofile) branch = request.POST.get('branch') semester = request.POST.get('semester') libcard = request.POST.get('libcard') phone = request.POST.get('phone') if phone: userprofile.phone = phone userprofile.save() if branch: student.department_name = Department.objects.get(name=branch) if semester: student.semester = Semester.objects.get(semester=semester) if libcard: student.libcard = libcard student.save() else: pass return redirect("/users/profile/") if userprofile.entity == 'student': student = Student.objects.get(userprofile=userprofile) context = { "student": student, "base": base, "profile": "student", 'semesters': semesters, 'departments': departments, 'subjects': subjects } elif userprofile.entity == 'staff': staff = Staff.objects.get(userprofile=userprofile) context = { "staff": staff, "base": base, "profile": "staff", 'semesters': semesters, 'departments': departments, 'subjects': subjects } return render(request, "edit.html", context)
def dashboard(request): """ This method will render the dashboard for the admin """ base = get_base(request) if UserProfile.objects.get(user=request.user).entity != 'staff': return redirect('/home/') context = { 'base': base, 'semesters': semesters, 'departments': departments, 'subjects': subjects } return render(request, "dashboard.html", context)
def add_books(request): """ This method will let the admins add books to the database """ base = get_base(request) if UserProfile.objects.get(user=request.user).entity != 'staff': return redirect('/home/') if request.method == "POST": book_number_init = int(request.POST.get("book_number_init")) book_number_end = int(request.POST.get("book_number_end")) book_id = request.POST.get("existing_book") if book_id: book = BookDescription.objects.get(id=book_id) else: book_name = request.POST.get("book_name") book_author = request.POST.get("book_author") book_description = request.POST.get("book_description") book = BookDescription.objects.create(name=book_name, author=book_author, description=book_description) for department in departments: dprt = Department.objects.get(name=department) book.department.add(dprt) for subject in subjects: sub = Subject.objects.get(name=subject) book.subject.add(sub) for semester in semesters: sem = Semester.objects.get(semester=semester) book.semester.add(sem) for i in range(book_number_init, book_number_end + 1): Book.objects.create(details=book, book_number=i) return redirect("/books/add/") existing_books = BookDescription.objects.all().order_by('name') context = { "departments": departments, "semesters": semesters, "subjects": subjects, "base": base, "existing_books": existing_books } return render(request, "add_books.html", context)
def by_semester(request, sem): """This will show the books by semester""" base = get_base(request) semester = Semester.objects.get(semester=sem) books_query = BookDescription.objects.filter(semester=semester) context = { 'books_query': books_query, "query": "semester " + sem, "base": base, "semesters": semesters, "departments": departments, "subjects": subjects } return render(request, "bookquery.html", context)
def details(request): """ Find a books history """ base = get_base(request) if UserProfile.objects.get(user=request.user).entity != 'staff': return redirect('/home/') if request.method == "POST": query = request.POST.get('query') if query.isdecimal(): try: book = Book.objects.get(book_number=query) except: book = None context = { "base": base, "semesters": semesters, "departments": departments, "subjects": subjects, "book": book } else: books = BookDescription.objects.filter( Q(name__icontains=query) | Q(author__icontains=query) | Q(description__icontains=query) | Q(department__name__icontains=query) | Q(subject__name__icontains=query)) context = { "base": base, "semesters": semesters, "departments": departments, "subjects": subjects, "books": books } else: context = { "base": base, "semesters": semesters, "departments": departments, "subjects": subjects } return render(request, "book_details.html", context)
def by_branch(request, b): """This will show the books by branch name""" branch = ' '.join(b.split('-')) department = Department.objects.get(name=branch.upper()) books_query = BookDescription.objects.filter(department=department) base = get_base(request) context = { 'books_query': books_query, "base": base, "query": b, "semesters": semesters, "departments": departments, "subjects": subjects } return render(request, "bookquery.html", context)
def description(request, id): """This will show the book's description based on the id""" book = BookDescription.objects.get(id=id) available_nos = len(list(Book.objects.filter(details=book, available=True))) if available_nos > 0: available = True else: available = False base = get_base(request) context = { "book": book, "base": base, "semesters": semesters, "departments": departments, "subjects": subjects, "available": available } return render(request, "bookdescription.html", context)
def transaction(request, type): """This will return the transaction detail table for specific users and can be filtered by the type """ base = get_base(request) if type == "all": userprofile = UserProfile.objects.get(user=request.user) try: student = Student.objects.get(userprofile=userprofile) except: student = None if student != None: tx_details = Transaction.objects.filter(student=student).order_by('-id') else: return redirect("/") context = {"tx_details": tx_details, "base": base, 'semesters': semesters, 'departments': departments, 'subjects': subjects} return render(request, "tx_detail.html", context)
def by_subject(request, sub): """This will show the books based on the subject""" subj = ' '.join(sub.split('-')) subject = Subject.objects.get(name=subj.upper()) books_query = BookDescription.objects.filter(subject=subject) base = get_base(request) context = { 'books_query': books_query, "base": base, "base": base, "query": sub, "semesters": semesters, "departments": departments, "subjects": subjects } return render(request, 'bookquery.html', context)
def issue(request): """ This method will allow admin to issue books to the student """ base = get_base(request) if UserProfile.objects.get(user=request.user).entity != 'staff': return redirect('/home/') if request.method == "POST": book_number = request.POST.get("book_number") library_card_num = request.POST.get("library_card_num") book = Book.objects.get(book_number=book_number) if book.available == False: context = { "book": book, "available": False, "base": base, "semesters": semesters, "departments": departments, "subjects": subjects } return render(request, "issue_confirm.html", context) student = Student.objects.get(libcard=library_card_num) context = { "book": book, "available": True, "student": student, "base": base, "semesters": semesters, "departments": departments, "subjects": subjects } return render(request, "issue_confirm.html", context) return render( request, "issue.html", { "base": base, "semesters": semesters, "departments": departments, "subjects": subjects })
def issue_confirm(request): """ This method will show details about the book and student and confirm the issue """ base = get_base(request) if UserProfile.objects.get(user=request.user).entity != 'staff': return redirect('/home/') if request.method == "POST": book_number = request.POST.get("book_number") libcard = request.POST.get("libcard") book = Book.objects.get(book_number=book_number) student = Student.objects.get(libcard=libcard) staff = Staff.objects.get(userprofile__user=request.user) Transaction.objects.create(staff=staff, student=student, book=book, issued=True, issue_time=datetime.datetime.now()) book.available = False book.save() return redirect("/books/issue/")
def home(request): """This is the home page functions""" base = get_base(request) first_row = None second_row = None third_row = None sem = None department = None if request.user.is_authenticated: userprofile = UserProfile.objects.get(user=request.user) if userprofile.entity == "student": student = Student.objects.get(userprofile=userprofile) sem = student.semester department = student.department_name first_row = BookDescription.objects.filter(department=department, semester=sem)[:6] second_row = BookDescription.objects.filter( department=department)[:6] third_row = BookDescription.objects.filter(semester=sem)[:6] # Books for branches books_for_cse = BookDescription.objects.filter( department__name="Computer Science & Engineering")[:6] books_for_civil = BookDescription.objects.filter( department__name="Civil Engineering")[:6] books_for_mech = BookDescription.objects.filter( department__name="Mechanical Engineering")[:6] books_for_et = BookDescription.objects.filter( department__name="Electronics & Telecommunications Engineering")[:6] books_for_eee = BookDescription.objects.filter( department__name="Electrical & Electronics Engineering")[:6] # Books for subjects books_for_maths = BookDescription.objects.filter( subject__name="Mathematics") books_for_physics = BookDescription.objects.filter(subject__name="Physics") books_for_chemistry = BookDescription.objects.filter( subject__name="Chemistry") context = { 'books_for_cse': books_for_cse, 'books_for_civil': books_for_civil, 'books_for_mech': books_for_mech, "books_for_et": books_for_et, "books_for_eee": books_for_eee, "base": base, 'semesters': semesters, 'departments': departments, 'subjects': subjects, "first_row": first_row, "second_row": second_row, "third_row": third_row, "sem": sem, "branch": department, "books_for_maths": books_for_maths, "books_for_chemistry": books_for_chemistry, "books_for_physics": books_for_physics } return render(request, 'home.html', context)
def register(request): """This is the register function""" base = get_base(request) # After use submits its credentials if request.method == 'POST': email = request.POST.get('email') rollno = request.POST.get('rollno') first_name = request.POST.get('first_name') last_name = request.POST.get('last_name') password1 = request.POST.get('password1') password2 = request.POST.get('password2') # Checks for missing form fieds if not email: message = "Please provide a valid email" return render( request, "login_error.html", { "message": message, "base": base, 'semesters': semesters, 'departments': departments, 'subjects': subjects }) if not password1 or not password2: message = "Passwords do not match" return render( request, "login_error.html", { "message": message, "base": base, 'semesters': semesters, 'departments': departments, 'subjects': subjects }) if not first_name: message = "Please provide your name" return render( request, "login_error.html", { "message": message, "base": base, 'semesters': semesters, 'departments': departments, 'subjects': subjects }) if not last_name: last_name = "" if not rollno: message = "Please provide your roll number" return render( request, "login_error.html", { "message": message, "base": base, 'semesters': semesters, 'departments': departments, 'subjects': subjects }) # Checks for invalid form fields invalid = [] if "@" not in email or "." not in email: message = "Please provide a valid email." return render( request, "login_error.html", { "message": message, "base": base, 'semesters': semesters, 'departments': departments, 'subjects': subjects }) # Check for duplicate email try: already_user = User.objects.get(username=rollno) except: already_user = None if already_user != None: message = "The roll number entered already has an account" return render( request, "login_error.html", { "message": message, "base": base, 'semesters': semesters, 'departments': departments, 'subjects': subjects }) if password1 == password2: # Creating a user on the platform user_created = User.objects.create_user(email=email, username=rollno, password=password1, first_name=first_name, last_name=last_name) userprofile = UserProfile() userprofile.user = user_created #userprofile.name = user_created.first_name +" "+ user_created.last_name userprofile.save() userprofile = UserProfile.objects.get(user=user_created) student = Student() student.userprofile = userprofile student.rollno = rollno student.save() user = authenticate(username=rollno, password=password1) # The user can be inactive if user.is_active: auth_login(request, user) return redirect('/home/') else: message = """The user is not active. Kindly contact the administrator""" return render( request, 'login_error.html', { "message": message, "base": base, 'semesters': semesters, 'departments': departments, 'subjects': subjects }) else: message = "Passwords do not match" return render( request, "login_error.html", { "message": message, "base": base, 'semesters': semesters, 'departments': departments, 'subjects': subjects }) return render( request, "register.html", { "base": base, 'semesters': semesters, 'departments': departments, 'subjects': subjects })