diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..d09c034
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+static/dist/styles/*.css -diff
+static/dist/scripts/*.js -diff
diff --git a/apps/kassa/migrations/0006_auto_20150829_1811.py b/apps/kassa/migrations/0006_auto_20150829_1811.py
new file mode 100644
index 0000000..1a83743
--- /dev/null
+++ b/apps/kassa/migrations/0006_auto_20150829_1811.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', '0005_auto_20150829_1525'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='kassaevent',
+ name='event',
+ field=models.CharField(max_length=255, choices=[('add_or_renew', 'New or renewed user membership'), ('new_card_membership', 'New card membership (no user yet)'), ('refund', 'Refunded membership'), ('renew_only', 'Renewed user membership'), ('sms_card_notify', 'Sent activation link to phone number'), ('update_card', 'Updated card'), ('membership_trial', 'New membership trial')]),
+ ),
+ ]
diff --git a/apps/kassa/models.py b/apps/kassa/models.py
index f945141..c2cf5c4 100644
--- a/apps/kassa/models.py
+++ b/apps/kassa/models.py
@@ -10,13 +10,15 @@ class KassaEvent(models.Model):
RENEW_ONLY = 'renew_only'
SMS_CARD_NOTIFY = 'sms_card_notify'
UPDATE_CARD = 'update_card'
+ MEMBERSHIP_TRIAL = 'membership_trial'
EVENT_CHOICES = (
- (ADD_OR_RENEW, _('Added or renewed user membership')),
- (NEW_CARD_MEMBERSHIP, _('Added new card membership (no user yet)')),
+ (ADD_OR_RENEW, _('New or renewed user membership')),
+ (NEW_CARD_MEMBERSHIP, _('New card membership (no user yet)')),
(REFUND, _('Refunded membership')),
(RENEW_ONLY, _('Renewed user membership')),
- (SMS_CARD_NOTIFY, _('Notified phone number about activation')),
- (UPDATE_CARD, _('Updated user card number')),
+ (SMS_CARD_NOTIFY, _('Sent activation link to phone number')),
+ (UPDATE_CARD, _('Updated card')),
+ (MEMBERSHIP_TRIAL, _('New membership trial'))
)
event = models.CharField(max_length=255, choices=EVENT_CHOICES)
card_number = models.IntegerField(null=True, blank=True)
diff --git a/apps/kassa/templates/kassa/register.html b/apps/kassa/templates/kassa/register.html
index c3755f5..b951f23 100644
--- a/apps/kassa/templates/kassa/register.html
+++ b/apps/kassa/templates/kassa/register.html
@@ -17,9 +17,13 @@
Registering a card number with a phone number already tied to an existing user, will add the card to that user.
-
+
+ {% if show_trial_membership %}
+
+ {% endif %}
+
- - If an existing user is found, you can renew the membership only (up to 30 days before expiry).
+ - If an existing user with card is found, you can renew the membership only (up to 30 days before expiry).
diff --git a/apps/kassa/utils.py b/apps/kassa/utils.py
index b770d34..4f5e951 100644
--- a/apps/kassa/utils.py
+++ b/apps/kassa/utils.py
@@ -2,6 +2,7 @@
from __future__ import unicode_literals
from django.conf import settings
+import datetime
import json
import phonenumbers
import requests
@@ -35,7 +36,7 @@ def inside_get_card(card_number):
return requests.get(url, params=params)
-def inside_update_card(card_number, user_id, phone_number, action):
+def inside_update_card(card_number, user_id, phone_number, action, membership_trial=None):
url = '{}card.php'.format(settings.INSIDE_API_URL)
payload = {
@@ -44,6 +45,9 @@ def inside_update_card(card_number, user_id, phone_number, action):
'phone_number': phone_number,
'action': action # new_card_membership, update_card, add_or_renew, sms_card_notify
}
+ if membership_trial is not None:
+ payload.update({'membership_trial': membership_trial})
+
return requests.post(
url,
data=json.dumps(payload),
@@ -52,7 +56,7 @@ def inside_update_card(card_number, user_id, phone_number, action):
)
-def inside_update_membership(user_id, purchased=None):
+def inside_update_membership(user_id, purchased=None, membership_trial=None):
url = '{}membership.php'.format(settings.INSIDE_API_URL)
payload = {
'apikey': settings.INSIDE_API_KEY,
@@ -60,6 +64,9 @@ def inside_update_membership(user_id, purchased=None):
'purchased': purchased,
'source': 'kassa'
}
+ if membership_trial is not None:
+ payload.update({'membership_trial': membership_trial})
+
return requests.post(url, data=json.dumps(payload), headers=dict(content_type='application/json'))
@@ -76,3 +83,10 @@ def format_phone_number(number):
return number
return phonenumbers.format_number(p, phonenumbers.PhoneNumberFormat.E164)
+
+
+def is_autumn():
+ today = datetime.date.today()
+ _min = datetime.date(year=today.year, month=8, day=1)
+ _max = datetime.date(year=today.year + 1, month=1, day=1)
+ return _min <= today < _max
diff --git a/apps/kassa/views.py b/apps/kassa/views.py
index b4630a4..c83ddb5 100644
--- a/apps/kassa/views.py
+++ b/apps/kassa/views.py
@@ -15,7 +15,7 @@ import logging
from apps.kassa.forms import AddCardForm, SearchUserForm
from apps.kassa.utils import tekstmelding_new_membership_card, inside_update_card, inside_get_card, \
- inside_update_membership, format_phone_number
+ inside_update_membership, format_phone_number, is_autumn
logger = logging.getLogger(__name__)
@@ -24,7 +24,8 @@ logger = logging.getLogger(__name__)
def register(request):
context = {
'add_card_form': AddCardForm(),
- 'search_user_form': SearchUserForm()
+ 'search_user_form': SearchUserForm(),
+ 'show_trial_membership': is_autumn()
}
return render(request, 'kassa/register.html', context)
@@ -99,12 +100,14 @@ def register_card_and_membership(request):
# TODO: multiple actions (to allow renewal only)
user_id = post_data.get('user_id')
card_number = post_data.get('card_number')
+ membership_trial = post_data.get('membership_trial')
response = inside_update_card(
card_number,
user_id,
post_data.get('phone_number'),
- action
+ action,
+ membership_trial
)
if response.status_code != 200:
return JsonResponse(response.json(), status=response.status_code)
@@ -129,6 +132,8 @@ def register_card_and_membership(request):
event = KassaEvent.NEW_CARD_MEMBERSHIP
if action == 'sms_card_notify':
event = KassaEvent.SMS_CARD_NOTIFY
+ elif event == KassaEvent.NEW_CARD_MEMBERSHIP and membership_trial is not None:
+ event = KassaEvent.MEMBERSHIP_TRIAL
# FIXME: could be async
tekstmelding_new_membership_card(card_number=card['card_number'], phone_number=card['owner_phone_number'])
@@ -140,9 +145,9 @@ def register_card_and_membership(request):
# Add initial or renew membership for existing user
elif action == 'add_or_renew':
- response = inside_update_membership(user_id, post_data.get('purchased'))
+ response = inside_update_membership(user_id, post_data.get('purchased'), membership_trial=membership_trial)
KassaEvent.objects.create(
- event=KassaEvent.ADD_OR_RENEW,
+ event=KassaEvent.ADD_OR_RENEW if membership_trial is None else KassaEvent.MEMBERSHIP_TRIAL,
user_inside_id=user_id
)
diff --git a/static/app/scripts/app.js b/static/app/scripts/app.js
index 0bc3a84..31f5d0c 100644
--- a/static/app/scripts/app.js
+++ b/static/app/scripts/app.js
@@ -142,6 +142,8 @@ function resetCardForm(reset_native) {
selectedUser = null;
_dom.userIdField.val('').trigger('change');
+ _dom.membershipTrialCheckBox.prop('checked', false);
+
pendingSMSMembership = null;
/* Disable submit buttons */
@@ -317,7 +319,8 @@ $(document).ready(function(){
toastWrap: $('.toast-wrap'),
registerResetButton: $('.register-reset-btn'),
searchResetButton: $('.search-reset-btn'),
- membershipSubmitButton: $('#membership-submit-btn')
+ membershipSubmitButton: $('#membership-submit-btn'),
+ membershipTrialCheckBox: $('#id_membership_trial')
};
var lazyCheckPhoneNumber = _.debounce(checkPhoneNumber, 250);
diff --git a/static/dist/scripts/app.js b/static/dist/scripts/app.js
index 0bc3a84..31f5d0c 100644
--- a/static/dist/scripts/app.js
+++ b/static/dist/scripts/app.js
@@ -142,6 +142,8 @@ function resetCardForm(reset_native) {
selectedUser = null;
_dom.userIdField.val('').trigger('change');
+ _dom.membershipTrialCheckBox.prop('checked', false);
+
pendingSMSMembership = null;
/* Disable submit buttons */
@@ -317,7 +319,8 @@ $(document).ready(function(){
toastWrap: $('.toast-wrap'),
registerResetButton: $('.register-reset-btn'),
searchResetButton: $('.search-reset-btn'),
- membershipSubmitButton: $('#membership-submit-btn')
+ membershipSubmitButton: $('#membership-submit-btn'),
+ membershipTrialCheckBox: $('#id_membership_trial')
};
var lazyCheckPhoneNumber = _.debounce(checkPhoneNumber, 250);