71 lines
2.2 KiB
Python
71 lines
2.2 KiB
Python
from django.shortcuts import render, redirect, get_object_or_404
|
|
from .models import Book, Transaction
|
|
from .forms import BookForm, IssueBookForm
|
|
from django.utils import timezone
|
|
|
|
def index(request):
|
|
books = Book.objects.all()
|
|
context = {
|
|
'books': books,
|
|
'project_name': 'Library',
|
|
}
|
|
return render(request, 'core/index.html', context)
|
|
|
|
def add_book(request):
|
|
if request.method == 'POST':
|
|
form = BookForm(request.POST)
|
|
if form.is_valid():
|
|
book = form.save(commit=False)
|
|
book.available_copies = book.total_copies
|
|
book.save()
|
|
return redirect('index')
|
|
else:
|
|
form = BookForm()
|
|
context = {
|
|
'form': form,
|
|
'project_name': 'Library',
|
|
}
|
|
return render(request, 'core/add_book.html', context)
|
|
|
|
def issue_book(request, book_id):
|
|
book = get_object_or_404(Book, id=book_id)
|
|
if request.method == 'POST':
|
|
form = IssueBookForm(request.POST)
|
|
if form.is_valid():
|
|
if book.available_copies > 0:
|
|
transaction = form.save(commit=False)
|
|
transaction.book = book
|
|
transaction.save()
|
|
book.available_copies -= 1
|
|
book.save()
|
|
return redirect('index')
|
|
else:
|
|
# Handle case where no copies are available
|
|
pass
|
|
else:
|
|
form = IssueBookForm()
|
|
context = {
|
|
'form': form,
|
|
'book': book,
|
|
'project_name': 'Library',
|
|
}
|
|
return render(request, 'core/issue_book.html', context)
|
|
|
|
def transactions(request):
|
|
transactions = Transaction.objects.all().order_by('-issue_date')
|
|
context = {
|
|
'transactions': transactions,
|
|
'project_name': 'Library',
|
|
}
|
|
return render(request, 'core/transactions.html', context)
|
|
|
|
def return_book(request, transaction_id):
|
|
transaction = get_object_or_404(Transaction, id=transaction_id)
|
|
if not transaction.is_returned:
|
|
transaction.is_returned = True
|
|
transaction.return_date = timezone.now()
|
|
transaction.save()
|
|
transaction.book.available_copies += 1
|
|
transaction.book.save()
|
|
return redirect('transactions')
|