Newer
Older
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from django import forms
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 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(),
url="/funders/funder-autocomplete", attrs={"data-html": True}
),
class FunderOrganizationSelectForm(forms.ModelForm):
widget=autocomplete.ModelSelect2(
url="/organizations/organization-autocomplete", attrs={"data-html": True}
),
class Meta:
model = Funder
fields = []
class GrantForm(HttpRefererFormMixin, forms.ModelForm):
class Meta:
model = Grant
fields = ["funder", "number", "recipient_name", "recipient", "further_details"]
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"),
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
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")),
)