indoor pin and cteward integration

This commit is contained in:
smile 2015-09-24 21:40:54 +02:00
parent 0c7b3b9d62
commit ac372412fd
13 changed files with 224 additions and 32 deletions

View file

@ -141,8 +141,8 @@ class NRF24Form(forms.Form):
class CLabPinForm(forms.Form):
c_lab_pin1 = GastroPinField(label=_('New c-lab PIN'))
c_lab_pin2 = GastroPinField(label=_('Repeat c-lab PIN'),
c_lab_pin1 = GastroPinField(label=_('New indoor PIN'))
c_lab_pin2 = GastroPinField(label=_('Repeat indoor PIN'),
help_text=_('Numerical only, 4 to 8 digits'))

View file

@ -105,12 +105,12 @@ msgid "Your r0ket's NRF24 identification"
msgstr "Die NRF24-ID deiner r0ket"
#: forms.py:130
msgid "New c-lab PIN"
msgstr "Neue c-lab-PIN"
msgid "New indoor PIN"
msgstr "Neue innentür-PIN"
#: forms.py:131
msgid "Repeat c-lab PIN"
msgstr "c-lab-PIN wiederholen"
msgid "Repeat indoor PIN"
msgstr "Innentür-PIN wiederholen"
#: forms.py:149
msgid "Select the username for whom you want to reset the password."
@ -192,12 +192,12 @@ msgid "This crewname is still available."
msgstr "Dieser Crewname ist noch zu haben."
#: templates/clabpin.html:5
msgid "c-lab PIN"
msgstr "c-lab-PIN"
msgid "Indoor PIN"
msgstr "Innentür-PIN"
#: templates/clabpin.html:8
msgid "Change your c-lab PIN to access the c-lab in the basement."
msgstr "PIN ändern für den Zugang zum c-lab im Keller."
msgid "Change your PIN to access rooms secured with PIN-pad."
msgstr "PIN ändern für den Zugang zu PIN-pad-geschützten Räumen."
#: templates/gastropin.html:5
msgid "Gastro PIN"
@ -331,8 +331,8 @@ msgid "RFID"
msgstr ""
#: templates/member_base.html:29
msgid "c-lab-PIN"
msgstr "c-lab-PIN"
msgid "Indoor-PIN"
msgstr "Innentür-PIN"
#: templates/member_base.html:33 templates/nrf24.html:5
msgid "NRF24"

View file

@ -40,6 +40,7 @@ class UserProfile(models.Model):
is_clab_member = models.BooleanField(default=False, editable=False)
is_cey_member = models.BooleanField(default=False, editable=False)
is_ceymaster = models.BooleanField(default=False, editable=False)
is_soundlab_member = models.BooleanField(default=False, editable=False)
def __unicode__(self):
return 'Profile: %s' % self.user.username

View file

View file

@ -2,10 +2,10 @@
{% load i18n %}
{% load crispy_forms_tags %}
{% block form_title %}{% trans "c-lab PIN"%}{% endblock %}
{% block form_title %}{% trans "Indoor PIN"%}{% endblock %}
{% block form_description %}
<p>{% blocktrans %}Change your c-lab PIN to access the c-lab in the basement.{% endblocktrans %}</p>
<p>{% blocktrans %}Change your PIN to access rooms secured with PIN-pad.{% endblocktrans %}</p>
{% endblock %}
{% block form_fields %}
@ -19,4 +19,4 @@
</div>
</div>
</form>
{% endblock form_fields %}
{% endblock form_fields %}

View file

@ -37,21 +37,36 @@
<h3>{% trans "Management information" %}</h3>
<ul>
<li>{% trans "Name:" %}
{{ member.displayName }}
</li>
<li>
{% trans "External e-mail address:" %}
{{ member.externalEmail }}<br>
<table class="table table-condensed table-bordered table-hover">
<tr><td>{% trans "Crewname:" %}</td><td>{{ cteward.Crewname }}</td></tr>
<tr><td>{% trans "Membership Number:" %}</td><td>{{ cteward.Mitgliedsnummer }}</td></tr>
<tr><td>{% trans "Status:" %}</td><td>{{ cteward.Status }}</td></tr>
<tr>
<td>{% trans "External e-mail address:" %}</td><td>{{ member.externalEmail }}</td>
<!--<td>
<span class="muted">{% blocktrans %}The external e-mail address is used by the
board of c-base to reach you in cases where your c-base
address (see above) is not working. To change your
external e-mail address please contact the c-base board via {% endblocktrans %}
(<a href="mailto:cash@c-base.org">cash@c-base.org</a>).</span>
</li>
</ul>
</td>-->
</tr>
<tr><td>{% trans "Firstname:" %}</td><td>{{ cteward.Vorname }}</td></tr>
<tr><td>{% trans "Lastname:" %}</td><td>{{ cteward.Nachname }}</td></tr>
<tr><td>{% trans "Street:" %}</td><td>{{ cteward.Strasse }}</td></tr>
<tr><td>{% trans "Postcode:" %}</td><td>{{ cteward.PLZ }}</td></tr>
<tr><td>{% trans "City:" %}</td><td>{{ cteward.Ort }}</td></tr>
<tr><td>{% trans "Gender:" %}</td><td>{{ cteward.Geschlecht }}</td></tr>
<tr><td>{% trans "Birth Date:" %}</td><td>{{ cteward.Geburtsdatum }}</td></tr>
<tr><td>{% trans "Entry Date:" %}</td><td>{{ cteward.Eintritt }}</td></tr>
<tr><td>{% trans "Godfather:" %}</td><td>{{ cteward.Paten }}</td></tr>
<tr><td>{% trans "Payment Method:" %}</td><td>{{ cteward.Zahlungsart }}</td></tr>
<tr><td>{% trans "Payment Frequency:" %}</td><td>{{ cteward.Zahlungsweise }}</td></tr>
<tr><td>{% trans "Debit Authorization:" %}</td><td>{{ cteward.Lastschriftmandat }}</td></tr>
<tr><td>{% trans "Bank:" %}</td><td>{{ cteward.Bank }}</td></tr>
<tr><td>{% trans "IBAN:" %}</td><td>{{ cteward.IBAN }}</td></tr>
<tr><td>{% trans "BIC:" %}</td><td>{{ cteward.BIC }}</td></tr>
</table>
</div>
</div>
{% endblock container %}

View file

@ -26,7 +26,7 @@
</li>
{% url account.views.clabpin as clab_url %}
<li class="{% if request.path == clab_url %}active{% endif %}">
<a href="{{ clab_url }}">{% trans "c-lab-PIN" %}</a>
<a href="{{ clab_url }}">{% trans "Indoor-PIN" %}</a>
</li>
{% url account.views.nrf24 as nrf24_url %}
<li class="{% if request.path == nrf24_url %}active{% endif %}">
@ -50,7 +50,7 @@
<hr />
<div class="row pull-right">
<small class="muted">Copyright &copy; 2013 by c-base e.V.</small>
<small class="muted">Copyright &copy; 2015 by c-base e.V.</small>
</div>
</div><!-- /.container -->
{% endblock body %}

View file

@ -0,0 +1,114 @@
{% extends "member_base.html" %}
{% load i18n %}
{% block container %}
<div class="row">
<div class="col-md-12">
<h3>{% trans "Basic information about your account" %}</h3>
{{ contributions }}
<table class="table table-condensed table-bordered table-hover">
<tr><td>{% trans "Crewname:" %}</td><td>{{ cteward.Crewname }}</td></tr>
<tr><td>{% trans "Membership Number:" %}</td><td>{{ cteward.Mitgliedsnummer }}</td></tr>
<tr><td>{% trans "Status:" %}</td><td>{{ cteward.Status }}</td></tr>
<tr><td>{% trans "Firstname:" %}</td><td>{{ cteward.Vorname }}</td></tr>
<tr><td>{% trans "Lastname:" %}</td><td>{{ cteward.Nachname }}</td></tr>
<tr><td>{% trans "Street:" %}</td><td>{{ cteward.Strasse }}</td></tr>
<tr><td>{% trans "Postcode:" %}</td><td>{{ cteward.PLZ }}</td></tr>
<tr><td>{% trans "City:" %}</td><td>{{ cteward.Ort }}</td></tr>
<tr><td>{% trans "Gender:" %}</td><td>{{ cteward.Geschlecht }}</td></tr>
<tr><td>{% trans "Birth Date:" %}</td><td>{{ cteward.Geburtsdatum }}</td></tr>
<tr><td>{% trans "Entry Date:" %}</td><td>{{ cteward.Eintritt }}</td></tr>
<tr><td>{% trans "Godfather:" %}</td><td>{{ cteward.Paten }}</td></tr>
<tr><td>{% trans "Payment Method:" %}</td><td>{{ cteward.Zahlungsart }}</td></tr>
<tr><td>{% trans "Payment Frequency:" %}</td><td>{{ cteward.Zahlungsweise }}</td></tr>
<tr><td>{% trans "Debit Authorization:" %}</td><td>{{ cteward.Lastschriftmandat }}</td></tr>
<tr><td>{% trans "Bank:" %}</td><td>{{ cteward.Bank }}</td></tr>
<tr><td>{% trans "IBAN:" %}</td><td>{{ cteward.IBAN }}</td></tr>
<tr><td>{% trans "BIC:" %}</td><td>{{ cteward.BIC }}</td></tr>
</table>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div>
<h3>{% trans "Contributions:" %}</h3>
</div>
<div class="panel-group" id="accordion">
<div class="panel panel-default">
<a class="btn btn-lg btn-default btn-block" data-toggle="collapse" data-parent="#accordion" href="#total">{% trans "Total" %}</a>
<div id="total" class="panel-collapse">
<div class="terminal">
<table class="table table-condensed table-bordered table-hover">
<tr><td>{% trans "Billed:" %}</td><td>{{ contributions.total.billed }}</td></tr>
<tr><td>{% trans "Paid:" %}</td><td>{{ contributions.total.paid }}</td></tr>
<tr><td>{% trans "Unpaid:" %}</td><td>{{ contributions.total.unpaid }}</td></tr>
</table>
</div>
</div>
</div>
{% for year,values in contributions.years %}
<div class="panel panel-default">
<a class="btn btn-lg btn-default btn-block" data-toggle="collapse" data-parent="#accordion" href="#{{ year }}">{{ year }}</a>
<div id="{{ year }}" class="panel-collapse collapse">
<div class="terminal">
<table class="table table-condensed table-bordered table-hover">
<tr><td>{% trans "Billed:" %}</td><td>{{ values.billed }}</td></tr>
<tr><td>{% trans "Paid:" %}</td><td>{{ values.paid }}</td></tr>
<tr><td>{% trans "Unpaid:" %}</td><td>{{ values.unpaid }}</td></tr>
</table>
</div>
</div>
</div>
{% empty %}
<a class="btn btn-block btn-lg btn-default btn-block"><b>{% trans "no data available" %}</b></a>
{% endfor %}
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div>
<h3>{% trans "Contracts:" %}</h3>
</div>
<div class="panel-group" id="contract-accordion">
{% for contract in contributions.contracts %}
<div class="panel panel-default">
<a class="btn btn-lg btn-default btn-block" data-toggle="collapse" data-parent="#contract-accordion" href="#{{ contract.Vertragsnummer }}">Contract #{{ contract.Vertragsnummer }}</a>
<div id="{{ contract.Vertragsnummer }}" class="panel-collapse collapse">
<div class="terminal">
<table class="table table-condensed table-bordered table-hover">
<tr><td>{% trans "Type:" %}</td><td>{{ contract.Art }}</td></tr>
<tr><td>{% trans "Total:" %}</td><td>
<table>
<tr>
<td>{% trans "Billed:" %}</td><td>{{ contract.total.billed }}</td>
<td>{% trans "Paid:" %}</td><td>{{ contract.total.paid }}</td>
<td>{% trans "Unpaid:" %}</td><td>{{ contract.total.unpaid }}</td>
</tr>
</table>
</td></tr>
<tr><td>{% trans "Sums:" %}</td><td>
<table>
{% for detail, values in contract.Summen.items %}
<tr>
<td>{{ detail }}:</td>
<td>{% trans "Billed:" %}</td><td>{{ values.billed }}</td>
<td>{% trans "Paid:" %}</td><td>{{ values.paid }}</td>
<td>{% trans "Unpaid:" %}</td><td>{{ values.unpaid }}</td>
</tr>
{% endfor %}
</table>
</td></tr>
</table>
</div>
</div>
</div>
{% empty %}
<a class="btn btn-block btn-lg btn-default btn-block"><b>{% trans "no data available" %}</b></a>
{% endfor %}
</div>
</div>
</div>
{% endblock container %}

View file

@ -13,6 +13,7 @@ urlpatterns = patterns(
url(r'^sippin/$', 'account.views.sippin', name='sippin'),
url(r'^clabpin/$', 'account.views.clabpin', name='clabpin'),
url(r'^admin/$', 'account.views.admin', name='admin'),
url(r'^memberstatus/$', 'account.views.memberstatus', name='memberstatus'),
url(r'^$', 'account.views.home', name="home"),
url(r'^groups/(?P<group_name>[^/]+)/', 'account.views.groups_list'),
)
)

