from datetime import datetime from django.contrib.auth import logout, login, update_session_auth_hash from django.contrib.auth.decorators import login_required from django.contrib.auth.forms import PasswordChangeForm from django.contrib.auth.models import User from django.shortcuts import render, get_object_or_404, redirect from main.forms import StoryForm, EpicForm, RegisterForm, ProfileForm from main.models import Story, Epic, Sprint @login_required def index(request): today = datetime.today() try: current_sprint = Sprint.objects.filter(date_start__lte = today).filter(date_end__gt=today)[0] except IndexError: current_sprint = None epics = Epic.objects.filter(closed=False) return render(request, 'index.html', {'current_sprint': current_sprint, 'epics': epics}) def register(request): if request.method == 'POST': form = RegisterForm(request.POST) if form.is_valid(): user = form.save() login(request, user) return redirect("index") else: form = RegisterForm() return render(request, 'registration/register.html', {'form': form}) def profile_update(request): if request.method == 'POST': user = get_object_or_404(User, username=request.user) form = ProfileForm(request.POST, instance=user) if form.is_valid(): user = form.save() login(request, user) return redirect("index") else: user = get_object_or_404(User, username=request.user) form = ProfileForm(instance=user) return render(request, 'registration/register.html', {'form': form}) def change_password(request): if request.method == 'POST': form = PasswordChangeForm(request.user, request.POST) if form.is_valid(): user = form.save() update_session_auth_hash(request, user) # Important! return redirect('index') else: form = PasswordChangeForm(request.user) return render(request, 'registration/change_password.html', {'form': form}) @login_required def logout(request): logout(request) return redirect("index") @login_required def story_index(request): sprints = Sprint.objects.all() users = User.objects.all() stories = Story.objects filters = request.GET if 'state' in filters and filters['state']: stories = stories.filter(closed=(filters['state'] == 'closed')) if 'sprint' in filters and filters['sprint']: stories = stories.filter(sprints__id=filters['sprint']) if 'author' in filters and filters['author']: stories = stories.filter(author_id=filters['author']) if 'assignee' in filters and filters['assignee']: stories = stories.filter(assignees__id=filters['assignee']) return render(request, 'story_index.html', {'stories': stories.all(), 'sprints': sprints, 'users': users}) @login_required def story_details(request, story_id): story = get_object_or_404(Story, id=story_id) return render(request, 'story_details.html', {'story': story}) @login_required def story_create(request, epic_id): if request.method == 'POST': form = StoryForm(request.POST) if form.is_valid(): story = form.save(commit=False) story.author = User.objects.get(username=request.user) story.save() return redirect("story_details", story.id) else: story = Story() story.epic = get_object_or_404(Epic, id=epic_id) form = StoryForm(instance=story) return render(request, 'story_form.html', {'form': form}) @login_required def story_edit(request, story_id): if request.method == 'POST': story = get_object_or_404(Story, id=story_id) form = StoryForm(request.POST, instance=story) if form.is_valid(): form.save() return redirect("story_details", story.id) else: story = get_object_or_404(Story, id=story_id) form = StoryForm(instance=story) return render(request, 'story_form.html', {'form': form}) @login_required def story_delete(request, story_id): if request.method == 'POST': story = get_object_or_404(Story, id=story_id) story.delete() return redirect("index") else: story = get_object_or_404(Story, id=story_id) return render(request, 'deletion.html', {'object': story}) def story_close(request, story_id): story = get_object_or_404(Story, id=story_id) story.closed = True story.save() return render(request, 'epic_details.html', {'epic': story.epic}) def story_reopen(request, story_id): story = get_object_or_404(Story, id=story_id) story.closed = False story.save() return render(request, 'story_details.html', {'story': story}) def epic_details(request, epic_id): epic = get_object_or_404(Epic, id=epic_id) return render(request, 'epic_details.html', {'epic': epic}) def epic_create(request): if request.method == 'POST': form = EpicForm(request.POST) if form.is_valid(): epic = form.save(commit=False) epic.author = User.objects.get(username=request.user) epic.save() return redirect("epic_details", epic.id) else: form = EpicForm() return render(request, 'epic_form.html', {'form': form}) @login_required def epic_edit(request, epic_id): if request.method == 'POST': epic = get_object_or_404(Epic, id=epic_id) form = EpicForm(request.POST, instance=epic) if form.is_valid(): form.save() return redirect("epic_details", epic.id) else: epic = get_object_or_404(Epic, id=epic_id) form = EpicForm(instance=epic) return render(request, 'epic_form.html', {'form': form}) @login_required def epic_delete(request, epic_id): if request.method == 'POST': epic = Epic.objects.get(id=epic_id) epic.delete() return redirect("index") else: epic = Epic.objects.get(id=epic_id) return render(request, 'deletion.html', {'object': epic})