Logic for membership renewal WIP

This commit is contained in:
nikolark committed 2015-08-04 09:38:19 +02:00
1 parent 6a65446bfa
commit a40d714a2f
5 files changed
+84 -66

No files matched your search

+3 -3
View File
@@ -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'),
]
+40 -1
View File
@@ -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'))
+33 -52
View File
@@ -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)
+4 -5
View File
@@ -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',
+4 -5
View File
@@ -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',