View file

@ -4,6 +4,8 @@
import os
import hashlib
import smbpasswd
import requests
import collections
from django.conf import settings
from django.http import HttpResponse, HttpResponseRedirect
@ -82,9 +84,16 @@ def auth_login(request):
def home(request):
member = retrieve_member(request)
number_of_members = member.get_number_of_members()
password = get_ldap_password(request)
username = request.user.username
url = "https://vorstand.c-base.org/cteward-api/legacy/member/%s" % username
r = requests.get(url, verify=False, auth=(username, password))
cteward = r.json()
context = {'member': member.to_dict(),
'groups': sorted(list(request.user.groups.all())),
'number_of_members': number_of_members}
'number_of_members': number_of_members,
'cteward': cteward,
}
return render(request, 'home.html', context)
@login_required
@ -151,8 +160,11 @@ def gastropin(request):
@login_required
def clabpin(request):
if not (request.user.profile.is_clab_member or request.user.profile.is_cey_member):
#if not request.user.profile.is_clab_member:
if not (
request.user.profile.is_clab_member or
request.user.profile.is_cey_member or
request.user.profile.is_soundlab_member
):
return render(request, 'access_denied.html')
def calculate_clab_hash(pin):
@ -280,3 +292,24 @@ def admin(request):
def hammertime(request):
return render(request, 'hammertime.html', {})
@login_required
def memberstatus(request):
#url = baseurl + route_operation_mapping['SessionCreate']['Route']
#data = json.dumps({'UserLogin': username, 'Password': password})
password = get_ldap_password(request)
username = request.user.username
url = "https://vorstand.c-base.org/cteward-api/legacy/member/%s/contributions" % username
r = requests.get(url, verify=False, auth=(username, password))
contributions = r.json()
years = collections.OrderedDict(sorted(contributions['years'].items(), reverse=True))
contributions['years'] = years.items()
url = "https://vorstand.c-base.org/cteward-api/legacy/member/%s" % username
r = requests.get(url, verify=False, auth=(username, password))
cteward = r.json()
return render(request, 'memberstatus.html', {'contributions': contributions, 'cteward': cteward})

28
account/wsgi.py Normal file
View file

@ -0,0 +1,28 @@
"""
WSGI config for cbmi project.
This module contains the WSGI application used by Django's development server
and any production WSGI deployments. It should expose a module-level variable
named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover
this application via the ``WSGI_APPLICATION`` setting.
Usually you will have the standard Django WSGI application here, but it also
might make sense to replace the whole Django WSGI application with a custom one
that later delegates to the Django one. For example, you could introduce WSGI
middleware here, or combine a Django application with an application of another
framework.
"""
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cbmi.settings")
# This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
# Apply WSGI middleware here.
# from helloworld.wsgi import HelloWorldApplication
# application = HelloWorldApplication(application)