SciPost Code Repository

Skip to content
Snippets Groups Projects
forms.py 3.65 KiB
Newer Older
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
from django import forms
from django.urls import reverse_lazy
from common.forms import HTMXDynSelWidget

from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Div, Field, ButtonHolder, Submit

from .models import Funder, Grant, IndividualBudget
from dal import autocomplete
Jorran de Wit's avatar
Jorran de Wit committed
from scipost.forms import HttpRefererFormMixin
from scipost.models import Contributor
from organizations.models import Organization
from .models import Funder, Grant

class FunderRegistrySearchForm(forms.Form):
    name = forms.CharField(max_length=128)


class FunderForm(forms.ModelForm):
    class Meta:
        model = Funder
        fields = ["name", "acronym", "identifier"]
class FunderSelectForm(forms.Form):
    funder = forms.ModelChoiceField(
        queryset=Funder.objects.all(),
        widget=HTMXDynSelWidget(
            url="/funders/funder-autocomplete", attrs={"data-html": True}
        ),
class FunderOrganizationSelectForm(forms.ModelForm):
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed
    organization = forms.ModelChoiceField(
        queryset=Organization.objects.all(),
        widget=autocomplete.ModelSelect2(
            url="/organizations/organization-autocomplete", attrs={"data-html": True}
        ),

    class Meta:
        model = Funder
        fields = []


Jorran de Wit's avatar
Jorran de Wit committed
class GrantForm(HttpRefererFormMixin, forms.ModelForm):
        fields = ["funder", "number", "recipient_name", "recipient", "further_details"]
    def __init__(self, *args, **kwargs):
Jorran de Wit's avatar
Jorran de Wit committed
        super().__init__(*args, **kwargs)
        self.fields["funder"] = forms.ModelChoiceField(
            queryset=Funder.objects.all(),
            widget=HTMXDynSelWidget(url="/funders/funder-autocomplete"),
        )
        self.fields["recipient"] = forms.ModelChoiceField(
            queryset=Contributor.objects.select_related("user").order_by(
                "user__last_name"
            ),
            required=False,

class GrantSelectForm(forms.Form):
    grant = forms.ModelChoiceField(
        queryset=Grant.objects.all(),
        widget=HTMXDynSelWidget(url="/funders/grant-autocomplete"),


class IndividualBudgetForm(forms.ModelForm):
    required_css_class = "required-asterisk"

    class Meta:
        model = IndividualBudget
        fields = [
            "organization",
            "description",
            "holder",
            "budget_number",
            "fundref_id",
        ]
        widgets = {
            "organization": autocomplete.ModelSelect2(
                url=reverse_lazy("organizations:organization-autocomplete"),
                attrs={
                    "data-html": True,
                    "style": "width: 100%",
                },
            ),
            "holder": autocomplete.ModelSelect2(
                url=reverse_lazy("profiles:profile-autocomplete"),
                attrs={
                    "data-html": True,
                    "style": "width: 100%",
                },
            ),
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.layout = Layout(
            Div(
                Div(Field("organization"), css_class="col-12 col-md-6"),
                Div(Field("holder"), css_class="col-12 col-md-6"),
                Div(Field("description"), css_class="col-12"),
                Div(Field("budget_number"), css_class="col-12 col-md"),
                Div(Field("fundref_id"), css_class="col-12 col-md"),
                css_class="row",
            ),
            ButtonHolder(Submit("submit", "Submit", css_class="btn-sm")),
        )