From 96d52141514e3766e0f01eb669e2ea01871a398f Mon Sep 17 00:00:00 2001 From: Nikolai R Kristiansen Date: Wed, 12 Aug 2015 15:33:22 +0200 Subject: [PATCH] New log event for SMS purchased memberships --- .../migrations/0003_auto_20150812_1530.py | 19 +++++++++++++ apps/kassa/models.py | 2 ++ apps/kassa/utils.py | 2 +- apps/kassa/views.py | 14 ++++++---- static/app/scripts/app.js | 27 ++++++++++++++----- static/dist/scripts/app.js | 27 ++++++++++++++----- 6 files changed, 71 insertions(+), 20 deletions(-) create mode 100644 apps/kassa/migrations/0003_auto_20150812_1530.py diff --git a/apps/kassa/migrations/0003_auto_20150812_1530.py b/apps/kassa/migrations/0003_auto_20150812_1530.py new file mode 100644 index 0000000..17327bb --- /dev/null +++ b/apps/kassa/migrations/0003_auto_20150812_1530.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('kassa', '0002_auto_20150810_1327'), + ] + + operations = [ + migrations.AlterField( + model_name='kassaevent', + name='event', + field=models.CharField(max_length=255, choices=[('new_card_membership', 'Added new card membership (no user yet)'), ('sms_card_notify', 'Notified phone number about activation'), ('update_card', 'Updated user card number'), ('add_or_renew', 'Added or renewed membership user membership')]), + ), + ] diff --git a/apps/kassa/models.py b/apps/kassa/models.py index 5120576..171ed5f 100644 --- a/apps/kassa/models.py +++ b/apps/kassa/models.py @@ -5,10 +5,12 @@ from django.utils.translation import ugettext_lazy as _ class KassaEvent(models.Model): NEW_CARD_MEMBERSHIP = 'new_card_membership' + SMS_CARD_NOTIFY = 'sms_card_notify' UPDATE_CARD = 'update_card' ADD_OR_RENEW = 'add_or_renew' EVENT_CHOICES = ( (NEW_CARD_MEMBERSHIP, _('Added new card membership (no user yet)')), + (SMS_CARD_NOTIFY, _('Notified phone number about activation')), (UPDATE_CARD, _('Updated user card number')), (ADD_OR_RENEW, _('Added or renewed membership user membership')), ) diff --git a/apps/kassa/utils.py b/apps/kassa/utils.py index bffde6c..b770d34 100644 --- a/apps/kassa/utils.py +++ b/apps/kassa/utils.py @@ -42,7 +42,7 @@ def inside_update_card(card_number, user_id, phone_number, action): 'card_number': card_number, 'user_id': user_id, 'phone_number': phone_number, - 'action': action # new_card_membership, update_card, add_or_renew + 'action': action # new_card_membership, update_card, add_or_renew, sms_card_notify } return requests.post( url, diff --git a/apps/kassa/views.py b/apps/kassa/views.py index 46f2c6c..5f940be 100644 --- a/apps/kassa/views.py +++ b/apps/kassa/views.py @@ -95,7 +95,7 @@ def register_card_and_membership(request): return JsonResponse({'error': 'Only method POST supported'}) post_data = json.loads(request.body) - action = post_data.get('action') # new_card_membership, update_card, add_or_renew + action = post_data.get('action') # new_card_membership, update_card, add_or_renew, sms_card_notify # TODO: multiple actions (to allow renewal only) user_id = post_data.get('user_id') card_number = post_data.get('card_number') @@ -121,15 +121,19 @@ def register_card_and_membership(request): KassaEvent.objects.create(**event_data) - # card_response = response.json() + card_update_response = response.json() # Send activation notification (link) to user by SMS - if action == 'new_card_membership': - card = response.json()['card'] + if action == 'new_card_membership' or action == 'sms_card_notify': + card = card_update_response['card'] + event = KassaEvent.NEW_CARD_MEMBERSHIP + if action == 'sms_card_notify': + event = KassaEvent.SMS_CARD_NOTIFY + # FIXME: could be async tekstmelding_new_membership_card(card_number=card['card_number'], phone_number=card['owner_phone_number']) KassaEvent.objects.create( - event=KassaEvent.NEW_CARD_MEMBERSHIP, + event=event, card_number=card['card_number'], user_phone_number=card['owner_phone_number'] ) diff --git a/static/app/scripts/app.js b/static/app/scripts/app.js index 0510097..203e624 100644 --- a/static/app/scripts/app.js +++ b/static/app/scripts/app.js @@ -138,6 +138,8 @@ function resetCardForm(reset_native) { selectedUser = null; _dom.userIdField.val('').trigger('change'); + pendingSMSMembership = null; + /* Disable submit button */ _dom.registerSubmitButton.prop('disabled', true); } @@ -206,6 +208,7 @@ function getFormData(formElement) { var _dom; var users; var selectedUser; +var pendingSMSMembership; var cardForm = { fields: { cardNumber: false, @@ -255,6 +258,7 @@ $(document).ready(function(){ set_selected_user(null, true); set_field_state(_dom.phoneNumberField, 'error', data.error); cardForm.fields.phoneNumber = false; + pendingSMSMembership = null; update_submit_button(); return; } @@ -264,6 +268,7 @@ $(document).ready(function(){ var msg = 'Phone number is already tied to card '+ card.card_number + ' and is valid until '+ card.expires +'.'; set_field_state(_dom.phoneNumberField, 'error', msg); cardForm.fields.phoneNumber = false; + pendingSMSMembership = null; update_submit_button(); return; } @@ -277,12 +282,14 @@ $(document).ready(function(){ /* Existing user */ _user = inside.users[0]; _success_msg = 'Phone number belongs to existing user.'; + pendingSMSMembership = null; } else if(tekstmelding.result !== null) { /* Pending SMS membership (not activated yet) */ _success_msg = 'Phone number has valid membership (paid via SMS). OK to give out card.'; - // TODO store this in form and use in confirmation message. + pendingSMSMembership = tekstmelding.result; } else { /* Valid phone number with no existing user, card membership or pending SMS membership */ + pendingSMSMembership = null; } set_field_state(_dom.phoneNumberField, 'success', _success_msg); @@ -400,9 +407,11 @@ $(document).ready(function(){ /* Register type */ // FIXME: get from form - // action: 'new_card_membership', 'update_card', 'add_or_renew' - if(selectedUser === null) { + // action: 'new_card_membership', 'update_card', 'add_or_renew', 'sms_card_notify' + if(selectedUser === null && pendingSMSMembership === null) { payload.action = 'new_card_membership'; + } else if(selectedUser === null && pendingSMSMembership !== null) { + payload.action = 'sms_card_notify'; } else { if(selectedUser.is_member === '1') { payload.action = 'update_card'; @@ -418,15 +427,19 @@ $(document).ready(function(){ type: 'post', headers: {'X-CSRFToken': getCookie('csrftoken')} }).success(function(data){ + var phone_number; var success_message = 'New card registered ' + payload.card_number; if(payload.action === 'add_or_renew') { var full_name = data.user[0].firstname + ' ' + data.user[0].lastname; - success_message = 'New membership and card number '+ payload.card_number + ' registered to ' + full_name; + success_message = 'New membership and card number '+ payload.card_number + ' registered to ' + full_name + ' '; } else if(payload.action ==='new_card_membership') { - var phone_number = data.card.owner_phone_number; - // TODO Is membership charged by kassa-user or by SMS? - success_message = 'New card registered to ' + format_phone_number(phone_number) + '. Activation SMS sent '; + phone_number = data.card.owner_phone_number; + success_message = 'New membership and card registered to ' + format_phone_number(phone_number) + '. Activation SMS sent '; + } + else if(payload.action === 'sms_card_notify') { + phone_number = data.card.owner_phone_number; + success_message = 'New card registered to ' + format_phone_number(phone_number) + '. Membership already paid by SMS ('+ pendingSMSMembership.purchase_date +'). Activation SMS sent '; } set_toast(success_message + ' :-)', 'success'); resetCardForm(true); diff --git a/static/dist/scripts/app.js b/static/dist/scripts/app.js index 0510097..203e624 100644 --- a/static/dist/scripts/app.js +++ b/static/dist/scripts/app.js @@ -138,6 +138,8 @@ function resetCardForm(reset_native) { selectedUser = null; _dom.userIdField.val('').trigger('change'); + pendingSMSMembership = null; + /* Disable submit button */ _dom.registerSubmitButton.prop('disabled', true); } @@ -206,6 +208,7 @@ function getFormData(formElement) { var _dom; var users; var selectedUser; +var pendingSMSMembership; var cardForm = { fields: { cardNumber: false, @@ -255,6 +258,7 @@ $(document).ready(function(){ set_selected_user(null, true); set_field_state(_dom.phoneNumberField, 'error', data.error); cardForm.fields.phoneNumber = false; + pendingSMSMembership = null; update_submit_button(); return; } @@ -264,6 +268,7 @@ $(document).ready(function(){ var msg = 'Phone number is already tied to card '+ card.card_number + ' and is valid until '+ card.expires +'.'; set_field_state(_dom.phoneNumberField, 'error', msg); cardForm.fields.phoneNumber = false; + pendingSMSMembership = null; update_submit_button(); return; } @@ -277,12 +282,14 @@ $(document).ready(function(){ /* Existing user */ _user = inside.users[0]; _success_msg = 'Phone number belongs to existing user.'; + pendingSMSMembership = null; } else if(tekstmelding.result !== null) { /* Pending SMS membership (not activated yet) */ _success_msg = 'Phone number has valid membership (paid via SMS). OK to give out card.'; - // TODO store this in form and use in confirmation message. + pendingSMSMembership = tekstmelding.result; } else { /* Valid phone number with no existing user, card membership or pending SMS membership */ + pendingSMSMembership = null; } set_field_state(_dom.phoneNumberField, 'success', _success_msg); @@ -400,9 +407,11 @@ $(document).ready(function(){ /* Register type */ // FIXME: get from form - // action: 'new_card_membership', 'update_card', 'add_or_renew' - if(selectedUser === null) { + // action: 'new_card_membership', 'update_card', 'add_or_renew', 'sms_card_notify' + if(selectedUser === null && pendingSMSMembership === null) { payload.action = 'new_card_membership'; + } else if(selectedUser === null && pendingSMSMembership !== null) { + payload.action = 'sms_card_notify'; } else { if(selectedUser.is_member === '1') { payload.action = 'update_card'; @@ -418,15 +427,19 @@ $(document).ready(function(){ type: 'post', headers: {'X-CSRFToken': getCookie('csrftoken')} }).success(function(data){ + var phone_number; var success_message = 'New card registered ' + payload.card_number; if(payload.action === 'add_or_renew') { var full_name = data.user[0].firstname + ' ' + data.user[0].lastname; - success_message = 'New membership and card number '+ payload.card_number + ' registered to ' + full_name; + success_message = 'New membership and card number '+ payload.card_number + ' registered to ' + full_name + ' '; } else if(payload.action ==='new_card_membership') { - var phone_number = data.card.owner_phone_number; - // TODO Is membership charged by kassa-user or by SMS? - success_message = 'New card registered to ' + format_phone_number(phone_number) + '. Activation SMS sent '; + phone_number = data.card.owner_phone_number; + success_message = 'New membership and card registered to ' + format_phone_number(phone_number) + '. Activation SMS sent '; + } + else if(payload.action === 'sms_card_notify') { + phone_number = data.card.owner_phone_number; + success_message = 'New card registered to ' + format_phone_number(phone_number) + '. Membership already paid by SMS ('+ pendingSMSMembership.purchase_date +'). Activation SMS sent '; } set_toast(success_message + ' :-)', 'success'); resetCardForm(true);