from django.conf import settings from django.forms import ModelForm, ChoiceField, RadioSelect, BooleanField from django.contrib.admin.widgets import AdminDateWidget from django.forms.renderers import DjangoTemplates from django.utils.html import format_html from django.utils.safestring import mark_safe from .models import ( TYPE_CHOICES, Project, ConcreteVolunteer, ConcreteExtern, IFG, Library, ELiterature, Software, HonoraryCertificate, Travel, Email, Literature, List, BusinessCard, ) class TableFormRenderer(DjangoTemplates): form_template_name = 'django/forms/table.html' class FdbForm(ModelForm): '''this base class provides the required css class for all forms''' required_css_class = 'required' class ProjectForm(FdbForm): # start = DateField(widget=AdminDateWidget()) class Meta: model = Project exclude = ('pid', 'project_of_year', 'finance_id','granted', 'granted_date', 'realname', 'email',\ 'end_mail_send', 'status', 'persons', 'survey_mail_date', 'mail_state') widgets = {'start': AdminDateWidget(), 'end': AdminDateWidget(),} class Media: js = ('dropdown/js/otrs_link.js',) class ExternForm(FdbForm): choice = ChoiceField(choices=TYPE_CHOICES.items(), widget=RadioSelect, label='Was möchtest Du beantragen?') check = BooleanField(required=True, label=format_html("Ich stimme den Datenschutzbestimmungen und der
Richtlinie zur Förderung der Communitys zu", settings.DATAPROTECTION, settings.FOERDERRICHTLINIEN)) class Meta: model = ConcreteExtern exclude = ('username', 'granted', 'granted_date', 'survey_mail_send', 'service_id', 'survey_mail_date', 'mail_state') INTERN_CHOICES = {'PRO': 'Projektsteckbrief', 'HON': 'Ehrenamtsbescheinigung, Akkreditierung oder Redaktionsbestätigung', 'TRAV': 'Reisekostenerstattung'} class InternForm(FdbForm): choice = ChoiceField(choices = INTERN_CHOICES.items(), widget=RadioSelect, label = 'Was möchtest Du eingeben?') class Meta: model = ConcreteVolunteer exclude = ('granted', 'granted_date', 'survey_mail_send', 'survey_mail_date', 'mail_state') HOTEL_CHOICES = {'TRUE': mark_safe('Hotelzimmer benötigt'), 'FALSE': mark_safe('Kein Hotelzimmer benötigt') } class TravelForm(FdbForm): # TODO: add some javascript to show/hide other-field # this is the code, to change required to false if needed def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['project_name'].required = True self.fields['transport'].required = True self.fields['travelcost'].required = True self.fields['checkin'].required = True self.fields['checkout'].required = True self.fields['hotel'].required = True class Meta: model = Travel exclude = ('granted', 'granted_date', 'survey_mail_send', 'realname', 'email', 'survey_mail_date', 'project', 'request_url', 'payed_for_hotel_by', 'payed_for_travel_by', 'intern_notes', 'mail_state' ) widgets = {'checkin': AdminDateWidget(), 'checkout': AdminDateWidget(),} fields = ['project_name', 'transport', 'travelcost', 'checkin', 'checkout', 'hotel', 'notes'] hotel = ChoiceField(label='Hotelzimmer benötigt:', choices=HOTEL_CHOICES.items(), widget=RadioSelect()) class Media: js = ('dropdown/js/otrs_link.js',) css = { 'all': ('css/dateFieldNoNowShortcutInTravels.css',) } class LibraryForm(FdbForm): class Meta: model = Library fields = ['cost', 'library', 'duration', 'notes', 'survey_mail_send'] exclude = ['intern_notes', 'survey_mail_send', 'mail_state'] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['library'].label = self._meta.model.LIBRARY_LABEL self.fields['library'].help_text = self._meta.model.LIBRARY_HELP_TEXT self.fields['duration'].help_text = self._meta.model.DURATION_HELP_TEXT class ELiteratureForm(LibraryForm): class Meta(LibraryForm.Meta): model = ELiterature class SoftwareForm(LibraryForm): class Meta(LibraryForm.Meta): model = Software class HonoraryCertificateForm(FdbForm): class Meta: model = HonoraryCertificate fields = ['request_url', 'project'] exclude = ['intern_notes'] class Media: js = ('dropdown/js/otrs_link.js',) class IFGForm(FdbForm): class Meta: model = IFG fields = ['cost', 'url', 'notes'] exclude = ['intern_notes', 'survey_mail_send', 'mail_state'] class CheckForm(FdbForm): termstoaccept = settings.NUTZUNGSBEDINGUNGEN def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Check if the model field 'terms_accepted' is present if 'terms_accepted' in self.fields: # Make the field required (HTML5 validation) self.fields['terms_accepted'].required = True # Set custom label with link to terms self.fields['terms_accepted'].label = format_html( "Ich stimme den Nutzungsbedingungen zu", self.termstoaccept ) class LiteratureForm(CheckForm): termstoaccept = settings.NUTZUNGSBEDINGUNGEN_LITERATURSTIPENDIUM def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['selfbuy_give_data'].required = True class Meta: model = Literature fields = ['cost', 'info', 'source', 'notes', 'selfbuy', 'selfbuy_data', 'selfbuy_give_data', 'terms_accepted'] exclude = ['intern_notes', 'survey_mail_send', 'mail_state'] class Media: js = ('dropdown/js/literature.js',) ADULT_CHOICES = {'TRUE': mark_safe('Ich bin volljährig.'), 'FALSE': mark_safe('Ich bin noch nicht volljährig.') } class EmailForm(CheckForm): termstoaccept = settings.NUTZUNGSBEDINGUNGEN_EMAIL_SERVICE # this is the code, to change required to false if needed def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['adult'].required = True self.fields['other'].required = True adult = ChoiceField(label='Volljährigkeit', choices=ADULT_CHOICES.items(), widget=RadioSelect()) # TODO: add some javascript to show/hide other-field class Meta: model = Email fields = ['domain', 'address', 'other', 'adult', 'terms_accepted'] exclude = ['intern_notes', 'survey_mail_send', 'mail_state'] class Media: js = ('dropdown/js/mail.js',) class BusinessCardForm(CheckForm): termstoaccept = settings.NUTZUNGSBEDINGUNGEN_VISITENKARTEN # this is the code, to change required to false if needed def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['url_of_pic'].required = True self.fields['send_data_to_print'].required = True class Meta: model = BusinessCard exclude = ['intern_notes', 'survey_mail_send', 'mail_state'] fields = ['project', 'data', 'variant', 'url_of_pic', 'send_data_to_print', 'sent_to', 'terms_accepted'] class Media: js = ('dropdown/js/businessCard.js',) class ListForm(CheckForm): termstoaccept = settings.NUTZUNGSBEDINGUNGEN_MAILINGLISTEN class Meta: model = List fields = ['domain', 'address', 'terms_accepted'] exclude = ['intern_notes', 'survey_mail_send','mail_state']