views.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. from datetime import datetime
  2. from django.contrib.auth import logout, login, update_session_auth_hash
  3. from django.contrib.auth.decorators import login_required
  4. from django.contrib.auth.forms import PasswordChangeForm
  5. from django.contrib.auth.models import User
  6. from django.shortcuts import render, get_object_or_404, redirect
  7. from main.forms import StoryForm, EpicForm, RegisterForm, ProfileForm
  8. from main.models import Story, Epic, Sprint
  9. @login_required
  10. def index(request):
  11. today = datetime.today()
  12. try:
  13. current_sprint = Sprint.objects.filter(date_start__lte = today).filter(date_end__gt=today)[0]
  14. except IndexError:
  15. current_sprint = None
  16. epics = Epic.objects.filter(closed=False)
  17. return render(request, 'index.html', {'current_sprint': current_sprint, 'epics': epics})
  18. def register(request):
  19. if request.method == 'POST':
  20. form = RegisterForm(request.POST)
  21. if form.is_valid():
  22. user = form.save()
  23. login(request, user)
  24. return redirect("index")
  25. else:
  26. form = RegisterForm()
  27. return render(request, 'registration/register.html', {'form': form})
  28. def profile_update(request):
  29. if request.method == 'POST':
  30. user = get_object_or_404(User, username=request.user)
  31. form = ProfileForm(request.POST, instance=user)
  32. if form.is_valid():
  33. user = form.save()
  34. login(request, user)
  35. return redirect("index")
  36. else:
  37. user = get_object_or_404(User, username=request.user)
  38. form = ProfileForm(instance=user)
  39. return render(request, 'registration/register.html', {'form': form})
  40. def change_password(request):
  41. if request.method == 'POST':
  42. form = PasswordChangeForm(request.user, request.POST)
  43. if form.is_valid():
  44. user = form.save()
  45. update_session_auth_hash(request, user) # Important!
  46. return redirect('index')
  47. else:
  48. form = PasswordChangeForm(request.user)
  49. return render(request, 'registration/change_password.html', {'form': form})
  50. @login_required
  51. def logout(request):
  52. logout(request)
  53. return redirect("index")
  54. @login_required
  55. def story_index(request):
  56. sprints = Sprint.objects.all()
  57. users = User.objects.all()
  58. stories = Story.objects
  59. filters = request.GET
  60. if 'state' in filters and filters['state']:
  61. stories = stories.filter(closed=(filters['state'] == 'closed'))
  62. if 'sprint' in filters and filters['sprint']:
  63. if filters['sprint'] == "None":
  64. stories = stories.filter(sprints=None)
  65. else:
  66. stories = stories.filter(sprints__id=filters['sprint'])
  67. if 'author' in filters and filters['author']:
  68. stories = stories.filter(author_id=filters['author'])
  69. if 'assignee' in filters and filters['assignee']:
  70. stories = stories.filter(assignees__id=filters['assignee'])
  71. return render(request, 'story_index.html', {'stories': stories.all(), 'sprints': sprints, 'users': users})
  72. @login_required
  73. def story_details(request, story_id):
  74. story = get_object_or_404(Story, id=story_id)
  75. return render(request, 'story_details.html', {'story': story})
  76. @login_required
  77. def story_create(request, epic_id):
  78. if request.method == 'POST':
  79. form = StoryForm(request.POST)
  80. if form.is_valid():
  81. story = form.save(commit=False)
  82. story.author = User.objects.get(username=request.user)
  83. story.save()
  84. return redirect("story_details", story.id)
  85. else:
  86. story = Story()
  87. story.epic = get_object_or_404(Epic, id=epic_id)
  88. form = StoryForm(instance=story)
  89. return render(request, 'story_form.html', {'form': form})
  90. @login_required
  91. def story_edit(request, story_id):
  92. if request.method == 'POST':
  93. story = get_object_or_404(Story, id=story_id)
  94. form = StoryForm(request.POST, instance=story)
  95. if form.is_valid():
  96. form.save()
  97. return redirect("story_details", story.id)
  98. else:
  99. story = get_object_or_404(Story, id=story_id)
  100. form = StoryForm(instance=story)
  101. return render(request, 'story_form.html', {'form': form})
  102. @login_required
  103. def story_delete(request, story_id):
  104. if request.method == 'POST':
  105. story = get_object_or_404(Story, id=story_id)
  106. story.delete()
  107. return redirect("index")
  108. else:
  109. story = get_object_or_404(Story, id=story_id)
  110. return render(request, 'deletion.html', {'object': story})
  111. def story_close(request, story_id):
  112. story = get_object_or_404(Story, id=story_id)
  113. story.closed = True
  114. story.save()
  115. return render(request, 'epic_details.html', {'epic': story.epic})
  116. def story_reopen(request, story_id):
  117. story = get_object_or_404(Story, id=story_id)
  118. story.closed = False
  119. story.save()
  120. return render(request, 'story_details.html', {'story': story})
  121. def epic_details(request, epic_id):
  122. epic = get_object_or_404(Epic, id=epic_id)
  123. return render(request, 'epic_details.html', {'epic': epic})
  124. def epic_create(request):
  125. if request.method == 'POST':
  126. form = EpicForm(request.POST)
  127. if form.is_valid():
  128. epic = form.save(commit=False)
  129. epic.author = User.objects.get(username=request.user)
  130. epic.save()
  131. return redirect("epic_details", epic.id)
  132. else:
  133. form = EpicForm()
  134. return render(request, 'epic_form.html', {'form': form})
  135. @login_required
  136. def epic_edit(request, epic_id):
  137. if request.method == 'POST':
  138. epic = get_object_or_404(Epic, id=epic_id)
  139. form = EpicForm(request.POST, instance=epic)
  140. if form.is_valid():
  141. form.save()
  142. return redirect("epic_details", epic.id)
  143. else:
  144. epic = get_object_or_404(Epic, id=epic_id)
  145. form = EpicForm(instance=epic)
  146. return render(request, 'epic_form.html', {'form': form})
  147. @login_required
  148. def epic_delete(request, epic_id):
  149. if request.method == 'POST':
  150. epic = Epic.objects.get(id=epic_id)
  151. epic.delete()
  152. return redirect("index")
  153. else:
  154. epic = Epic.objects.get(id=epic_id)
  155. return render(request, 'deletion.html', {'object': epic})