''' @author: olivier.massot, 2018 ''' from django import forms from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.models import User from django.forms.fields import DateField, ChoiceField, MultipleChoiceField from martor.fields import MartorFormField from main.models import Story, Epic, Comment, Sprint class RegisterForm(UserCreationForm): class Meta: model = User fields = ('username', 'first_name', 'last_name', 'email') def save(self, commit=True): user = super(RegisterForm, self).save(commit=False) user.first_name = self.cleaned_data["first_name"] user.last_name = self.cleaned_data["last_name"] user.email = self.cleaned_data["email"] if commit: user.save() class ProfileForm(forms.ModelForm): class Meta: model = User fields = ('username', 'first_name', 'last_name', 'email') class EpicForm(forms.ModelForm): description = MartorFormField(label="Description") class Meta: model = Epic fields = ('project', 'name', 'size', 'value', 'description') def __init__(self, *args, **kwargs): super(EpicForm, self).__init__(*args, **kwargs) self.fields['description'].required = False class StoryForm(forms.ModelForm): description = MartorFormField(label="Description") epic = ChoiceField(choices=[(epic.id, epic.name) for epic in Epic.objects.filter(closed=False).order_by('-value')], widget=forms.Select(attrs={'class':'filtered-dropdown'})) class Meta: model = Story widgets = {'author': forms.HiddenInput()} fields = ('epic', 'author', 'name', 'weight', 'time_spent', 'story_type', 'description', 'assignees', 'sprints') def __init__(self, *args, **kwargs): super(StoryForm, self).__init__(*args, **kwargs) self.fields['description'].required = False self.fields['assignees'].required = False self.fields['sprints'].required = False self.fields['weight'].required = False self.fields['time_spent'].required = False self.fields['story_type'].required = False def clean(self): cleaned_data = super().clean() cleaned_data["epic"] = Epic.objects.get(pk=int(cleaned_data["epic"])) return cleaned_data def save(self, *args, **kwargs): if self.cleaned_data['weight'] == '': self.cleaned_data['weight'] = None return super(StoryForm, self).save(*args, **kwargs) class CommentForm(forms.ModelForm): class Meta: model = Comment widgets = {'content_type': forms.HiddenInput(), 'object_id': forms.HiddenInput()} fields = ('content','content_type', 'object_id') content = MartorFormField(label="Commentaire") def __init__(self, *args, **kwargs): super(CommentForm, self).__init__(*args, **kwargs) if not self.prefix: self.prefix = str(self.instance.id) if self.instance and self.instance.id else "new" class NewSprintForm(forms.ModelForm): class Meta: model = Sprint widgets = {'number': forms.HiddenInput()} fields = ('date_start','date_end','number') date_start = DateField(label='Date de début', widget=forms.TextInput(attrs={'class':'datepicker'})) date_end = DateField(label='Date de fin', widget=forms.TextInput(attrs={'class':'datepicker'})) def clean(self): cleaned_data = super().clean() if not cleaned_data.get("date_end") > cleaned_data.get("date_start"): raise forms.ValidationError("La date de fin doit être postérieure à la date de début.") if not cleaned_data.get("date_start") >= Sprint.current().date_end: raise forms.ValidationError("La date de début doit être postérieure à la date de fin du sprint en cours.") class SprintForm(forms.ModelForm): class Meta: model = Sprint fields = ('retro','improvements') retro = MartorFormField(label="Rétrospective") improvements = MartorFormField(label="Améliorations")