forms.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. '''
  2. @author: olivier.massot, 2018
  3. '''
  4. from django import forms
  5. from django.contrib.auth.forms import UserCreationForm
  6. from django.contrib.auth.models import User
  7. from django.forms.fields import DateField, ChoiceField, MultipleChoiceField
  8. from martor.fields import MartorFormField
  9. from main.models import Story, Epic, Comment, Sprint
  10. class RegisterForm(UserCreationForm):
  11. class Meta:
  12. model = User
  13. fields = ('username', 'first_name', 'last_name', 'email')
  14. def save(self, commit=True):
  15. user = super(RegisterForm, self).save(commit=False)
  16. user.first_name = self.cleaned_data["first_name"]
  17. user.last_name = self.cleaned_data["last_name"]
  18. user.email = self.cleaned_data["email"]
  19. if commit:
  20. user.save()
  21. class ProfileForm(forms.ModelForm):
  22. class Meta:
  23. model = User
  24. fields = ('username', 'first_name', 'last_name', 'email')
  25. class EpicForm(forms.ModelForm):
  26. description = MartorFormField(label="Description")
  27. class Meta:
  28. model = Epic
  29. fields = ('project', 'name', 'size', 'value', 'description')
  30. def __init__(self, *args, **kwargs):
  31. super(EpicForm, self).__init__(*args, **kwargs)
  32. self.fields['description'].required = False
  33. class StoryForm(forms.ModelForm):
  34. description = MartorFormField(label="Description")
  35. epic = ChoiceField(choices=[(epic.id, epic.name) for epic in Epic.objects.filter(closed=False).order_by('-value')],
  36. widget=forms.Select(attrs={'class':'filtered-dropdown'}))
  37. assignees = MultipleChoiceField(choices=[(user.id, user.get_full_name() or user.username) for user in User.objects.all()])
  38. class Meta:
  39. model = Story
  40. widgets = {'author': forms.HiddenInput()}
  41. fields = ('epic', 'author', 'name', 'weight', 'time_spent', 'story_type', 'description', 'assignees', 'sprints')
  42. def __init__(self, *args, **kwargs):
  43. super(StoryForm, self).__init__(*args, **kwargs)
  44. self.fields['description'].required = False
  45. self.fields['assignees'].required = False
  46. self.fields['sprints'].required = False
  47. self.fields['weight'].required = False
  48. self.fields['time_spent'].required = False
  49. self.fields['story_type'].required = False
  50. def clean(self):
  51. cleaned_data = super().clean()
  52. cleaned_data["epic"] = Epic.objects.get(pk=int(cleaned_data["epic"]))
  53. return cleaned_data
  54. def save(self, *args, **kwargs):
  55. if self.cleaned_data['weight'] == '':
  56. self.cleaned_data['weight'] = None
  57. return super(StoryForm, self).save(*args, **kwargs)
  58. class CommentForm(forms.ModelForm):
  59. class Meta:
  60. model = Comment
  61. widgets = {'content_type': forms.HiddenInput(), 'object_id': forms.HiddenInput()}
  62. fields = ('content','content_type', 'object_id')
  63. content = MartorFormField(label="Commentaire")
  64. def __init__(self, *args, **kwargs):
  65. super(CommentForm, self).__init__(*args, **kwargs)
  66. if not self.prefix:
  67. self.prefix = str(self.instance.id) if self.instance and self.instance.id else "new"
  68. class NewSprintForm(forms.ModelForm):
  69. class Meta:
  70. model = Sprint
  71. widgets = {'number': forms.HiddenInput()}
  72. fields = ('date_start','date_end','number')
  73. date_start = DateField(label='Date de début', widget=forms.TextInput(attrs={'class':'datepicker'}))
  74. date_end = DateField(label='Date de fin', widget=forms.TextInput(attrs={'class':'datepicker'}))
  75. def clean(self):
  76. cleaned_data = super().clean()
  77. if not cleaned_data.get("date_end") > cleaned_data.get("date_start"):
  78. raise forms.ValidationError("La date de fin doit être postérieure à la date de début.")
  79. if not cleaned_data.get("date_start") >= Sprint.current().date_end:
  80. raise forms.ValidationError("La date de début doit être postérieure à la date de fin du sprint en cours.")
  81. class SprintForm(forms.ModelForm):
  82. class Meta:
  83. model = Sprint
  84. fields = ('retro','improvements')
  85. retro = MartorFormField(label="Rétrospective")
  86. improvements = MartorFormField(label="Améliorations")