From a40d714a2fac12e401ad10c0fa401a6b75babe68 Mon Sep 17 00:00:00 2001 From: Nikolai R Kristiansen Date: Tue, 4 Aug 2015 09:38:19 +0200 Subject: [PATCH] Logic for membership renewal WIP --- apps/kassa/urls.py | 6 +-- apps/kassa/utils.py | 41 +++++++++++++++++- apps/kassa/views.py | 85 +++++++++++++++----------------------- static/app/scripts/app.js | 9 ++-- static/dist/scripts/app.js | 9 ++-- 5 files changed, 84 insertions(+), 66 deletions(-) diff --git a/apps/kassa/urls.py b/apps/kassa/urls.py index 2dca2b2..fe015b2 100644 --- a/apps/kassa/urls.py +++ b/apps/kassa/urls.py @@ -1,11 +1,11 @@ from django.conf.urls import url -from apps.kassa.views import register, inside_user_api, inside_card_api, inside_register_api, \ - check_phone_number +from apps.kassa.views import register, inside_user_api, inside_card_api, check_phone_number, \ + register_card_and_membership urlpatterns = [ url(r'^$', register, name='register'), url(r'^inside/user/$', inside_user_api, name='inside-user-api'), url(r'^check-phonenumber/$', check_phone_number, name='check-phone-number'), url(r'^inside/card/$', inside_card_api, name='inside-card-number-api'), - url(r'^inside/register/$', inside_register_api, name='inside-register-api'), + url(r'^register-card-membership/$', register_card_and_membership, name='register-card-and-membership'), ] diff --git a/apps/kassa/utils.py b/apps/kassa/utils.py index b01f6c8..e872b9f 100644 --- a/apps/kassa/utils.py +++ b/apps/kassa/utils.py @@ -6,7 +6,7 @@ import json import requests -def tekstmelding_new_card_no_user(card_number, phone_number): +def tekstmelding_new_membership_card(card_number, phone_number): payload = { 'phone_number': phone_number, 'card_number': card_number, @@ -22,3 +22,42 @@ def tekstmelding_new_card_no_user(card_number, phone_number): ) return response.json() + + +def inside_get_card(card_number): + url = '{}card.php'.format(settings.INSIDE_API_URL) + params = { + 'apikey': settings.INSIDE_API_KEY, + 'card_number': card_number + } + + return requests.get(url, params=params) + + +def inside_update_card(card_number, user_id, phone_number, action): + url = '{}card.php'.format(settings.INSIDE_API_URL) + params = {'apikey': settings.INSIDE_API_KEY} + + payload = { + 'card_number': card_number, + 'user_id': user_id, + 'phone_number': phone_number, + 'action': action # new_card_membership, update_card, add_or_renew + } + return requests.post( + url, + data=json.dumps(payload), + params=params, + headers=dict(content_type='application/json') + ) + + +def inside_update_membership(user_id, purchased=None): + url = '{}membership.php'.format(settings.INSIDE_API_URL) + payload = { + 'apikey': settings.INSIDE_API_KEY, + 'user_id': user_id, + 'purchased': purchased, + 'source': 'card' + } + return requests.post(url, data=json.dumps(payload), headers=dict(content_type='application/json')) diff --git a/apps/kassa/views.py b/apps/kassa/views.py index d232716..a09d1e2 100644 --- a/apps/kassa/views.py +++ b/apps/kassa/views.py @@ -10,7 +10,8 @@ import phonenumbers import requests from apps.kassa.forms import AddCardForm, SearchUserForm -from apps.kassa.utils import tekstmelding_new_card_no_user +from apps.kassa.utils import tekstmelding_new_membership_card, inside_update_card, inside_get_card, \ + inside_update_membership @login_required @@ -75,60 +76,40 @@ def check_phone_number(request): @login_required def inside_card_api(request): - url = '{}card.php'.format(settings.INSIDE_API_URL) - params = { - 'apikey': settings.INSIDE_API_KEY - } - - if request.method == 'POST': - # TODO: Move this to own method in utils.py, called by register_card_and_membership - post_data = json.loads(request.body) - payload = { - 'card_number': post_data.get('card_number'), - 'user_id': post_data.get('user_id'), - 'phone_number': post_data.get('phone_number'), - 'action': post_data.get('action') # new_card_no_user, update_card, renewal - } - response = requests.post( - url, - data=json.dumps(payload), - params=params, - headers=dict(content_type='application/json') - ) - # Send activation notification (link) to user by SMS - # FIXME: could be async - if response.status_code == 200 and payload['action'] == 'new_card_no_user': - card = response.json()['card'] - # FIXME: ignores errors - tekstmelding_new_card_no_user(card_number=card['card_number'], phone_number=card['owner_phone_number']) - else: - params.update({ - 'card_number': request.GET.get('card_number', '') - }) - response = requests.get(url, params=params) - - return JsonResponse(response.json(), status=response.status_code) - - -@login_required -def inside_register_api(request): - # TODO: move this to own method in utils.py - post_data = json.loads(request.body) - payload = { - 'apikey': settings.INSIDE_API_KEY, - 'phone': post_data.get('phone_number'), - # 'user_id': post_data.get('user_id'), - 'type': post_data.get('type'), # 'renewal' or 'new' - 'card_number': post_data.get('card_number'), - 'source': 'physical' - } - url = '{}register.php'.format(settings.INSIDE_API_URL) - response = requests.post(url, data=json.dumps(payload), headers=dict(content_type='application/json')) + if request.method != 'GET': + return JsonResponse({'error': 'Only method GET supported'}) + response = inside_get_card(request.GET.get('card_number')) return JsonResponse(response.json(), status=response.status_code) @login_required() def register_card_and_membership(request): - # TODO: Call membership and card apis above, depending of what need to be done - pass + if request.method != 'POST': + 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 + user_id = post_data.get('user_id'), + + response = inside_update_card( + post_data.get('card_number'), + user_id, + post_data.get('phone_number'), + action + ) + if response.status_code != 200: + return JsonResponse(response.json(), status=response.status_code) + + # Send activation notification (link) to user by SMS + if action == 'new_card_membership': + card = response.json()['card'] + # FIXME: could be async + tekstmelding_new_membership_card(card_number=card['card_number'], phone_number=card['owner_phone_number']) + + # Add initial or renew membership + elif action == 'add_or_renew': + response = inside_update_membership(user_id, post_data.get('purchased')) + + return JsonResponse(response.json(), status=response.status_code) + diff --git a/static/app/scripts/app.js b/static/app/scripts/app.js index ebaa3e1..19a4fa9 100644 --- a/static/app/scripts/app.js +++ b/static/app/scripts/app.js @@ -244,7 +244,7 @@ $(document).ready(function(){ insideUserApi: '/inside/user/', checkPhoneNumber: '/check-phonenumber/', insideCard: '/inside/card/', - insideRegister: '/inside/register/' + registerCardAndMembership: '/register-card-membership/' }; /* Add filter |phoneNumber */ nunjucksEnv.addFilter('phoneNumber', format_phone_number); @@ -392,14 +392,13 @@ $(document).ready(function(){ set_toast('Either phone number or card number is not valid', 'error'); return; } - var url = urls.insideCard; var payload = getFormData(_dom.registerCardForm); /* Register type */ // FIXME: get from form - // action: 'new_card_no_user', 'update_card', 'add_or_renew' + // action: 'new_card_membership', 'update_card', 'add_or_renew' if(selectedUser === null) { - payload.action = 'new_card_no_user'; + payload.action = 'new_card_membership'; } else { if(selectedUser.is_member === '1') { payload.action = 'update_card'; @@ -408,7 +407,7 @@ $(document).ready(function(){ } } - $.ajax(url, { + $.ajax(urls.registerCardAndMembership, { data: JSON.stringify(payload), contentType: 'application/json', dataType: 'json', diff --git a/static/dist/scripts/app.js b/static/dist/scripts/app.js index ebaa3e1..19a4fa9 100644 --- a/static/dist/scripts/app.js +++ b/static/dist/scripts/app.js @@ -244,7 +244,7 @@ $(document).ready(function(){ insideUserApi: '/inside/user/', checkPhoneNumber: '/check-phonenumber/', insideCard: '/inside/card/', - insideRegister: '/inside/register/' + registerCardAndMembership: '/register-card-membership/' }; /* Add filter |phoneNumber */ nunjucksEnv.addFilter('phoneNumber', format_phone_number); @@ -392,14 +392,13 @@ $(document).ready(function(){ set_toast('Either phone number or card number is not valid', 'error'); return; } - var url = urls.insideCard; var payload = getFormData(_dom.registerCardForm); /* Register type */ // FIXME: get from form - // action: 'new_card_no_user', 'update_card', 'add_or_renew' + // action: 'new_card_membership', 'update_card', 'add_or_renew' if(selectedUser === null) { - payload.action = 'new_card_no_user'; + payload.action = 'new_card_membership'; } else { if(selectedUser.is_member === '1') { payload.action = 'update_card'; @@ -408,7 +407,7 @@ $(document).ready(function(){ } } - $.ajax(url, { + $.ajax(urls.registerCardAndMembership, { data: JSON.stringify(payload), contentType: 'application/json', dataType: 'json',