Merge branch 'dev'

This commit is contained in:
James Graham
2020-04-02 19:45:33 +01:00
23 changed files with 134 additions and 23 deletions

5
.gitignore vendored
View File

@@ -1,7 +1,10 @@
# IDE files
# IDEs
.idea/
.vscode/
# Tools
.mypy_cache/
# Runtime
/static/
venv/

14
activities/forms.py Normal file
View File

@@ -0,0 +1,14 @@
from django import forms
from . import models
class ActivityForm(forms.ModelForm):
class Meta:
model = models.Activity
fields = [
'name',
'series',
'type',
'medium',
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 2.2.10 on 2020-04-02 15:57
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('activities', '0005_shrink_name_fields_to_255'),
]
operations = [
migrations.AlterField(
model_name='activity',
name='attendance_list',
field=models.ManyToManyField(blank=True, related_name='activities', to='people.Person'),
),
]

View File

@@ -1,4 +1,5 @@
from django.db import models
from django.urls import reverse
from people import models as people_models
@@ -88,7 +89,11 @@ class Activity(models.Model):
#: Who attended this activity?
attendance_list = models.ManyToManyField(people_models.Person,
related_name='activities')
related_name='activities',
blank=True)
def get_absolute_url(self):
return reverse('activities:activity.detail', kwargs={'pk': self.pk})
def __str__(self) -> str:
return self.name

View File

@@ -0,0 +1,29 @@
{% extends 'base.html' %}
{% block content %}
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a href="{% url 'activities:activity.list' %}">Activities</a>
</li>
<li class="breadcrumb-item active" aria-current="page">Create</li>
</ol>
</nav>
<h1>New Activity</h1>
<hr>
<form class="form"
method="POST">
{% csrf_token %}
{% load bootstrap4 %}
{% bootstrap_form form %}
{% buttons %}
<button class="btn btn-success" type="submit">Submit</button>
{% endbuttons %}
</form>
{% endblock %}

View File

@@ -10,6 +10,8 @@
</ol>
</nav>
<h1>{{ activity.name }}</h1>
{% if user_is_attending %}
<button class="btn btn-danger"
onclick="clickCancelAttend();">
@@ -39,6 +41,8 @@
<hr>
<h2>Attendance</h2>
<table class="table table-borderless">
<thead>
<tr>

View File

@@ -7,8 +7,13 @@
</ol>
</nav>
<h1>Activities</h1>
<hr>
<a class="btn btn-success"
href="{% url 'activities:activity.create' %}">New Activity</a>
<table class="table table-borderless">
<thead>
<tr>

View File

@@ -10,6 +10,8 @@
</ol>
</nav>
<h1>{{ activity_series.name }}</h1>
<hr>
<dl>

View File

@@ -7,6 +7,8 @@
</ol>
</nav>
<h1>Activity Series</h1>
<hr>
<table class="table table-borderless">

View File

@@ -14,6 +14,10 @@ urlpatterns = [
views.ActivitySeriesDetailView.as_view(),
name='activity-series.detail'),
path('activities/create',
views.ActivityCreateView.as_view(),
name='activity.create'),
path('activities',
views.ActivityListView.as_view(),
name='activity.list'),

View File

@@ -5,12 +5,12 @@ import json
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import HttpResponse
from django.views.generic import DetailView, ListView, View
from django.views.generic import CreateView, DetailView, ListView, View
from django.views.generic.detail import SingleObjectMixin
from people import models as people_models
from people import permissions
from . import models
from . import forms, models
class ActivitySeriesListView(LoginRequiredMixin, ListView):
@@ -31,6 +31,15 @@ class ActivitySeriesDetailView(LoginRequiredMixin, DetailView):
context_object_name = 'activity_series'
class ActivityCreateView(LoginRequiredMixin, CreateView):
"""
View to create a new instance of :class:`Activity`.
"""
model = models.Activity
template_name = 'activities/activity/create.html'
form_class = forms.ActivityForm
class ActivityListView(LoginRequiredMixin, ListView):
"""
View displaying a list of :class:`Activity`.
@@ -65,14 +74,13 @@ class ActivityAttendanceView(permissions.UserIsLinkedPersonMixin, SingleObjectMi
def get_test_person(self) -> people_models.Person:
data = json.loads(self.request.body)
self.person = people_models.Person.objects.get(pk=data['pk'])
return self.person
return people_models.Person.objects.get(pk=data['pk'])
def post(self, request, *args, **kwargs):
self.object = self.get_object()
if request.is_ajax():
self.object.attendance_list.add(self.person)
self.object.attendance_list.add(self.get_test_person())
return HttpResponse(status=204)
@@ -82,7 +90,7 @@ class ActivityAttendanceView(permissions.UserIsLinkedPersonMixin, SingleObjectMi
self.object = self.get_object()
if request.is_ajax():
self.object.attendance_list.remove(self.person)
self.object.attendance_list.remove(self.get_test_person())
return HttpResponse(status=204)

View File

@@ -74,4 +74,3 @@ class ActivityAttendanceSerializer(base.FlattenedModelSerializer):
'activity',
'person',
]

View File

@@ -7,6 +7,8 @@
</ol>
</nav>
<h1>Export Data</h1>
<hr>
<table class="table table-borderless">

View File

@@ -14,9 +14,18 @@ class PersonForm(forms.ModelForm):
"""
class Meta:
model = models.Person
exclude = [
'user',
'relationship_targets',
fields = [
'name',
'core_member',
'gender',
'age_group',
'nationality',
'country_of_residence',
'organisation',
'job_title',
'discipline',
'role',
'themes',
]
widgets = {
'nationality': Select2Widget(),

View File

@@ -1,5 +1,3 @@
import typing
from django.conf import settings
from django.contrib.auth.models import AbstractUser
from django.db import models
@@ -28,12 +26,7 @@ class User(AbstractUser):
"""
Does this user have a linked :class:`Person` record?
"""
try:
person = self.person
return True
except AttributeError:
return False
return hasattr(self, 'person')
class Organisation(models.Model):
@@ -182,5 +175,3 @@ class Person(models.Model):
def __str__(self) -> str:
return self.name

View File

@@ -7,6 +7,8 @@
</ol>
</nav>
<h1>Network View</h1>
<hr>
<form class="form"

View File

@@ -10,6 +10,8 @@
</ol>
</nav>
<h1>New Person</h1>
<hr>
<form class="form"

View File

@@ -10,7 +10,9 @@
</ol>
</nav>
<h1>{{ person }}</h1>
<h1>{{ person.name }}</h1>
<hr>
<dl>
{% if person.gender %}

View File

@@ -7,6 +7,8 @@
</ol>
</nav>
<h1>People</h1>
<hr>
{% if request.user.is_staff %}

View File

@@ -13,6 +13,8 @@
</ol>
</nav>
<h1>{{ person.name }}</h1>
<hr>
<form class="form"

View File

@@ -13,6 +13,8 @@
</ol>
</nav>
<h1>New Relationship</h1>
<hr>
<form class="form"

View File

@@ -13,6 +13,8 @@
</ol>
</nav>
<h1>Relationship</h1>
<hr>
<div class="row align-content-center align-items-center">

View File

@@ -16,6 +16,8 @@
</ol>
</nav>
<h1>Update Relationship</h1>
<hr>
<form class="form"