From 782650f735015214969c1ca9b32638baf69fa433 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Mon, 1 Aug 2022 23:04:12 +0200 Subject: [PATCH] Add option to directly print newly issued cards --- aleksis/apps/kort/forms.py | 14 ++++++++++++++ aleksis/apps/kort/views.py | 22 ++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/aleksis/apps/kort/forms.py b/aleksis/apps/kort/forms.py index 39781a6..7abb651 100644 --- a/aleksis/apps/kort/forms.py +++ b/aleksis/apps/kort/forms.py @@ -9,6 +9,13 @@ from aleksis.apps.kort.models import Card, CardLayout, CardLayoutMediaFile, Card class CardForm(forms.ModelForm): + printer = forms.ModelChoiceField( + queryset=None, + label=_("Card Printer"), + help_text=_("Select a printer to directly print the newly issued card."), + required=False, + ) + class Meta: model = Card fields = ["person", "valid_until", "layout"] @@ -28,6 +35,13 @@ class CardForm(forms.ModelForm): super().__init__(*args, **kwargs) self.fields["layout"].required = True + layouts = CardLayout.objects.all() + if layouts.count() == 1: + self.fields["layout"].initial = layouts.first() + + printers = CardPrinter.objects.all() + self.fields["printer"].queryset = printers + class CardPrinterForm(forms.ModelForm): layout = Layout( diff --git a/aleksis/apps/kort/views.py b/aleksis/apps/kort/views.py index 26d7a86..d618111 100644 --- a/aleksis/apps/kort/views.py +++ b/aleksis/apps/kort/views.py @@ -70,6 +70,28 @@ class CardCreateView(PermissionRequiredMixin, RevisionMixin, AdvancedCreateView) success_message = _("The card has been created successfully.") success_url = reverse_lazy("cards") + def form_valid(self, form: CardForm) -> HttpResponse: + response = super().form_valid(form) + if form.cleaned_data.get("printer"): + printer = form.cleaned_data["printer"] + try: + job = self.object.print_card(printer) + messages.success( + self.request, + _( + "The print job #{} for the card {} on " + "the printer {} has been created successfully." + ).format(job.pk, self.object.person, printer.name), + ) + except ValueError as e: + messages.error( + self.request, + _( + "The print job couldn't be started because of the following error: {}" + ).format(e), + ) + return response + class CardDeleteView(PermissionRequiredMixin, RevisionMixin, AdvancedDeleteView): """View used to delete a card.""" -- GitLab