Final touches - I think.
This commit is contained in:
parent
d08c299e8d
commit
da75660f0d
|
@ -16,19 +16,13 @@ Team: {{ team.name }} | {{ block.super }}
|
|||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<ul class="nav nav-pills nav-stacked">
|
||||
<li {% if view.template_name == "team_general.html" %}class="active"{% endif %}>
|
||||
<li {% if view.active_menu == "general" %}class="active"{% endif %}>
|
||||
<a href="{% url "teams:general" camp_slug=team.camp.slug team_slug=team.slug %}">
|
||||
General
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li {% if view.template_name == "team_tasks.html" %}class="active"{% endif %}>
|
||||
<a href="{% url "teams:tasks" camp_slug=team.camp.slug team_slug=team.slug %}">
|
||||
Tasks
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li {% if view.template_name == "team_members.html" %}class="active"{% endif %}>
|
||||
<li {% if view.active_menu == "members" %}class="active"{% endif %}>
|
||||
<a href="{% url "teams:members" camp_slug=team.camp.slug team_slug=team.slug %}">
|
||||
Members
|
||||
{% if request.user in team.responsible_members.all and team.unapproved_members %}
|
||||
|
@ -37,6 +31,20 @@ Team: {{ team.name }} | {{ block.super }}
|
|||
</a>
|
||||
</li>
|
||||
|
||||
<li {% if view.active_menu == "tasks" %}class="active"{% endif %}>
|
||||
<a href="{% url "teams:tasks" camp_slug=team.camp.slug team_slug=team.slug %}">
|
||||
Tasks
|
||||
</a>
|
||||
</li>
|
||||
|
||||
{% if request.user in team.responsible_members.all %}
|
||||
<li {% if view.active_menu == "info_categories" %}class="active"{% endif %}>
|
||||
<a href="{% url "teams:info_categories" camp_slug=team.camp.slug team_slug=team.slug %}">
|
||||
Info categories
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
</ul>
|
||||
|
||||
<hr />
|
||||
|
|
|
@ -6,10 +6,6 @@
|
|||
|
||||
{% block team_content %}
|
||||
|
||||
{% if request.user in team.responsible_members.all and team.info_categories.exists %}
|
||||
<h4> SHOULD NOT HAPPEN !!! </h4>
|
||||
{% endif %}
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4>Info Categories</h4>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends 'base.html' %}
|
||||
{% extends 'team_base.html' %}
|
||||
{% load commonmark %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
|
@ -11,7 +11,7 @@ Create Info item
|
|||
in {{ form.instance.category.headline }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% block team_content %}
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4>
|
|
@ -5,10 +5,11 @@
|
|||
{% block title %}
|
||||
{% if object %}
|
||||
Editing "{{ object.headline }}"
|
||||
in "{{ form.instance.category.headline }}"
|
||||
{% else %}
|
||||
Create Info item
|
||||
in "{{ category.headline }}"
|
||||
{% endif %}
|
||||
in "{{ form.instance.category.headline }}"
|
||||
{% endblock %}
|
||||
|
||||
{% block team_content %}
|
||||
|
@ -17,10 +18,11 @@ in "{{ form.instance.category.headline }}"
|
|||
<h4>
|
||||
{% if object %}
|
||||
Editing "{{ object.headline }}"
|
||||
in "{{ object.category.headline }}"
|
||||
{% else %}
|
||||
Create Info Item
|
||||
in "{{ category.headline }}"
|
||||
{% endif %}
|
||||
in "{{ object.category.headline }}"
|
||||
</h4>
|
||||
</div>
|
||||
<div class="panel-body">
|
|
@ -29,25 +29,26 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for teammember in team.memberships.all %}
|
||||
{% for member in team.memberships.all %}
|
||||
{% if member.approved or not member.approved and request.user in team.responsible_members.all %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ teammember.user.profile.get_public_credit_name }} {% if teammember.user == request.user %}(this is you!){% endif %}
|
||||
{{ member.user.profile.get_public_credit_name }} {% if member.user == request.user %}(this is you!){% endif %}
|
||||
</td>
|
||||
<td>
|
||||
Team {% if teammember.responsible %}Responsible{% else %}Member{% endif %}
|
||||
{% if not teammember.approved %}(pending approval){% endif %}
|
||||
Team {% if member.responsible %}Responsible{% else %}Member{% endif %}
|
||||
{% if not member.approved %}(pending approval){% endif %}
|
||||
</td>
|
||||
{% if request.user in team.responsible_members.all %}
|
||||
<td>
|
||||
<div class="btn-group-vertical">
|
||||
<a class="btn btn-danger"
|
||||
href="{% url 'teams:teammember_remove' camp_slug=camp.slug team_slug=team.slug pk=teammember.id %}">
|
||||
href="{% url 'teams:member_remove' camp_slug=camp.slug team_slug=team.slug pk=member.id %}">
|
||||
<i class="fas fa-trash"></i> Remove
|
||||
</a>
|
||||
{% if not teammember.approved %}
|
||||
{% if not member.approved %}
|
||||
<a class="btn btn-success"
|
||||
href="{% url 'teams:teammember_approve' camp_slug=camp.slug team_slug=team.slug pk=teammember.id %}">
|
||||
href="{% url 'teams:member_approve' camp_slug=camp.slug team_slug=team.slug pk=member.id %}">
|
||||
<i class="fas fa-check"></i> Approve
|
||||
</a>
|
||||
{% endif %}
|
||||
|
@ -55,6 +56,7 @@
|
|||
</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% empty %}
|
||||
<p>No members found!</p>
|
||||
{% endfor %}
|
||||
|
|
|
@ -16,6 +16,7 @@ from teams.views.members import (
|
|||
)
|
||||
|
||||
from teams.views.info import (
|
||||
InfoCategoriesListView,
|
||||
InfoItemUpdateView,
|
||||
InfoItemCreateView,
|
||||
InfoItemDeleteView,
|
||||
|
@ -73,12 +74,12 @@ urlpatterns = [
|
|||
path(
|
||||
'<int:pk>/remove/',
|
||||
TeamMemberRemoveView.as_view(),
|
||||
name='teammember_remove',
|
||||
name='member_remove',
|
||||
),
|
||||
path(
|
||||
'<int:pk>/approve/',
|
||||
TeamMemberApproveView.as_view(),
|
||||
name='teammember_approve',
|
||||
name='member_approve',
|
||||
),
|
||||
]),
|
||||
),
|
||||
|
@ -112,26 +113,36 @@ urlpatterns = [
|
|||
]),
|
||||
),
|
||||
path(
|
||||
'info/<slug:category_anchor>/', include([
|
||||
'info/',
|
||||
include([
|
||||
path(
|
||||
'create/',
|
||||
InfoItemCreateView.as_view(),
|
||||
name='info_item_create',
|
||||
'',
|
||||
InfoCategoriesListView.as_view(),
|
||||
name='info_categories'
|
||||
),
|
||||
path(
|
||||
'<slug:item_anchor>/', include([
|
||||
'<slug:category_anchor>/', include([
|
||||
path(
|
||||
'update/',
|
||||
InfoItemUpdateView.as_view(),
|
||||
name='info_item_update',
|
||||
'create/',
|
||||
InfoItemCreateView.as_view(),
|
||||
name='info_item_create',
|
||||
),
|
||||
path(
|
||||
'delete/',
|
||||
InfoItemDeleteView.as_view(),
|
||||
name='info_item_delete',
|
||||
'<slug:item_anchor>/', include([
|
||||
path(
|
||||
'update/',
|
||||
InfoItemUpdateView.as_view(),
|
||||
name='info_item_update',
|
||||
),
|
||||
path(
|
||||
'delete/',
|
||||
InfoItemDeleteView.as_view(),
|
||||
name='info_item_delete',
|
||||
),
|
||||
]),
|
||||
),
|
||||
]),
|
||||
),
|
||||
])
|
||||
)
|
||||
])
|
||||
)
|
||||
]),
|
||||
|
|
|
@ -25,6 +25,7 @@ class TeamGeneralView(CampViewMixin, DetailView):
|
|||
context_object_name = 'team'
|
||||
model = Team
|
||||
slug_url_kwarg = 'team_slug'
|
||||
active_menu = 'general'
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
|
|
|
@ -1,18 +1,39 @@
|
|||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.views.generic import CreateView, UpdateView, DeleteView
|
||||
from django.views.generic import CreateView, UpdateView, DeleteView, ListView
|
||||
from reversion.views import RevisionMixin
|
||||
|
||||
from camps.mixins import CampViewMixin
|
||||
from info.models import InfoItem, InfoCategory
|
||||
from ..models import Team
|
||||
from .mixins import EnsureTeamResponsibleMixin, TeamViewMixin
|
||||
|
||||
|
||||
class InfoCategoriesListView(LoginRequiredMixin, CampViewMixin, TeamViewMixin, EnsureTeamResponsibleMixin, ListView):
|
||||
model = InfoCategory
|
||||
template_name = "team_info_categories.html"
|
||||
slug_field = 'anchor'
|
||||
active_menu = 'info_categories'
|
||||
|
||||
def get_team(self):
|
||||
return Team.objects.get(
|
||||
camp__slug=self.kwargs['camp_slug'],
|
||||
slug=self.kwargs['team_slug']
|
||||
)
|
||||
|
||||
|
||||
class InfoItemCreateView(LoginRequiredMixin, CampViewMixin, TeamViewMixin, EnsureTeamResponsibleMixin, CreateView):
|
||||
model = InfoItem
|
||||
template_name = "info_item_form.html"
|
||||
template_name = "team_info_item_form.html"
|
||||
fields = ['headline', 'body', 'anchor', 'weight']
|
||||
slug_field = 'anchor'
|
||||
active_menu = 'info_categories'
|
||||
|
||||
def get_team(self):
|
||||
return Team.objects.get(
|
||||
camp__slug=self.kwargs['camp_slug'],
|
||||
slug=self.kwargs['team_slug']
|
||||
)
|
||||
|
||||
def form_valid(self, form):
|
||||
info_item = form.save(commit=False)
|
||||
|
@ -24,13 +45,28 @@ class InfoItemCreateView(LoginRequiredMixin, CampViewMixin, TeamViewMixin, Ensur
|
|||
def get_success_url(self):
|
||||
return self.team.get_absolute_url()
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context['category'] = InfoCategory.objects.get(
|
||||
team__camp__slug=self.kwargs['camp_slug'],
|
||||
anchor=self.kwargs['category_anchor']
|
||||
)
|
||||
return context
|
||||
|
||||
|
||||
class InfoItemUpdateView(LoginRequiredMixin, CampViewMixin, TeamViewMixin, EnsureTeamResponsibleMixin, RevisionMixin, UpdateView):
|
||||
model = InfoItem
|
||||
template_name = "info_item_form.html"
|
||||
template_name = "team_info_item_form.html"
|
||||
fields = ['headline', 'body', 'anchor', 'weight']
|
||||
slug_field = 'anchor'
|
||||
slug_url_kwarg = 'item_anchor'
|
||||
active_menu = 'info_categories'
|
||||
|
||||
def get_team(self):
|
||||
return Team.objects.get(
|
||||
camp__slug=self.kwargs['camp_slug'],
|
||||
slug=self.kwargs['team_slug']
|
||||
)
|
||||
|
||||
def get_success_url(self):
|
||||
next = self.request.GET.get('next')
|
||||
|
@ -41,9 +77,16 @@ class InfoItemUpdateView(LoginRequiredMixin, CampViewMixin, TeamViewMixin, Ensur
|
|||
|
||||
class InfoItemDeleteView(LoginRequiredMixin, CampViewMixin, TeamViewMixin, EnsureTeamResponsibleMixin, RevisionMixin, DeleteView):
|
||||
model = InfoItem
|
||||
template_name = "info_item_delete_confirm.html"
|
||||
template_name = "team_info_item_delete_confirm.html"
|
||||
slug_field = 'anchor'
|
||||
slug_url_kwarg = 'item_anchor'
|
||||
active_menu = 'info_categories'
|
||||
|
||||
def get_team(self):
|
||||
return Team.objects.get(
|
||||
camp__slug=self.kwargs['camp_slug'],
|
||||
slug=self.kwargs['team_slug']
|
||||
)
|
||||
|
||||
def get_success_url(self):
|
||||
next = self.request.GET.get('next')
|
||||
|
|
|
@ -20,6 +20,7 @@ class TeamMembersView(CampViewMixin, DetailView):
|
|||
context_object_name = 'team'
|
||||
model = Team
|
||||
slug_url_kwarg = 'team_slug'
|
||||
active_menu = 'members'
|
||||
|
||||
|
||||
class TeamJoinView(LoginRequiredMixin, CampViewMixin, UpdateView):
|
||||
|
@ -27,6 +28,7 @@ class TeamJoinView(LoginRequiredMixin, CampViewMixin, UpdateView):
|
|||
model = Team
|
||||
fields = []
|
||||
slug_url_kwarg = 'team_slug'
|
||||
active_menu = 'members'
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
if not Profile.objects.get(user=request.user).description:
|
||||
|
@ -57,6 +59,7 @@ class TeamLeaveView(LoginRequiredMixin, CampViewMixin, UpdateView):
|
|||
model = Team
|
||||
fields = []
|
||||
slug_url_kwarg = 'team_slug'
|
||||
active_menu = 'members'
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
if request.user not in self.get_object().members.all():
|
||||
|
@ -75,6 +78,7 @@ class TeamMemberRemoveView(LoginRequiredMixin, CampViewMixin, TeamViewMixin, Ens
|
|||
template_name = "teammember_remove.html"
|
||||
model = TeamMember
|
||||
fields = []
|
||||
active_menu = 'members'
|
||||
|
||||
def form_valid(self, form):
|
||||
form.instance.delete()
|
||||
|
@ -92,6 +96,7 @@ class TeamMemberApproveView(LoginRequiredMixin, CampViewMixin, TeamViewMixin, En
|
|||
template_name = "teammember_approve.html"
|
||||
model = TeamMember
|
||||
fields = []
|
||||
active_menu = 'members'
|
||||
|
||||
def form_valid(self, form):
|
||||
form.instance.approved = True
|
||||
|
|
|
@ -12,18 +12,21 @@ class TeamTasksView(CampViewMixin, DetailView):
|
|||
context_object_name = 'team'
|
||||
model = Team
|
||||
slug_url_kwarg = 'team_slug'
|
||||
active_menu = 'tasks'
|
||||
|
||||
|
||||
class TaskDetailView(CampViewMixin, TeamViewMixin, DetailView):
|
||||
template_name = "task_detail.html"
|
||||
context_object_name = "task"
|
||||
model = TeamTask
|
||||
active_menu = 'tasks'
|
||||
|
||||
|
||||
class TaskCreateView(LoginRequiredMixin, CampViewMixin, TeamViewMixin, EnsureTeamResponsibleMixin, CreateView):
|
||||
model = TeamTask
|
||||
template_name = "task_form.html"
|
||||
fields = ['name', 'description']
|
||||
active_menu = 'tasks'
|
||||
|
||||
def get_team(self):
|
||||
return Team.objects.get(
|
||||
|
@ -47,6 +50,7 @@ class TaskUpdateView(LoginRequiredMixin, CampViewMixin, TeamViewMixin, EnsureTea
|
|||
model = TeamTask
|
||||
template_name = "task_form.html"
|
||||
fields = ['name', 'description']
|
||||
active_menu = 'tasks'
|
||||
|
||||
def get_context_data(self, *args, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
|
|
Loading…
Reference in a new issue