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): class CLabPinForm(forms.Form):
c_lab_pin1 = GastroPinField(label=_('New c-lab PIN')) c_lab_pin1 = GastroPinField(label=_('New indoor PIN'))
c_lab_pin2 = GastroPinField(label=_('Repeat c-lab PIN'), c_lab_pin2 = GastroPinField(label=_('Repeat indoor PIN'),
help_text=_('Numerical only, 4 to 8 digits')) 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" msgstr "Die NRF24-ID deiner r0ket"
#: forms.py:130 #: forms.py:130
msgid "New c-lab PIN" msgid "New indoor PIN"
msgstr "Neue c-lab-PIN" msgstr "Neue innentür-PIN"
#: forms.py:131 #: forms.py:131
msgid "Repeat c-lab PIN" msgid "Repeat indoor PIN"
msgstr "c-lab-PIN wiederholen" msgstr "Innentür-PIN wiederholen"
#: forms.py:149 #: forms.py:149
msgid "Select the username for whom you want to reset the password." 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." msgstr "Dieser Crewname ist noch zu haben."
#: templates/clabpin.html:5 #: templates/clabpin.html:5
msgid "c-lab PIN" msgid "Indoor PIN"
msgstr "c-lab-PIN" msgstr "Innentür-PIN"
#: templates/clabpin.html:8 #: templates/clabpin.html:8
msgid "Change your c-lab PIN to access the c-lab in the basement." msgid "Change your PIN to access rooms secured with PIN-pad."
msgstr "PIN ändern für den Zugang zum c-lab im Keller." msgstr "PIN ändern für den Zugang zu PIN-pad-geschützten Räumen."
#: templates/gastropin.html:5 #: templates/gastropin.html:5
msgid "Gastro PIN" msgid "Gastro PIN"
@ -331,8 +331,8 @@ msgid "RFID"
msgstr "" msgstr ""
#: templates/member_base.html:29 #: templates/member_base.html:29
msgid "c-lab-PIN" msgid "Indoor-PIN"
msgstr "c-lab-PIN" msgstr "Innentür-PIN"
#: templates/member_base.html:33 templates/nrf24.html:5 #: templates/member_base.html:33 templates/nrf24.html:5
msgid "NRF24" msgid "NRF24"

View file

@ -40,6 +40,7 @@ class UserProfile(models.Model):
is_clab_member = models.BooleanField(default=False, editable=False) is_clab_member = models.BooleanField(default=False, editable=False)
is_cey_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_ceymaster = models.BooleanField(default=False, editable=False)
is_soundlab_member = models.BooleanField(default=False, editable=False)
def __unicode__(self): def __unicode__(self):
return 'Profile: %s' % self.user.username return 'Profile: %s' % self.user.username

View file

View file

@ -2,10 +2,10 @@
{% load i18n %} {% load i18n %}
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% block form_title %}{% trans "c-lab PIN"%}{% endblock %} {% block form_title %}{% trans "Indoor PIN"%}{% endblock %}
{% block form_description %} {% 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 %} {% endblock %}
{% block form_fields %} {% block form_fields %}

View file

@ -37,21 +37,36 @@
<h3>{% trans "Management information" %}</h3> <h3>{% trans "Management information" %}</h3>
<ul> <table class="table table-condensed table-bordered table-hover">
<li>{% trans "Name:" %} <tr><td>{% trans "Crewname:" %}</td><td>{{ cteward.Crewname }}</td></tr>
{{ member.displayName }} <tr><td>{% trans "Membership Number:" %}</td><td>{{ cteward.Mitgliedsnummer }}</td></tr>
</li> <tr><td>{% trans "Status:" %}</td><td>{{ cteward.Status }}</td></tr>
<li> <tr>
{% trans "External e-mail address:" %} <td>{% trans "External e-mail address:" %}</td><td>{{ member.externalEmail }}</td>
{{ member.externalEmail }}<br> <!--<td>
<span class="muted">{% blocktrans %}The external e-mail address is used by the <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 board of c-base to reach you in cases where your c-base
address (see above) is not working. To change your address (see above) is not working. To change your
external e-mail address please contact the c-base board via {% endblocktrans %} 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> (<a href="mailto:cash@c-base.org">cash@c-base.org</a>).</span>
</li> </td>-->
</ul> </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> </div>
{% endblock container %} {% endblock container %}

View file

@ -26,7 +26,7 @@
</li> </li>
{% url account.views.clabpin as clab_url %} {% url account.views.clabpin as clab_url %}
<li class="{% if request.path == clab_url %}active{% endif %}"> <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> </li>
{% url account.views.nrf24 as nrf24_url %} {% url account.views.nrf24 as nrf24_url %}
<li class="{% if request.path == nrf24_url %}active{% endif %}"> <li class="{% if request.path == nrf24_url %}active{% endif %}">
@ -50,7 +50,7 @@
<hr /> <hr />
<div class="row pull-right"> <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>
</div><!-- /.container --> </div><!-- /.container -->
{% endblock body %} {% 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'^sippin/$', 'account.views.sippin', name='sippin'),
url(r'^clabpin/$', 'account.views.clabpin', name='clabpin'), url(r'^clabpin/$', 'account.views.clabpin', name='clabpin'),
url(r'^admin/$', 'account.views.admin', name='admin'), 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'^$', 'account.views.home', name="home"),
url(r'^groups/(?P<group_name>[^/]+)/', 'account.views.groups_list'), url(r'^groups/(?P<group_name>[^/]+)/', 'account.views.groups_list'),
) )

View file

@ -4,6 +4,8 @@
import os import os
import hashlib import hashlib
import smbpasswd import smbpasswd
import requests
import collections
from django.conf import settings from django.conf import settings
from django.http import HttpResponse, HttpResponseRedirect from django.http import HttpResponse, HttpResponseRedirect
@ -82,9 +84,16 @@ def auth_login(request):
def home(request): def home(request):
member = retrieve_member(request) member = retrieve_member(request)
number_of_members = member.get_number_of_members() 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(), context = {'member': member.to_dict(),
'groups': sorted(list(request.user.groups.all())), '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) return render(request, 'home.html', context)
@login_required @login_required
@ -151,8 +160,11 @@ def gastropin(request):
@login_required @login_required
def clabpin(request): def clabpin(request):
if not (request.user.profile.is_clab_member or request.user.profile.is_cey_member): if not (
#if not request.user.profile.is_clab_member: 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') return render(request, 'access_denied.html')
def calculate_clab_hash(pin): def calculate_clab_hash(pin):
@ -280,3 +292,24 @@ def admin(request):
def hammertime(request): def hammertime(request):
return render(request, 'hammertime.html', {}) 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)

View file

@ -1,5 +1,5 @@
Django==1.4.2 Django==1.4.2
MySQL-python==1.2.4 #MySQL-python==1.2.4
django-auth-ldap==1.1.4 django-auth-ldap==1.1.4
django-json-rpc==0.6.1 django-json-rpc==0.6.1
django-crispy-forms==1.4.0 django-crispy-forms==1.4.0