From d0964a3b9894a14cc5b04d837d1dbac90e033d15 Mon Sep 17 00:00:00 2001 From: Rahul Balakrishnan Date: Wed, 3 Jan 2018 18:30:53 -0800 Subject: [PATCH] Adding Member and Committee tab functionality --- website/internal/admin.py | 9 ++++-- website/internal/models.py | 10 ++++-- .../internal/static/internal/css/style.css | 5 +++ website/internal/templates/internal/base.html | 2 ++ .../templates/internal/committee_members.html | 19 ++++++++++++ .../templates/internal/committees.html | 31 +++++++++++++++++++ .../templates/internal/member_details.html | 12 +++++++ .../templates/internal/member_list.html | 25 ++++++++++++++- website/internal/urls.py | 2 ++ website/internal/views.py | 27 ++++++++++++++-- 10 files changed, 133 insertions(+), 9 deletions(-) create mode 100644 website/internal/templates/internal/committee_members.html create mode 100644 website/internal/templates/internal/committees.html create mode 100644 website/internal/templates/internal/member_details.html diff --git a/website/internal/admin.py b/website/internal/admin.py index f866020..9d84612 100644 --- a/website/internal/admin.py +++ b/website/internal/admin.py @@ -16,9 +16,12 @@ def full_name(self, o): class EventAdmin(admin.ModelAdmin): actions = ['delete_selected'] ordering = ['name'] - list_filter = ('created_by', 'point_person', 'confirmed', 'complete') - list_display = ('name','title', 'speaker_full_name', 'time', 'venue', 'point_person', - 'confirmed', 'complete') + # list_filter = ('created_by', 'point_person', 'confirmed', 'complete') + list_filter = ('created_by', 'point_person', 'confirmed') + # list_display = ('name','title', 'speaker_full_name', 'time', 'venue', 'point_person', + # 'confirmed', 'complete') + list_display = ('name', 'title', 'speaker_full_name', 'time', 'venue', 'point_person', + 'confirmed') search_fields = ('name', 'title', 'speaker_first_name', 'speaker_last_name', 'point_person') class CommitteeAdmin(admin.ModelAdmin): diff --git a/website/internal/models.py b/website/internal/models.py index 02b64ac..ef23fe3 100644 --- a/website/internal/models.py +++ b/website/internal/models.py @@ -11,19 +11,24 @@ class Member(AbstractUser): ('associate_second', 'Second Semester Associate'), ('alumni', 'Alumni'), ) - + # name = models.CharField(max_length=200, unique=False, null=True, default=None) semester_joined = models.CharField([semester_validator], max_length=6, blank=True) status = models.CharField(max_length=16, choices=STATUS_CHOICES) bio = models.TextField(blank=True) attendance = models.DecimalField(max_digits=5, decimal_places=2, default=0) title = models.TextField(default='General Member') + # contact/social info cell_phone = models.CharField(max_length=11, blank=True) facebook = models.CharField(max_length=300, blank=True) instagram = models.CharField(max_length=300, blank=True) snapchat = models.CharField(max_length=300, blank=True) + @property + def isActive(self): + return self.status == ('active') + def __unicode__(self): return u'%s' % self.username @@ -41,7 +46,7 @@ class Event(models.Model): created_by = models.ForeignKey(Member, on_delete=models.CASCADE, related_name='created_events') point_person = models.ForeignKey(Member, on_delete=models.CASCADE, related_name='pp_events') confirmed = models.BooleanField(default=False) - complete = models.BooleanField(default=False) + # complete = models.BooleanField(default=False) # link fields facebook_link = models.CharField(max_length=300, blank=True) @@ -71,6 +76,7 @@ class Committee(Group): vp = models.ForeignKey(Member, on_delete=models.CASCADE) class SubCommittee(Group): + parent_committee = models.ForeignKey(Committee, on_delete=models.CASCADE, related_name='subcommittees') members = models.ManyToManyField(Member, related_name='subcommittees') diff --git a/website/internal/static/internal/css/style.css b/website/internal/static/internal/css/style.css index 2e561e7..b570e73 100644 --- a/website/internal/static/internal/css/style.css +++ b/website/internal/static/internal/css/style.css @@ -188,6 +188,11 @@ p { max-width: 60%; } +.med-col { + width: 40%; + max-width: 40%; +} + .short-col { width: 20%; max-width: 20%; diff --git a/website/internal/templates/internal/base.html b/website/internal/templates/internal/base.html index d494aff..ae55407 100644 --- a/website/internal/templates/internal/base.html +++ b/website/internal/templates/internal/base.html @@ -4,6 +4,7 @@ {% url 'internal:event_list' as event_list_url %} {% url 'internal:member_list' as member_list_url %} +{% url 'internal:committees' as committees_url %} @@ -21,6 +22,7 @@ Events Directory + Committee
{% block pagecontent %} diff --git a/website/internal/templates/internal/committee_members.html b/website/internal/templates/internal/committee_members.html new file mode 100644 index 0000000..fb1b993 --- /dev/null +++ b/website/internal/templates/internal/committee_members.html @@ -0,0 +1,19 @@ +{% extends 'internal/base.html' %} + +{% block title %}Committee members{% endblock %} + +{% block pagecontent %} +
+ + {% for member in members %} + {% if member.isActive %} + + + + + + {% endif %} + {% endfor %} +
{{member.first_name}} {{member.last_name}}{{ member.title}}
+
+{% endblock %} diff --git a/website/internal/templates/internal/committees.html b/website/internal/templates/internal/committees.html new file mode 100644 index 0000000..c9468b8 --- /dev/null +++ b/website/internal/templates/internal/committees.html @@ -0,0 +1,31 @@ + +{% extends 'internal/base.html' %} +{% url 'internal:committees' as committees_url %} + +{% block title %}Committees{% endblock %} + +{% block pagecontent %} +
+ + + + + + + {% if committees %} + {% for committee in committees %} + + + + + + + + + {% endfor %} + {% else %} +

