diff --git a/aleksis/apps/kort/forms.py b/aleksis/apps/kort/forms.py index 39781a61c83837dc42e6a4c63672d14a39f82b81..7abb6517ddfdab34f8c70a01cdd8e0e5a225c287 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 26d7a8667a1ff856d8820816b18ef79b714f4a34..d6181110b7df5aff5e9a1fc8ef820e747087cac8 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."""