Merge feature-sidebar with conflicts
This commit is contained in:
+1
-1
@@ -103,7 +103,7 @@ class Member(BaseMember):
|
||||
latest = payments.latest('date')
|
||||
date = latest.date
|
||||
return date
|
||||
except DoesNotExist:
|
||||
except Payment.DoesNotExist:
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
|
||||
@@ -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')
|
||||
@@ -13,6 +13,10 @@ input {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
#header {
|
||||
display: block;
|
||||
}
|
||||
|
||||
#wrapper {
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
@@ -24,6 +28,10 @@ input {
|
||||
background: #202020;
|
||||
top: 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;
|
||||
}
|
||||
|
||||
#sidebar-collapse {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
|
||||
table {
|
||||
@@ -62,6 +74,18 @@ input {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#header {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.sidebar-nav {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#sidebar-collapse {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.logout-container {
|
||||
position: initial;
|
||||
margin-bottom: 1rem;
|
||||
@@ -212,4 +236,4 @@ input {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
height: 10rem !important;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,6 +37,16 @@
|
||||
|
||||
<!-- Sidebar -->
|
||||
<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">
|
||||
<li>
|
||||
<span class="text-primary">{% trans "Members" %}</span>
|
||||
|
||||
@@ -17,6 +17,9 @@ from members.views import member_delete_confirm
|
||||
from members.views import member_delete
|
||||
from members.views import payment_list
|
||||
|
||||
# rest api
|
||||
from members.views import MemberDetail
|
||||
|
||||
# application
|
||||
from members.views import application_form
|
||||
from members.views import application_list
|
||||
@@ -96,6 +99,9 @@ urlpatterns = [
|
||||
# favourite icon
|
||||
url(r'^favicon\.ico$', favicon_view),
|
||||
|
||||
# rest api url
|
||||
url(r'^api/members/(?P<pk>\d+)$', MemberDetail.as_view()),
|
||||
|
||||
# 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/success/$', validate_success),
|
||||
|
||||
+15
-1
@@ -7,13 +7,19 @@ from django.core.mail import send_mail
|
||||
from django.conf import settings
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
'''Email validation'''
|
||||
# Email validation
|
||||
from django.db.models.signals import post_save
|
||||
from django.dispatch import receiver
|
||||
from django.utils.http import urlsafe_base64_encode
|
||||
from django.utils.encoding import force_bytes
|
||||
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 requests
|
||||
import logging
|
||||
@@ -473,3 +479,11 @@ def email_on_accept(sender, instance, created, **kwargs):
|
||||
subject = 'Test2'
|
||||
message = 'Jäsenhakemuksesi on hyväksytty!!!\r\n'
|
||||
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, )
|
||||
|
||||
Reference in New Issue
Block a user