Added basic creation and deletion buttons for RFID
This commit is contained in:
parent
8a2fa40f04
commit
8678c06108
|
@ -0,0 +1,21 @@
|
||||||
|
from django.conf.urls import url
|
||||||
|
|
||||||
|
from mhackspace.rfid import views
|
||||||
|
|
||||||
|
access_card_patterns = ([
|
||||||
|
url(
|
||||||
|
regex=r'^$',
|
||||||
|
view=views.RfidCardsListView.as_view(),
|
||||||
|
name='index'
|
||||||
|
),
|
||||||
|
url(
|
||||||
|
regex=r'^create$',
|
||||||
|
view=views.RfidCardsUpdateView.as_view(),
|
||||||
|
name='create'
|
||||||
|
),
|
||||||
|
url(
|
||||||
|
regex=r'^delete/(?P<pk>\d+)/$',
|
||||||
|
view=views.RfidCardsDeleteView.as_view(),
|
||||||
|
name='delete'
|
||||||
|
),
|
||||||
|
], 'access_cards')
|
|
@ -2,6 +2,10 @@ import logging
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework import viewsets
|
from rest_framework import viewsets
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
|
|
||||||
|
from django.views.generic import ListView, DeleteView, CreateView
|
||||||
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
|
|
||||||
from mhackspace.users.models import Rfid
|
from mhackspace.users.models import Rfid
|
||||||
from mhackspace.rfid.models import Device, DeviceAuth
|
from mhackspace.rfid.models import Device, DeviceAuth
|
||||||
from mhackspace.rfid.serializers import DeviceSerializer, AuthSerializer
|
from mhackspace.rfid.serializers import DeviceSerializer, AuthSerializer
|
||||||
|
@ -39,3 +43,29 @@ class AuthUserWithDeviceViewSet(viewsets.ViewSet):
|
||||||
serializer = AuthSerializer(
|
serializer = AuthSerializer(
|
||||||
instance={'name': device.name, 'rfid': rfid.code, 'device': device.identifier})
|
instance={'name': device.name, 'rfid': rfid.code, 'device': device.identifier})
|
||||||
return Response(serializer.data, status=200)
|
return Response(serializer.data, status=200)
|
||||||
|
|
||||||
|
|
||||||
|
class RfidCardsListView(LoginRequiredMixin, ListView):
|
||||||
|
template_name = 'users/rfid_form.html'
|
||||||
|
context_object_name = 'rfids'
|
||||||
|
paginate_by = 50
|
||||||
|
model = Rfid
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return Rfid.objects.filter(user=self.request.user)
|
||||||
|
|
||||||
|
|
||||||
|
class RfidCardsUpdateView(LoginRequiredMixin, CreateView):
|
||||||
|
fields = ['code', 'description', ]
|
||||||
|
model = Rfid
|
||||||
|
success_url = '/users/access-cards'
|
||||||
|
|
||||||
|
def form_valid(self, form):
|
||||||
|
user = self.request.user
|
||||||
|
form.instance.user = user
|
||||||
|
return super(RfidCardsUpdateView, self).form_valid(form)
|
||||||
|
|
||||||
|
|
||||||
|
class RfidCardsDeleteView(LoginRequiredMixin, DeleteView):
|
||||||
|
model = Rfid
|
||||||
|
success_url = '/users/access-cards'
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% load i18n %}
|
||||||
|
{% load static %}
|
||||||
|
{% load crispy_forms_tags %}
|
||||||
|
{% load socialaccount %}
|
||||||
|
|
||||||
|
{% block title %}Delete RFID: {{ object.description }}{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<form action="" method="post">{% csrf_token %}
|
||||||
|
{{ form.as_p }}
|
||||||
|
<input type="submit" value="Delete" />
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
|
@ -6,7 +6,7 @@
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% if form %}
|
{% if form %}
|
||||||
<h1>{{ user.username }}</h1>
|
<h1>{{ user.username }}</h1>
|
||||||
<form class="form-horizontal" method="post" action="{% url 'users:access_card_create' %}" enctype="multipart/form-data">
|
<form class="form-horizontal" method="post" action="{% url 'users:access_cards:create' %}" enctype="multipart/form-data">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form|crispy }}
|
{{ form|crispy }}
|
||||||
{{ form_blurb|crispy }}
|
{{ form_blurb|crispy }}
|
||||||
|
@ -23,16 +23,20 @@
|
||||||
<th>#</th>
|
<th>#</th>
|
||||||
<th>Code</th>
|
<th>Code</th>
|
||||||
<th>Short Description</th>
|
<th>Short Description</th>
|
||||||
|
<th><a class="btn btn-primary pull-right" href="{% url 'users:access_cards:create' %}">Create</a></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
{% for rfid in rfids %}
|
{% for rfid in rfids %}
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row"> {{ forloop.counter }} </th>
|
<th scope="row"> {{ forloop.counter }} </th>
|
||||||
<td>
|
<td>
|
||||||
{{ rfid.code}}
|
{{ rfid.code }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{ rfid.description}}
|
{{ rfid.description }}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a href="{% url 'users:access_cards:delete' rfid.id %}">Delete</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -79,7 +79,7 @@ class Membership(models.Model):
|
||||||
unique=True
|
unique=True
|
||||||
)
|
)
|
||||||
payment = models.DecimalField(max_digits=6, decimal_places=2, default=0.0)
|
payment = models.DecimalField(max_digits=6, decimal_places=2, default=0.0)
|
||||||
date = models.DateTimeField()
|
date = models.DateTimeField()
|
||||||
reference = models.CharField(max_length=255)
|
reference = models.CharField(max_length=255)
|
||||||
status = models.PositiveSmallIntegerField(default=0, choices=MEMBERSHIP_STATUS_CHOICES)
|
status = models.PositiveSmallIntegerField(default=0, choices=MEMBERSHIP_STATUS_CHOICES)
|
||||||
email = models.CharField(max_length=255, unique=True)
|
email = models.CharField(max_length=255, unique=True)
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
from django.conf.urls import url
|
from django.conf.urls import include, url
|
||||||
|
|
||||||
|
from mhackspace.rfid.urls import access_card_patterns
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
url('^access-cards/', include(access_card_patterns)),
|
||||||
url(
|
url(
|
||||||
regex=r'^$',
|
regex=r'^$',
|
||||||
view=views.UserListView.as_view(),
|
view=views.UserListView.as_view(),
|
||||||
|
@ -25,15 +27,5 @@ urlpatterns = [
|
||||||
regex=r'^~update/$',
|
regex=r'^~update/$',
|
||||||
view=views.UserUpdateView.as_view(),
|
view=views.UserUpdateView.as_view(),
|
||||||
name='update'
|
name='update'
|
||||||
),
|
)
|
||||||
url(
|
|
||||||
regex=r'^-access-cards$',
|
|
||||||
view=views.RfidCardsListView.as_view(),
|
|
||||||
name='access_cards'
|
|
||||||
),
|
|
||||||
url(
|
|
||||||
regex=r'^-access-card-create$',
|
|
||||||
view=views.RfidCardsUpdateView.as_view(),
|
|
||||||
name='access_card_create'
|
|
||||||
),
|
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,17 +2,16 @@
|
||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.views.generic import DetailView, ListView, RedirectView, UpdateView, CreateView
|
from django.views.generic import DetailView, ListView, RedirectView, UpdateView
|
||||||
|
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
|
|
||||||
from .models import Rfid
|
|
||||||
from .models import User
|
from .models import User
|
||||||
from .models import Blurb
|
from .models import Blurb
|
||||||
from .models import Membership
|
from .models import Membership
|
||||||
|
|
||||||
from .forms import BlurbForm, MembershipJoinForm
|
from .forms import BlurbForm, MembershipJoinForm
|
||||||
|
|
||||||
|
|
||||||
class UserDetailView(LoginRequiredMixin, DetailView):
|
class UserDetailView(LoginRequiredMixin, DetailView):
|
||||||
model = User
|
model = User
|
||||||
# These next two lines tell the view to index lookups by username
|
# These next two lines tell the view to index lookups by username
|
||||||
|
@ -67,27 +66,6 @@ class UserUpdateView(LoginRequiredMixin, UpdateView):
|
||||||
return super(UserUpdateView, self).form_valid(form)
|
return super(UserUpdateView, self).form_valid(form)
|
||||||
|
|
||||||
|
|
||||||
class RfidCardsListView(LoginRequiredMixin, ListView):
|
|
||||||
template_name = 'users/rfid_form.html'
|
|
||||||
context_object_name = 'rfids'
|
|
||||||
paginate_by = 50
|
|
||||||
model = Rfid
|
|
||||||
|
|
||||||
def get_queryset(self):
|
|
||||||
return Rfid.objects.filter(user=self.request.user)
|
|
||||||
|
|
||||||
|
|
||||||
class RfidCardsUpdateView(LoginRequiredMixin, CreateView):
|
|
||||||
fields = ['code', 'description', ]
|
|
||||||
model = Rfid
|
|
||||||
success_url = '/users/-access-cards'
|
|
||||||
|
|
||||||
def form_valid(self, form):
|
|
||||||
user = self.request.user
|
|
||||||
form.instance.user = user
|
|
||||||
return super(RfidCardsUpdateView, self).form_valid(form)
|
|
||||||
|
|
||||||
|
|
||||||
class UserListView(LoginRequiredMixin, ListView):
|
class UserListView(LoginRequiredMixin, ListView):
|
||||||
model = User
|
model = User
|
||||||
# These next two lines tell the view to index lookups by username
|
# These next two lines tell the view to index lookups by username
|
||||||
|
|
Loading…
Reference in New Issue