gestiojeux/inventory/views.py
sinavir c01ed7cb47 style(pre-commit): Add hook
Python:
- black
- isort (black profile)
- ruff

Nix:
- statix
- nixfmt-rfc-style
- deadnix
2024-07-04 20:47:46 +02:00

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