Merge feature-sidebar with conflicts

This commit is contained in:
Jan Tuomi
2017-05-27 11:30:22 +03:00
7 changed files with 66 additions and 3 deletions
+1 -1
View File
@@ -103,7 +103,7 @@ class Member(BaseMember):
latest = payments.latest('date') latest = payments.latest('date')
date = latest.date date = latest.date
return date return date
except DoesNotExist: except Payment.DoesNotExist:
return None return None
@staticmethod @staticmethod
+8
View File
@@ -0,0 +1,8 @@
from rest_framework import serializers
from members.models import Member
class MemberSerializer(serializers.ModelSerializer):
paid = serializers.DateTimeField(source='last_paid')
class Meta:
model = Member
fields = ('id', 'first_name', 'last_name', 'email', 'POR', 'AYY', 'jas', 'created', 'paid')
+25 -1
View File
@@ -13,6 +13,10 @@ input {
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
} }
#header {
display: block;
}
#wrapper { #wrapper {
padding-right: 0; padding-right: 0;
padding-top: 0; padding-top: 0;
@@ -24,6 +28,10 @@ input {
background: #202020; background: #202020;
top: 0; top: 0;
padding: 0; padding: 0;
-webkit-transition: width 0.01s height 0.01s linear;
-moz-transition: width 0.01s height 0.01s linear;
-o-transition: width 0.01s height 0.01s linear;
transition: width 0.01s, height 0.01s, transform 0.01s;
} }
@@ -45,6 +53,10 @@ input {
cursor: default; cursor: default;
} }
#sidebar-collapse {
display: none;
}
@media (max-width: 767px) { @media (max-width: 767px) {
table { table {
@@ -62,6 +74,18 @@ input {
text-align: center; text-align: center;
} }
#header {
display: none;
}
.sidebar-nav {
display: none;
}
#sidebar-collapse {
display: block;
}
.logout-container { .logout-container {
position: initial; position: initial;
margin-bottom: 1rem; margin-bottom: 1rem;
@@ -212,4 +236,4 @@ input {
width: 100%; width: 100%;
max-width: 100%; max-width: 100%;
height: 10rem !important; height: 10rem !important;
} }
+10
View File
@@ -37,6 +37,16 @@
<!-- Sidebar --> <!-- Sidebar -->
<div id="sidebar-wrapper"> <div id="sidebar-wrapper">
<nav class="navbar navbar-inverse" id="sidebar-collapse">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".sidebar-nav">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<span class="navbar-brand hidden-lg hidden-md">{% trans "Member register of SIK ry" %}</span>
</div>
</nav>
<ul class="sidebar-nav"> <ul class="sidebar-nav">
<li> <li>
<span class="text-primary">{% trans "Members" %}</span> <span class="text-primary">{% trans "Members" %}</span>
+6
View File
@@ -17,6 +17,9 @@ from members.views import member_delete_confirm
from members.views import member_delete from members.views import member_delete
from members.views import payment_list from members.views import payment_list
# rest api
from members.views import MemberDetail
# application # application
from members.views import application_form from members.views import application_form
from members.views import application_list from members.views import application_list
@@ -96,6 +99,9 @@ urlpatterns = [
# favourite icon # favourite icon
url(r'^favicon\.ico$', favicon_view), url(r'^favicon\.ico$', favicon_view),
# rest api url
url(r'^api/members/(?P<pk>\d+)$', MemberDetail.as_view()),
# email validation # email validation
# url(r'^validate/(?P<uidb64>[0-9A-Za-z_\-\']+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', validateEmail, name='user-activation-link'), # url(r'^validate/(?P<uidb64>[0-9A-Za-z_\-\']+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', validateEmail, name='user-activation-link'),
# url(r'^validate/success/$', validate_success), # url(r'^validate/success/$', validate_success),
+15 -1
View File
@@ -7,13 +7,19 @@ from django.core.mail import send_mail
from django.conf import settings from django.conf import settings
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
'''Email validation''' # Email validation
from django.db.models.signals import post_save from django.db.models.signals import post_save
from django.dispatch import receiver from django.dispatch import receiver
from django.utils.http import urlsafe_base64_encode from django.utils.http import urlsafe_base64_encode
from django.utils.encoding import force_bytes from django.utils.encoding import force_bytes
from django.core.mail import send_mail from django.core.mail import send_mail
# REST framework
from members.serializers import MemberSerializer
from rest_framework import generics
from rest_framework import permissions
from rest_framework.throttling import UserRateThrottle, AnonRateThrottle
import json import json
import requests import requests
import logging import logging
@@ -473,3 +479,11 @@ def email_on_accept(sender, instance, created, **kwargs):
subject = 'Test2' subject = 'Test2'
message = 'Jäsenhakemuksesi on hyväksytty!!!\r\n' message = 'Jäsenhakemuksesi on hyväksytty!!!\r\n'
send_mail_wrapper(subject, message, instance.email) send_mail_wrapper(subject, message, instance.email)
# Can be used to retrieve single member information via REST API
class MemberDetail(generics.RetrieveAPIView):
queryset = Member.objects.all()
serializer_class = MemberSerializer
permission_classes = (permissions.IsAdminUser, )
throttle_classes = (UserRateThrottle, AnonRateThrottle, )
+1
View File
@@ -138,6 +138,7 @@ REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': ( 'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated', 'rest_framework.permissions.IsAuthenticated',
'rest_framework.permissions.DjangoModelPermissions', 'rest_framework.permissions.DjangoModelPermissions',
'rest_framework.permissions.IsAdminUser',
), ),
'DEFAULT_THROTTLE_CLASSES': ( 'DEFAULT_THROTTLE_CLASSES': (
'members.throttles.BurstRateThrottle', 'members.throttles.BurstRateThrottle',