From da8353c912bc824655604a6647485ace73f8344c Mon Sep 17 00:00:00 2001 From: Frederic Date: Sun, 14 Apr 2019 00:12:08 +0200 Subject: [PATCH] make card number configurable for users --- .../templates/cashonly/web/usersettings.html | 21 +++++++++++++ .../cashonly/web/usersettings_error.html | 14 +++++++++ cashonly/web/views.py | 31 ++++++++++++++++++- 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 cashonly/web/templates/cashonly/web/usersettings_error.html diff --git a/cashonly/web/templates/cashonly/web/usersettings.html b/cashonly/web/templates/cashonly/web/usersettings.html index 308d603..29f99b1 100644 --- a/cashonly/web/templates/cashonly/web/usersettings.html +++ b/cashonly/web/templates/cashonly/web/usersettings.html @@ -87,6 +87,27 @@ $(document).ready(function() { + + +
+
+
{% trans "Change card number" %}
+
+
+{% csrf_token %} +{{ card_number_form|bootstrap_horizontal:'col-sm-4' }} +
+
+ +
+
+
+
+
+
+ + + diff --git a/cashonly/web/templates/cashonly/web/usersettings_error.html b/cashonly/web/templates/cashonly/web/usersettings_error.html new file mode 100644 index 0000000..8a0c43c --- /dev/null +++ b/cashonly/web/templates/cashonly/web/usersettings_error.html @@ -0,0 +1,14 @@ +{% extends "cashonly/web/base.html" %} +{% load i18n %} + +{% block content %} +

{% trans "Preferences" %}

+ +
+ {% if msg %}

{% endif %}{% blocktrans %}The settings could not be saved!{% endblocktrans %}{% if msg %}

{% endif %} + {% if msg %} +

{{ msg }}

+ {% endif %} +
+{% trans "Back" %} +{% endblock %} diff --git a/cashonly/web/views.py b/cashonly/web/views.py index 7bc8a55..5f54065 100644 --- a/cashonly/web/views.py +++ b/cashonly/web/views.py @@ -8,6 +8,7 @@ from cashonly.core.models import * from cashonly.core.services import AccountManager from django.utils.translation import ugettext as _ from django.utils.translation import ugettext_lazy +from django.db import IntegrityError #import cashonly.core.version import datetime @@ -139,12 +140,21 @@ class UserAvatarForm(forms.Form): required=False) +class UserCardNumberForm(forms.Form): + card_number = forms.CharField(max_length=32, + label=ugettext_lazy('card number'), + required=False) + + @login_required def usersettings(request, submit=None): daily_digest = request.user.account.daily_digest settings_form = UserSettingsForm({'daily_digest': daily_digest}) pin_form = UserPinForm() avatar_form = UserAvatarForm() + card_number_form = UserCardNumberForm({ + 'card_number': request.user.account.card_number + }) if request.method == 'POST': if submit == 'pin': @@ -176,7 +186,26 @@ def usersettings(request, submit=None): request.user.account.avatar = avatar_form.cleaned_data['avatar'] request.user.account.save() return render(request, 'cashonly/web/usersettings_saved.html') + elif submit == 'card_number': + card_number_form = UserCardNumberForm(request.POST) + # TODO validate card number + if card_number_form.is_valid(): + request.user.account.card_number = \ + card_number_form.cleaned_data['card_number'] + try: + request.user.account.save() + except IntegrityError: + return render( + request, + 'cashonly/web/usersettings_error.html', + {'msg': _('Card number is already in use.')} + ) + return render(request, 'cashonly/web/usersettings_saved.html') + else: + pass + # TODO handle error (invalid card number) return render(request, 'cashonly/web/usersettings.html', {'settings_form': settings_form, 'pin_form': pin_form, - 'avatar_form': avatar_form}) + 'avatar_form': avatar_form, + 'card_number_form': card_number_form})