mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-11-04 09:12:11 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			204 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			204 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Copyright (C) 2018-2025 by BDE ENS Paris-Saclay
 | 
						|
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
						|
 | 
						|
from bootstrap_datepicker_plus.widgets import DatePickerInput
 | 
						|
from django import forms
 | 
						|
from django.contrib.auth.models import User
 | 
						|
from django.db.models import Q
 | 
						|
from django.forms import CheckboxSelectMultiple, RadioSelect
 | 
						|
from django.utils.translation import gettext_lazy as _
 | 
						|
from note.models import NoteSpecial, NoteUser
 | 
						|
from note_kfet.inputs import AmountInput, Autocomplete, ColorWidget
 | 
						|
 | 
						|
from ..models import WEIClub, WEIRegistration, Bus, BusTeam, WEIMembership, WEIRole
 | 
						|
 | 
						|
 | 
						|
class WEIForm(forms.ModelForm):
 | 
						|
    class Meta:
 | 
						|
        model = WEIClub
 | 
						|
        exclude = ('parent_club', 'require_memberships', 'membership_duration', )
 | 
						|
        widgets = {
 | 
						|
            "membership_fee_paid": AmountInput(),
 | 
						|
            "membership_fee_unpaid": AmountInput(),
 | 
						|
            "membership_start": DatePickerInput(),
 | 
						|
            "membership_end": DatePickerInput(),
 | 
						|
            "date_start": DatePickerInput(),
 | 
						|
            "date_end": DatePickerInput(),
 | 
						|
            "deposit_amount": AmountInput(),
 | 
						|
            "fee_soge_credit": AmountInput(),
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
class WEIRegistrationForm(forms.ModelForm):
 | 
						|
    def clean(self):
 | 
						|
        cleaned_data = super().clean()
 | 
						|
 | 
						|
        if 'user' in cleaned_data:
 | 
						|
            if not NoteUser.objects.filter(user=cleaned_data['user']).exists():
 | 
						|
                self.add_error('user', _("The selected user is not validated. Please validate its account first"))
 | 
						|
 | 
						|
        return cleaned_data
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = WEIRegistration
 | 
						|
        fields = [
 | 
						|
            'user', 'soge_credit', 'birth_date', 'gender', 'clothing_size',
 | 
						|
            'health_issues', 'emergency_contact_name', 'emergency_contact_phone',
 | 
						|
            'first_year', 'information_json', 'deposit_given', 'deposit_type'
 | 
						|
        ]
 | 
						|
        widgets = {
 | 
						|
            "user": Autocomplete(
 | 
						|
                User,
 | 
						|
                attrs={
 | 
						|
                    'api_url': '/api/user/',
 | 
						|
                    'name_field': 'username',
 | 
						|
                    'placeholder': 'Nom ...',
 | 
						|
                },
 | 
						|
            ),
 | 
						|
            "birth_date": DatePickerInput(options={
 | 
						|
                'minDate': '1900-01-01',
 | 
						|
                'maxDate': '2100-01-01'
 | 
						|
            }),
 | 
						|
            "deposit_given": forms.CheckboxInput(
 | 
						|
                attrs={'class': 'form-check-input'},
 | 
						|
            ),
 | 
						|
            "deposit_type": forms.RadioSelect(),
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
class WEIChooseBusForm(forms.Form):
 | 
						|
    bus = forms.ModelMultipleChoiceField(
 | 
						|
        queryset=Bus.objects,
 | 
						|
        label=_("Bus"),
 | 
						|
        help_text=_("This choice is not definitive. The WEI organizers are free to attribute for you a bus and a team,"
 | 
						|
                    + " in particular if you are a free eletron."),
 | 
						|
        widget=CheckboxSelectMultiple(),
 | 
						|
    )
 | 
						|
 | 
						|
    team = forms.ModelMultipleChoiceField(
 | 
						|
        queryset=BusTeam.objects,
 | 
						|
        label=_("Team"),
 | 
						|
        required=False,
 | 
						|
        help_text=_("Leave this field empty if you won't be in a team (staff, bus chief, free electron)"),
 | 
						|
        widget=CheckboxSelectMultiple(),
 | 
						|
    )
 | 
						|
 | 
						|
    roles = forms.ModelMultipleChoiceField(
 | 
						|
        queryset=WEIRole.objects.filter(~Q(name="1A") & ~Q(name="GC WEI")),
 | 
						|
        label=_("WEI Roles"),
 | 
						|
        help_text=_("Select the roles that you are interested in."),
 | 
						|
        initial=WEIRole.objects.filter(Q(name="Adhérent⋅e WEI") | Q(name="\u00c9lectron libre")).all(),
 | 
						|
        widget=CheckboxSelectMultiple(),
 | 
						|
    )
 | 
						|
 | 
						|
 | 
						|
class WEIMembershipForm(forms.ModelForm):
 | 
						|
    roles = forms.ModelMultipleChoiceField(
 | 
						|
        queryset=WEIRole.objects.filter(~Q(name="GC WEI")),
 | 
						|
        label=_("WEI Roles"),
 | 
						|
        widget=CheckboxSelectMultiple(),
 | 
						|
    )
 | 
						|
 | 
						|
    credit_type = forms.ModelChoiceField(
 | 
						|
        queryset=NoteSpecial.objects.all(),
 | 
						|
        label=_("Credit type"),
 | 
						|
        empty_label=_("No credit"),
 | 
						|
        required=False,
 | 
						|
    )
 | 
						|
 | 
						|
    credit_amount = forms.IntegerField(
 | 
						|
        label=_("Credit amount"),
 | 
						|
        widget=AmountInput(),
 | 
						|
        initial=0,
 | 
						|
        required=False,
 | 
						|
    )
 | 
						|
 | 
						|
    last_name = forms.CharField(
 | 
						|
        label=_("Last name"),
 | 
						|
        required=False,
 | 
						|
    )
 | 
						|
 | 
						|
    first_name = forms.CharField(
 | 
						|
        label=_("First name"),
 | 
						|
        required=False,
 | 
						|
    )
 | 
						|
 | 
						|
    bank = forms.CharField(
 | 
						|
        label=_("Bank"),
 | 
						|
        required=False,
 | 
						|
    )
 | 
						|
 | 
						|
    def __init__(self, *args, wei=None, **kwargs):
 | 
						|
        super().__init__(*args, **kwargs)
 | 
						|
        if 'bus' in self.fields:
 | 
						|
            if wei is not None:
 | 
						|
                self.fields['bus'].queryset = Bus.objects.filter(wei=wei)
 | 
						|
            else:
 | 
						|
                self.fields['bus'].queryset = Bus.objects.none()
 | 
						|
        if 'team' in self.fields:
 | 
						|
            if wei is not None:
 | 
						|
                self.fields['team'].queryset = BusTeam.objects.filter(bus__wei=wei)
 | 
						|
            else:
 | 
						|
                self.fields['team'].queryset = BusTeam.objects.none()
 | 
						|
 | 
						|
    def clean(self):
 | 
						|
        cleaned_data = super().clean()
 | 
						|
        if 'team' in cleaned_data and cleaned_data["team"] is not None \
 | 
						|
                and cleaned_data["team"].bus != cleaned_data["bus"]:
 | 
						|
            self.add_error('bus', _("This team doesn't belong to the given bus."))
 | 
						|
        return cleaned_data
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = WEIMembership
 | 
						|
        fields = ('roles', 'bus', 'team',)
 | 
						|
        widgets = {
 | 
						|
            "bus": RadioSelect(),
 | 
						|
            "team": RadioSelect(),
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
class WEIMembership1AForm(WEIMembershipForm):
 | 
						|
    """
 | 
						|
    Used to confirm registrations of first year members without choosing a bus now.
 | 
						|
    """
 | 
						|
    deposit_given = None
 | 
						|
    roles = None
 | 
						|
 | 
						|
    def clean(self):
 | 
						|
        return super(forms.ModelForm, self).clean()
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = WEIMembership
 | 
						|
        fields = ('credit_type', 'credit_amount', 'last_name', 'first_name', 'bank',)
 | 
						|
 | 
						|
 | 
						|
class BusForm(forms.ModelForm):
 | 
						|
    class Meta:
 | 
						|
        model = Bus
 | 
						|
        fields = '__all__'
 | 
						|
        widgets = {
 | 
						|
            "wei": Autocomplete(
 | 
						|
                WEIClub,
 | 
						|
                attrs={
 | 
						|
                    'api_url': '/api/wei/club/',
 | 
						|
                    'placeholder': 'WEI ...',
 | 
						|
                },
 | 
						|
            ),
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
class BusTeamForm(forms.ModelForm):
 | 
						|
    class Meta:
 | 
						|
        model = BusTeam
 | 
						|
        fields = '__all__'
 | 
						|
        widgets = {
 | 
						|
            "bus": Autocomplete(
 | 
						|
                Bus,
 | 
						|
                attrs={
 | 
						|
                    'api_url': '/api/wei/bus/',
 | 
						|
                    'placeholder': 'Bus ...',
 | 
						|
                },
 | 
						|
            ),
 | 
						|
            "color": ColorWidget(),
 | 
						|
        }
 |