Skip to content
Snippets Groups Projects

Setup printer stuff

Merged Jonathan Weth requested to merge feature/printers into main
3 files
+ 69
1
Compare changes
  • Side-by-side
  • Inline
Files
3
+ 45
0
@@ -2,8 +2,11 @@ from django.contrib import admin
@@ -2,8 +2,11 @@ from django.contrib import admin
from django.shortcuts import get_object_or_404
from django.shortcuts import get_object_or_404
from django.utils import timezone
from django.utils import timezone
 
from celery.result import allow_join_result
 
from celery.states import SUCCESS
from oauth2_provider.contrib.rest_framework import TokenHasScope
from oauth2_provider.contrib.rest_framework import TokenHasScope
from rest_framework import generics, permissions, serializers
from rest_framework import generics, permissions, serializers
 
from rest_framework.exceptions import APIException, ValidationError
from rest_framework.permissions import BasePermission
from rest_framework.permissions import BasePermission
from rest_framework.response import Response
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.views import APIView
@@ -79,6 +82,12 @@ class CardPrintJobStatusSerializer(serializers.ModelSerializer):
@@ -79,6 +82,12 @@ class CardPrintJobStatusSerializer(serializers.ModelSerializer):
fields = ("id", "status", "status_text")
fields = ("id", "status", "status_text")
 
class CardChipNumberSerializer(serializers.ModelSerializer):
 
class Meta:
 
model = Card
 
fields = ("chip_number",)
 
 
class CardPrinterDetails(generics.RetrieveAPIView):
class CardPrinterDetails(generics.RetrieveAPIView):
"""Show details about the card printer."""
"""Show details about the card printer."""
@@ -135,3 +144,39 @@ class CardPrintJobUpdateStatusView(generics.UpdateAPIView):
@@ -135,3 +144,39 @@ class CardPrintJobUpdateStatusView(generics.UpdateAPIView):
required_scopes = ["card_printer"]
required_scopes = ["card_printer"]
serializer_class = CardPrintJobStatusSerializer
serializer_class = CardPrintJobStatusSerializer
queryset = CardPrintJob.objects.all()
queryset = CardPrintJob.objects.all()
 
 
 
class CardPrintJobSetChipNumberView(generics.UpdateAPIView):
 
"""Update the status of the card printer."""
 
 
permission_classes = [permissions.IsAuthenticated, TokenHasScope, CorrectJobPrinterPermission]
 
required_scopes = ["card_printer"]
 
serializer_class = CardChipNumberSerializer
 
queryset = CardPrintJob.objects.all()
 
 
def update(self, request, *args, **kwargs):
 
instance = self.get_object()
 
card = instance.card
 
 
if card.chip_number:
 
raise ValidationError
 
 
serializer = self.get_serializer(card, data=request.data)
 
serializer.is_valid(raise_exception=True)
 
self.perform_update(serializer)
 
 
result = instance.card.generate_pdf()
 
 
with allow_join_result():
 
result.wait()
 
card.refresh_from_db()
 
 
if result.status == SUCCESS and card.pdf_file:
 
serializer = CardPrintJobSerializer(instance)
 
instance.refresh_from_db()
 
 
return Response(serializer.data)
 
else:
 
card.chip_number = None
 
card.save()
 
raise APIException("Error while generating PDF file")
Loading