Newer
Older
from django import forms
from django.utils.translation import ugettext_lazy as _
from addressfield.fields import AddressField
from opentech.apply.categories.blocks import CategoryQuestionBlock
from opentech.apply.stream_forms.blocks import FormFieldsBlock
from opentech.apply.utils.blocks import (
CustomFormFieldsBlock,
MustIncludeFieldBlock,
RichTextFieldBlock,
SingleIncludeBlock,
)
class ApplicationSingleIncludeFieldBlock(SingleIncludeBlock):
pass
class ApplicationMustIncludeFieldBlock(MustIncludeFieldBlock):
pass
class TitleBlock(ApplicationMustIncludeFieldBlock):
name = 'title'
description = 'The title of the project'
label = _('Application title')
class ValueBlock(ApplicationSingleIncludeFieldBlock):
name = 'value'
description = 'The value of the project'
widget = forms.NumberInput
class Meta:
label = _('Requested amount')
def prepare_data(self, value, data, serialize):
return '$' + str(data)
class EmailBlock(ApplicationMustIncludeFieldBlock):
name = 'email'
description = 'The applicant email address'
field_class = forms.EmailField
class AddressFieldBlock(ApplicationSingleIncludeFieldBlock):
name = 'address'
description = 'The postal address of the user'
field_class = AddressField
class Meta:
label = _('Address')
icon = 'home'
# Based on the fields listed in addressfields/widgets.py
return ', '.join(
for field in order_fields
def prepare_data(self, value, data, serialize):
order_fields = [
'thoroughfare', 'premise', 'localityname', 'administrativearea', 'postalcode', 'country'
]
data = {
field: data[field]
for field in order_fields
}
return ', '.join(
value
for value in data.values()
if value
)
class FullNameBlock(ApplicationMustIncludeFieldBlock):
name = 'full_name'
description = 'Full name'
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
class DurationBlock(ApplicationMustIncludeFieldBlock):
name = 'duration'
description = 'Duration'
DURATION_OPTIONS = {
1: "1 month",
2: "2 months",
3: "3 months",
4: "4 months",
5: "5 months",
6: "6 months",
7: "7 months",
8: "8 months",
9: "9 months",
10: "10 months",
11: "11 months",
12: "12 months",
18: "18 months",
24: "24 months",
}
field_class = forms.ChoiceField
def get_field_kwargs(self, *args, **kwargs):
field_kwargs = super().get_field_kwargs(*args, **kwargs)
field_kwargs['choices'] = self.DURATION_OPTIONS.items()
return field_kwargs
def prepare_data(self, value, data, serialize):
return self.DURATION_OPTIONS[int(data)]
class ApplicationCustomFormFieldsBlock(CustomFormFieldsBlock, FormFieldsBlock):
category = CategoryQuestionBlock(group=_('Custom'))
rich_text = RichTextFieldBlock(group=_('Fields'))
required_blocks = ApplicationMustIncludeFieldBlock.__subclasses__()
single_blocks = ApplicationSingleIncludeFieldBlock.__subclasses__()
REQUIRED_BLOCK_NAMES = [block.name for block in ApplicationMustIncludeFieldBlock.__subclasses__()]
SINGLE_BLOCK_NAMES = [block.name for block in ApplicationSingleIncludeFieldBlock.__subclasses__()]
NAMED_BLOCKS = REQUIRED_BLOCK_NAMES + SINGLE_BLOCK_NAMES