From 8678c06108b51fdb6b035556946fac5a416de829 Mon Sep 17 00:00:00 2001 From: Sam Collins Date: Tue, 31 Oct 2017 22:42:00 +0000 Subject: [PATCH] Added basic creation and deletion buttons for RFID --- mhackspace/rfid/urls.py | 21 +++++++++++++ mhackspace/rfid/views.py | 30 +++++++++++++++++++ .../templates/users/rfid_confirm_delete.html | 14 +++++++++ mhackspace/templates/users/rfid_form.html | 10 +++++-- mhackspace/users/models.py | 2 +- mhackspace/users/urls.py | 16 +++------- mhackspace/users/views.py | 26 ++-------------- 7 files changed, 79 insertions(+), 40 deletions(-) create mode 100644 mhackspace/rfid/urls.py create mode 100644 mhackspace/templates/users/rfid_confirm_delete.html diff --git a/mhackspace/rfid/urls.py b/mhackspace/rfid/urls.py new file mode 100644 index 0000000..5fa5635 --- /dev/null +++ b/mhackspace/rfid/urls.py @@ -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\d+)/$', + view=views.RfidCardsDeleteView.as_view(), + name='delete' + ), +], 'access_cards') diff --git a/mhackspace/rfid/views.py b/mhackspace/rfid/views.py index 30eb8cd..3bb9a05 100644 --- a/mhackspace/rfid/views.py +++ b/mhackspace/rfid/views.py @@ -2,6 +2,10 @@ import logging from rest_framework.response import Response from rest_framework import viewsets 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.rfid.models import Device, DeviceAuth from mhackspace.rfid.serializers import DeviceSerializer, AuthSerializer @@ -39,3 +43,29 @@ class AuthUserWithDeviceViewSet(viewsets.ViewSet): serializer = AuthSerializer( instance={'name': device.name, 'rfid': rfid.code, 'device': device.identifier}) 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' diff --git a/mhackspace/templates/users/rfid_confirm_delete.html b/mhackspace/templates/users/rfid_confirm_delete.html new file mode 100644 index 0000000..77d0f8b --- /dev/null +++ b/mhackspace/templates/users/rfid_confirm_delete.html @@ -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 %} +
{% csrf_token %} + {{ form.as_p }} + +
+{% endblock %} diff --git a/mhackspace/templates/users/rfid_form.html b/mhackspace/templates/users/rfid_form.html index 56eb2ad..f8d469f 100644 --- a/mhackspace/templates/users/rfid_form.html +++ b/mhackspace/templates/users/rfid_form.html @@ -6,7 +6,7 @@ {% block content %} {% if form %}

{{ user.username }}

-
+ {% csrf_token %} {{ form|crispy }} {{ form_blurb|crispy }} @@ -23,16 +23,20 @@ # Code Short Description + Create {% for rfid in rfids %} {{ forloop.counter }} - {{ rfid.code}} + {{ rfid.code }} - {{ rfid.description}} + {{ rfid.description }} + + + Delete {% endfor %} diff --git a/mhackspace/users/models.py b/mhackspace/users/models.py index bd2031d..bdd2888 100644 --- a/mhackspace/users/models.py +++ b/mhackspace/users/models.py @@ -79,7 +79,7 @@ class Membership(models.Model): unique=True ) payment = models.DecimalField(max_digits=6, decimal_places=2, default=0.0) - date = models.DateTimeField() + date = models.DateTimeField() reference = models.CharField(max_length=255) status = models.PositiveSmallIntegerField(default=0, choices=MEMBERSHIP_STATUS_CHOICES) email = models.CharField(max_length=255, unique=True) diff --git a/mhackspace/users/urls.py b/mhackspace/users/urls.py index ffe8293..4b2f43b 100644 --- a/mhackspace/users/urls.py +++ b/mhackspace/users/urls.py @@ -1,11 +1,13 @@ # -*- coding: utf-8 -*- 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 urlpatterns = [ + url('^access-cards/', include(access_card_patterns)), url( regex=r'^$', view=views.UserListView.as_view(), @@ -25,15 +27,5 @@ urlpatterns = [ regex=r'^~update/$', view=views.UserUpdateView.as_view(), 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' - ), + ) ] diff --git a/mhackspace/users/views.py b/mhackspace/users/views.py index d5d4512..6d8ef57 100644 --- a/mhackspace/users/views.py +++ b/mhackspace/users/views.py @@ -2,17 +2,16 @@ from __future__ import absolute_import, unicode_literals 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 .models import Rfid from .models import User from .models import Blurb from .models import Membership from .forms import BlurbForm, MembershipJoinForm + class UserDetailView(LoginRequiredMixin, DetailView): model = User # 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) -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): model = User # These next two lines tell the view to index lookups by username