from django.urls import reverse from crispy_forms.helper import FormHelper from crispy_forms.layout import Submit, Layout from crispy_forms.bootstrap import Tab, TabHolder from leaflet.forms.widgets import LeafletWidget from moderation.forms import BaseModeratedObjectForm from .models import CaseStudy class BaseCaseStudyForm(BaseModeratedObjectForm): """Base form class for the CaseStudy model.""" def __init__(self, *args, **kwargs): super(BaseCaseStudyForm, self).__init__(*args, **kwargs) self.helper = FormHelper() self.helper.form_id = 'case-study-form' self.helper.form_class = 'form-horizontal' self.helper.form_method = 'post' self.helper.form_action = 'add' self.helper.label_class = 'col-lg-2' self.helper.field_class = 'col-lg-8' self.helper.add_input(Submit('submit', 'Submit')) class Meta: model = CaseStudy fields = '__all__' widgets = {'location': LeafletWidget(attrs={})} class ShortCaseStudyForm(BaseCaseStudyForm): """Short version of the CaseStudy form.""" def __init__(self, *args, **kwargs): super(ShortCaseStudyForm, self).__init__(*args, **kwargs) self.helper.form_action = reverse('short-form') class Meta(BaseCaseStudyForm.Meta): fields = [ 'entry_name', 'location', 'sector_of_economy', 'positive_or_negative', 'country', 'area_of_land', 'land_ownership', 'land_ownership_details', 'location_context', 'type_of_ecosystem', 'describe_ecosystem', 'affects_indigenous', 'affects_indigenous_detail', 'project_status', 'synopsis', 'full_description', 'image', 'image_caption', 'image_credit', 'video', 'media_coverage_mainstream', 'media_coverage_independent', 'community_voices' ] class LongCaseStudyForm(BaseCaseStudyForm): """Long version of the CaseStudy form.""" def __init__(self, *args, **kwargs): super(LongCaseStudyForm, self).__init__(*args, **kwargs) self.helper.form_action = reverse('long-form') self.helper.layout = Layout( TabHolder( Tab("First Page", 'entry_name', 'location', 'sector_of_economy', 'positive_or_negative', 'country', 'area_of_land', 'land_ownership', 'land_ownership_details', 'location_context', 'type_of_ecosystem', 'describe_ecosystem', 'affects_indigenous', 'affects_indigenous_detail', 'project_status', 'synopsis', 'full_description', 'image', 'image_caption', 'image_credit', 'video', 'media_coverage_mainstream', 'media_coverage_independent', 'community_voices'), Tab( "Second Page", 'generation_technology', 'biomass_detail', 'generation_technology_other', 'total_generation_capacity', 'total_investment', 'technical_or_economic_details', 'power_technology', 'power_technology_other', 'energy_storage_capacity', ))) class Meta(BaseCaseStudyForm.Meta): fields = '__all__'