No Members to Display

+ {% endif %} +
Committees
{{committee.name}}
+
+{% endblock %} diff --git a/website/internal/templates/internal/member_details.html b/website/internal/templates/internal/member_details.html new file mode 100644 index 0000000..19c4c9e --- /dev/null +++ b/website/internal/templates/internal/member_details.html @@ -0,0 +1,12 @@ +{% extends 'internal/base.html' %} + +{% block title %}{{member.first_name}} {{member.last_name}}{% endblock %} + +{% block pagecontent %} +
+
+

{{member.first_name}} {{member.last_name}}

+

{{ member.bio }}

+
+
+ {% endblock %} \ No newline at end of file diff --git a/website/internal/templates/internal/member_list.html b/website/internal/templates/internal/member_list.html index 3bc6645..031833f 100644 --- a/website/internal/templates/internal/member_list.html +++ b/website/internal/templates/internal/member_list.html @@ -1,8 +1,31 @@ {% extends 'internal/base.html' %} +{% url 'internal:member_list' as member_list_url %} -{% block title %}Directory{% endblock %} +{% block title %}Members{% endblock %} {% block pagecontent %} +
+ + + + + + {% if member_list %} + {% for member in member_list %} + {% if member.isActive %} + + + + + + + {% endif %} + {% endfor %} + {% else %} +

No Members to Display

+ {% endif %} +
NameRole
{{member.first_name}} {{member.last_name}}{{ member.title}}
+
{% endblock %} diff --git a/website/internal/urls.py b/website/internal/urls.py index cd5254b..06f5d5f 100644 --- a/website/internal/urls.py +++ b/website/internal/urls.py @@ -11,4 +11,6 @@ url(r'^register/$', views.register, name='register'), url(r'^events/(?P.+)/$', views.event_details, name='event_details'), url(r'^members/(?P.+)/$', views.member_details, name='member_details'), + url(r'^committees/$', views.committees, name='committees'), + url(r'^committees/(?P.+)/$', views.committee_members, name='committee_members') ] diff --git a/website/internal/views.py b/website/internal/views.py index 18291ad..7c202a5 100644 --- a/website/internal/views.py +++ b/website/internal/views.py @@ -2,9 +2,11 @@ from django.http import HttpResponse from .models import Event +from .models import Member +from .models import Committee def event_list(request): - lst = Event.objects.filter(complete=False).order_by('name') + lst = Event.objects.all().order_by('name') context = {'event_list': lst} return render(request, 'internal/event_list.html', context) @@ -17,8 +19,27 @@ def register(request): return HttpResponse("You're trying to register") def member_list(request): - context = {} + lst = Member.objects.all() + context = {'member_list': lst} return render(request, 'internal/member_list.html', context) def member_details(request, username): - return HttpResponse("You're looking at member %s" % username) + member = Member.objects.get(username=username) + context = {'member': member} + return render(request, 'internal/member_details.html', context) + +def committees(request): + lst = Committee.objects.all() + context = {'committees': lst} + return render(request, 'internal/committees.html', context) + +def committee_members(request, name): + comm = Committee.objects.get(name = name) + print(comm) + lst = Member.objects.filter(committees__in=[comm]) + print(lst) + context = {'members': lst} + return render(request, 'internal/committee_members.html', context) + + +