forked from DGNum/gestiojeux
c01ed7cb47
Python: - black - isort (black profile) - ruff Nix: - statix - nixfmt-rfc-style - deadnix
119 lines
3.1 KiB
Python
119 lines
3.1 KiB
Python
import qrcode
|
|
from django.contrib.auth.mixins import PermissionRequiredMixin
|
|
from django.http import HttpResponse
|
|
from django.urls import reverse
|
|
from django.views.generic import DetailView, ListView, TemplateView
|
|
from django_tables2.views import SingleTableView
|
|
from haystack.forms import SearchForm
|
|
from haystack.generic_views import SearchView
|
|
from haystack.query import SearchQuerySet
|
|
|
|
from comments.views import AddCommentView, ModifyCommentView
|
|
from loans.views import BorrowView, DetailLoanView, ReturnView
|
|
|
|
from .forms import BorrowGameForm
|
|
from .models import Category, Game, GameComment, GameLoan, Tag
|
|
from .tables import LoanTable, OngoingLoansTable
|
|
|
|
|
|
class InventoryView(TemplateView):
|
|
template_name = "inventory/inventory.html"
|
|
|
|
|
|
class CategoryListView(ListView):
|
|
model = Category
|
|
template_name = "inventory/category_list.html"
|
|
paginate_by = 20
|
|
|
|
|
|
class CategoryView(DetailView):
|
|
model = Category
|
|
template_name = "inventory/category.html"
|
|
|
|
|
|
class TagListView(ListView):
|
|
model = Tag
|
|
template_name = "inventory/tag_list.html"
|
|
paginate_by = 20
|
|
|
|
|
|
class TagView(DetailView):
|
|
model = Tag
|
|
template_name = "inventory/tag.html"
|
|
|
|
|
|
class GameListView(ListView):
|
|
model = Game
|
|
template_name = "inventory/game_list.html"
|
|
paginate_by = 20
|
|
|
|
|
|
class GameView(DetailLoanView):
|
|
model = Game
|
|
loan_model = GameLoan
|
|
template_name = "inventory/game.html"
|
|
|
|
|
|
class InventorySearchView(SearchView):
|
|
form_class = SearchForm
|
|
template_name = "inventory/search.html"
|
|
paginate_by = 20
|
|
|
|
def get_queryset(self):
|
|
return SearchQuerySet().models(Category, Tag, Game)
|
|
|
|
|
|
class AddGameCommentView(AddCommentView):
|
|
model = Game
|
|
comment_model = GameComment
|
|
pattern_name = "inventory:game"
|
|
|
|
|
|
class ModifyGameCommentView(ModifyCommentView):
|
|
model = Game
|
|
comment_model = GameComment
|
|
template_name = "inventory/game.html"
|
|
success_pattern_name = "inventory:game"
|
|
|
|
|
|
class BorrowGameView(BorrowView):
|
|
model = Game
|
|
loan_model = GameLoan
|
|
template_name = "inventory/loans/borrow.html"
|
|
form_class = BorrowGameForm
|
|
success_pattern_name = "inventory:game_loan"
|
|
|
|
|
|
class ReturnGameView(ReturnView):
|
|
model = GameLoan
|
|
pattern_name = "inventory:game_loan"
|
|
|
|
|
|
class GameLoanView(DetailLoanView):
|
|
model = Game
|
|
loan_model = GameLoan
|
|
template_name = "inventory/loans/game_loan.html"
|
|
|
|
|
|
class OngoingLoansView(SingleTableView):
|
|
queryset = GameLoan.ongoing_loans()
|
|
table_class = OngoingLoansTable
|
|
template_name = "inventory/loans/ongoing.html"
|
|
|
|
|
|
class DetailLoanView(PermissionRequiredMixin, SingleTableView):
|
|
permission_required = "inventory.can_see_loan_details"
|
|
model = GameLoan
|
|
table_class = LoanTable
|
|
template_name = "inventory/loans/loans_table.html"
|
|
|
|
|
|
class QrCodeView(DetailView):
|
|
model = Game
|
|
url = "inventory:game" # Sensible default
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
response = HttpResponse(content_type="image/png")
|
|
img = qrcode.make(reverse(self.url, kwargs={"slug": self.get_object().slug}))
|
|
img.save(response, "PNG")
|
|
return response
|