Skip to content
Snippets Groups Projects
forms.py 2.77 KiB
Newer Older
from django.http import HttpResponse
from django.utils.translation import gettext as _

from djp_sepa.models import SEPAMandate
Tom Teichler's avatar
Tom Teichler committed
from material import Fieldset, Layout, Row
Tom Teichler's avatar
Tom Teichler committed
from payments import PaymentStatus
from aleksis.core.forms import ActionForm
from aleksis.core.mixins import ExtensibleForm

from .models.base import Client
from .models.invoice import InvoiceGroup
from .tasks import email_invoice


def send_emails_action(modeladmin, request, queryset):
    """Send e-mails for selected invoices."""
    email_invoice.delay(list(queryset.values_list("token", flat=True)))

Tom Teichler's avatar
Tom Teichler committed

send_emails_action.short_description = _("Send e-mails")
send_emails_action.permission = "tezor.send_invoice_email"

Tom Teichler's avatar
Tom Teichler committed

def get_sepa_xml(modeladmin, request, queryset):
    """Get a SEPA XML for selected invoices."""
    qs = SEPAMandate.objects.filter(payment__in=queryset, payment__status=PaymentStatus.PREAUTH)
    sepadd = SEPAMandate.as_sepadd(qs=qs)
Tom Teichler's avatar
Tom Teichler committed
    return HttpResponse(
        sepadd.export(pretty_print=True).decode(),
        headers={
            "Content-Type": "text/xml",
            "Content-Disposition": 'attachment; filename="sepa_direct_debit.xml"',
        },
    )


get_sepa_xml.short_description = _("Get SEPA XML")
get_sepa_xml.permission = "tezor.get_sepa_xml"
Tom Teichler's avatar
Tom Teichler committed

class InvoicesActionForm(ActionForm):
    def get_actions(self):
        return [send_emails_action, get_sepa_xml]
Nik | Klampfradler's avatar
Nik | Klampfradler committed

class EditClientForm(ExtensibleForm):
    """Form to create or edit clients."""

Tom Teichler's avatar
Tom Teichler committed
    layout = Layout(
        Row("name", "email"),
        Fieldset(
            _("Payment pledge"),
            Row("pledge_enabled"),
        ),
Tom Teichler's avatar
Tom Teichler committed
        Fieldset(
            _("Sofort / Klarna"),
            "sofort_enabled",
Tom Teichler's avatar
Tom Teichler committed
            Row("sofort_api_id", "sofort_api_key", "sofort_project_id"),
        ),
        Fieldset(
            _("PayPal"),
            "paypal_enabled",
Tom Teichler's avatar
Tom Teichler committed
            Row("paypal_client_id", "paypal_secret", "paypal_capture"),
        ),
        Fieldset(
            _("Debit"),
            "sdd_enabled",
            Row("sdd_creditor", "sdd_creditor_identifier"),
Tom Teichler's avatar
Tom Teichler committed
            Row("sdd_iban", "sdd_bic"),
    class Meta:
        model = Client
Jonathan Weth's avatar
Jonathan Weth committed
        fields = [
            "name",
            "email",
            "pledge_enabled",
            "sofort_enabled",
            "sofort_api_id",
            "sofort_api_key",
            "sofort_project_id",
            "paypal_enabled",
            "paypal_client_id",
            "paypal_secret",
            "paypal_capture",
            "sdd_enabled",
            "sdd_creditor",
            "sdd_creditor_identifier",
            "sdd_iban",
            "sdd_bic",
        ]


class EditInvoiceGroupForm(ExtensibleForm):

Nik | Klampfradler's avatar
Nik | Klampfradler committed
    layout = Layout(Row("name", "template_name"))

    class Meta:
        model = InvoiceGroup
Jonathan Weth's avatar
Jonathan Weth committed
        fields = ["name", "template_name"]