diff --git a/expenses_claim/__init__.py b/expenses_claim/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/expenses_claim/admin.py b/expenses_claim/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/expenses_claim/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/expenses_claim/apps.py b/expenses_claim/apps.py new file mode 100644 index 0000000..677ef5c --- /dev/null +++ b/expenses_claim/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class ExpensesClaimConfig(AppConfig): + name = 'expenses_claim' diff --git a/expenses_claim/forms.py b/expenses_claim/forms.py new file mode 100644 index 0000000..6fc8b03 --- /dev/null +++ b/expenses_claim/forms.py @@ -0,0 +1,43 @@ +"""Expenses claim form.""" + +from django import forms + + +class IBANField(forms.CharField): + """Field that validates Bank Account numbers + acording to the IBAN standard.""" + + def to_python(self, data): + """1. Remove spaces + 2. Move the country code and two check digits to the end + 3. Replace all letters so that A=10, B=11 ... Z=35""" + + # TODO: Field validation not working? + if not data: + return data + print(data) + data.replace(" ", "") + data = data[4:] + data[0:4] + LETTERS = {letter: str(index) for index, + letter in enumerate(ascii_uppercase, start=10)} + data = data.upper() + data = [LETTERS[char] for char in data if char in LETTERS] + print(data) + return ''.join(data) + + def validate(self, data): + """Validate value constructed by normalize""" + + super().validate(data) + if int(data) % 97 != 1: + raise forms.ValidationError("Invalid IBAN number!") + + return data + + +class ExpensesClaim(forms.Form): + """Expenses claim form""" + + name = forms.CharField(label='Nimi', max_length=100) + iban = IBANField(label='IBAN', max_length=100) + amount = forms.CharField(label="Summa", max_length=100) diff --git a/expenses_claim/migrations/__init__.py b/expenses_claim/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/expenses_claim/models.py b/expenses_claim/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/expenses_claim/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/expenses_claim/templates/claim.html b/expenses_claim/templates/claim.html new file mode 100644 index 0000000..0d88d1e --- /dev/null +++ b/expenses_claim/templates/claim.html @@ -0,0 +1,6 @@ +Dis is claim + +
+ {{ form }} + +
\ No newline at end of file diff --git a/expenses_claim/tests.py b/expenses_claim/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/expenses_claim/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/expenses_claim/urls.py b/expenses_claim/urls.py new file mode 100644 index 0000000..fba43bb --- /dev/null +++ b/expenses_claim/urls.py @@ -0,0 +1,10 @@ +"""Expenses claim urls.""" + +from django.conf.urls import url +from django.conf import settings +from .views import * + + +urlpatterns = [ + url(r'^new', claim) +] diff --git a/expenses_claim/views.py b/expenses_claim/views.py new file mode 100644 index 0000000..ebbef2d --- /dev/null +++ b/expenses_claim/views.py @@ -0,0 +1,22 @@ +"""Expenses claim views.""" + +from django.shortcuts import render +from django.http import * +from django.views.decorators.http import require_http_methods +from .forms import ExpensesClaim + +# Allow only GET or POST +@require_http_methods(["GET", "POST"]) +def claim(request): + """Render expenses claim form.""" + + if request.method == 'POST': + form = ExpensesClaim(request.POST) + if form.is_valid(): + return HttpResponse() + + elif request.method == 'GET': + form = ExpensesClaim() + + return render(request, 'claim.html', {'form': form}) + \ No newline at end of file diff --git a/sikweb/base.py b/sikweb/base.py index ba33914..3e56866 100644 --- a/sikweb/base.py +++ b/sikweb/base.py @@ -105,6 +105,7 @@ INSTALLED_APPS = [ 'phonenumber_field', 'import_export', 'django_filters', + 'expenses_claim', ] IMPORT_EXPORT_USE_TRANSACTIONS = True diff --git a/sikweb/urls.py b/sikweb/urls.py index a73f055..559d82f 100644 --- a/sikweb/urls.py +++ b/sikweb/urls.py @@ -27,6 +27,7 @@ import webapp.urls import infoscreen.urls import members.urls import coffee_scale.urls +import expenses_claim.urls favicon_view = RedirectView.as_view( url='static/img/favicon.png', permanent=True) @@ -39,7 +40,8 @@ urlpatterns = [ url(r'^coffee/', include('coffee_scale.urls')), url(r'^kaehmy/', include('kaehmy.urls')), url(r'^ohlhafv/', include('ohlhafv.urls')), - + url(r'^expenses/', include('expenses_claim.urls')), + # favourite icon url(r'^favicon\.ico$', favicon_view),