from django.urls import reverse from django import forms from django.utils.translation import ugettext as _ from crispy_forms.helper import FormHelper from crispy_forms.layout import Submit, Layout, HTML, Fieldset, Div from crispy_forms.bootstrap import Tab, TabHolder, PrependedText, FormActions from leaflet.forms.widgets import LeafletWidget from .models import CaseStudy class BaseCaseStudyForm(forms.models.ModelForm): """Base form class for the CaseStudy model.""" def __init__(self, *args, **kwargs): super(BaseCaseStudyForm, self).__init__(*args, **kwargs) self.helper = FormHelper(self) 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' class Meta: model = CaseStudy fields = '__all__' widgets = { 'location': LeafletWidget(attrs={}), 'official_project_documents': forms.ClearableFileInput(attrs={'multiple': True}), 'other_documents': forms.ClearableFileInput(attrs={'multiple': True}), 'shapefiles': forms.ClearableFileInput(attrs={'multiple': True}), } 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') self.helper.add_input(Submit('submit', _('Submit'), css_class='btn-success center-block')) 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', 'people_affected_indigenous', 'people_affected_other', '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(_("Basic information"), 'entry_name', 'location', 'country', 'area_of_land', 'land_ownership', 'land_ownership_details', 'location_context', 'type_of_ecosystem', 'describe_ecosystem', 'people_affected_indigenous', 'people_affected_other', 'project_status', 'synopsis', 'full_description', 'image', 'image_caption', 'image_credit', 'video', 'video_caption', 'video_credit', Fieldset( _("Ownership and finance"), 'project_owners', 'shareholders', 'financial_institutions', 'financial_institutions_other', 'energy_customers' ), Fieldset( _("Media reports and other communications"), 'media_coverage_mainstream', 'media_coverage_independent', 'community_voices', 'direct_comms', 'social_media_links' ), FormActions( HTML(""+_("Next")+"") ) ), Tab( _("Technical and economic analysis"), 'sector_of_economy', Fieldset( _("Power Generation Questions"), 'generation_technology', 'biomass_detail', 'generation_technology_other', 'total_generation_capacity', 'generation_equipment_supplier', 'total_investment', 'technical_or_economic_details', css_id="power_generation_questions" ), Fieldset( _("Power Grids/Energy Storage Questions"), 'power_technology', 'power_technology_other', 'energy_storage_capacity', 'maximum_power_output', 'discharge_time', 'contractor_or_supplier_of_technology', 'approximate_total_investment', 'additional_technical_details', css_id="power_grids_energy_storage_questions" ), Fieldset( _("Mineral/Commodity Questions"), 'minerals_or_commodities', 'minerals_or_commodities_other', 'use_in_energy_economy', 'use_in_energy_economy_other', 'project_life_span', 'size_of_concessions', 'projected_production_of_commodities', 'type_of_extraction', 'associated_infrastructure', css_id="mineral_commodity_questions" ), FormActions( HTML(""+_("Previous")+""), HTML(""+_("Next")+"") ) ), Tab( _("Socio-environmental analysis"), 'positive_or_negative', Fieldset( _("Positive Case Questions"), 'positive_case_type', 'socioeconomic_benefits', 'project_status_detail', 'obstacles_and_hindrances', 'identified_partnerships', css_id="positive_case_questions" ), Fieldset( _("Negative Case Questions"), 'negative_case_reasons', 'negative_case_reasons_other', 'negative_socioenvironmental_impacts', 'isolated_or_widespread', 'when_did_organising_start', 'who_has_been_involved', 'participation_mechanisms', 'potential_partnerships', 'wants_conversation_with_ojuso', css_id="negative_case_questions" ), Div( 'key_actors_involved', css_id="common_questions" ), FormActions( HTML(""+_("Previous")+""), HTML(""+_("Next")+"") ) ), Tab( _("Contact details"), 'contact_email', 'contact_phone', 'contact_website', PrependedText('contact_twitter', '@', placeholder='username'), 'contact_facebook', 'contact_other', FormActions( HTML(""+_("Previous")+""), HTML(""+_("Next")+"") ) ), Tab( _("Uploads"), 'official_project_documents', 'other_documents', 'shapefiles', 'coordinate_reference_system', 'name_of_territory_or_area', 'shown_on_other_platforms', 'shown_on_other_platforms_detail', FormActions( HTML(""+_("Previous")+""), Submit('submit', _('Submit'), css_class="btn-success pull-right") ) ))) class Meta(BaseCaseStudyForm.Meta): exclude = ('approved',)