コード例 #1
0
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)
コード例 #2
0
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/")
コード例 #3
0
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/")
コード例 #4
0
ファイル: views.py プロジェクト: vjaydeshmukh/LibChain
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)
コード例 #5
0
ファイル: views.py プロジェクト: vjaydeshmukh/LibChain
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)
コード例 #6
0
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
        })
コード例 #7
0
ファイル: views.py プロジェクト: vjaydeshmukh/LibChain
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)
コード例 #8
0
ファイル: views.py プロジェクト: vjaydeshmukh/LibChain
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
        })
コード例 #9
0
ファイル: views.py プロジェクト: vjaydeshmukh/LibChain
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)
コード例 #10
0
ファイル: views.py プロジェクト: vjaydeshmukh/LibChain
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)
コード例 #11
0
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)
コード例 #12
0
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)
コード例 #13
0
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)
コード例 #14
0
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)
コード例 #15
0
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)
コード例 #16
0
ファイル: views.py プロジェクト: vjaydeshmukh/LibChain
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)
コード例 #17
0
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)
コード例 #18
0
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
        })
コード例 #19
0
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/")
コード例 #20
0
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)
コード例 #21
0
ファイル: views.py プロジェクト: vjaydeshmukh/LibChain
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
        })