forms.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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. class Meta:
  38. model = Story
  39. widgets = {'author': forms.HiddenInput()}
  40. fields = ('epic', 'author', 'name', 'weight', 'time_spent', 'story_type', 'description', 'assignees', 'sprints')
  41. def __init__(self, *args, **kwargs):
  42. super(StoryForm, self).__init__(*args, **kwargs)
  43. self.fields['description'].required = False
  44. self.fields['assignees'].required = False
  45. self.fields['sprints'].required = False
  46. self.fields['weight'].required = False
  47. self.fields['time_spent'].required = False
  48. self.fields['story_type'].required = False
  49. def clean(self):
  50. cleaned_data = super().clean()
  51. cleaned_data["epic"] = Epic.objects.get(pk=int(cleaned_data["epic"]))
  52. return cleaned_data
  53. def save(self, *args, **kwargs):
  54. if self.cleaned_data['weight'] == '':
  55. self.cleaned_data['weight'] = None
  56. return super(StoryForm, self).save(*args, **kwargs)
  57. class CommentForm(forms.ModelForm):
  58. class Meta:
  59. model = Comment
  60. widgets = {'content_type': forms.HiddenInput(), 'object_id': forms.HiddenInput()}
  61. fields = ('content','content_type', 'object_id')
  62. content = MartorFormField(label="Commentaire")
  63. def __init__(self, *args, **kwargs):
  64. super(CommentForm, self).__init__(*args, **kwargs)
  65. if not self.prefix:
  66. self.prefix = str(self.instance.id) if self.instance and self.instance.id else "new"
  67. class NewSprintForm(forms.ModelForm):
  68. class Meta:
  69. model = Sprint
  70. widgets = {'number': forms.HiddenInput()}
  71. fields = ('date_start','date_end','number')
  72. date_start = DateField(label='Date de début', widget=forms.TextInput(attrs={'class':'datepicker'}))
  73. date_end = DateField(label='Date de fin', widget=forms.TextInput(attrs={'class':'datepicker'}))
  74. def clean(self):
  75. cleaned_data = super().clean()
  76. if not cleaned_data.get("date_end") > cleaned_data.get("date_start"):
  77. raise forms.ValidationError("La date de fin doit être postérieure à la date de début.")
  78. if not cleaned_data.get("date_start") >= Sprint.current().date_end:
  79. raise forms.ValidationError("La date de début doit être postérieure à la date de fin du sprint en cours.")
  80. class SprintForm(forms.ModelForm):
  81. class Meta:
  82. model = Sprint
  83. fields = ('retro','improvements')
  84. retro = MartorFormField(label="Rétrospective")
  85. improvements = MartorFormField(label="Améliorations")