diff --git a/apiserver/apiserver/api/models.py b/apiserver/apiserver/api/models.py
index 4398bad..e8bf57c 100644
--- a/apiserver/apiserver/api/models.py
+++ b/apiserver/apiserver/api/models.py
@@ -78,7 +78,7 @@ class Transaction(models.Model):
paypal_txn_id = models.CharField(max_length=17, blank=True, null=True, unique=True)
paypal_txn_type = models.CharField(max_length=64, blank=True, null=True)
paypal_payer_id = models.CharField(max_length=13, blank=True, null=True)
- protocoin = models.DecimalField(max_digits=7, decimal_places=2)
+ protocoin = models.DecimalField(max_digits=7, decimal_places=2, default=0)
report_type = models.TextField(blank=True, null=True)
report_memo = models.TextField(blank=True, null=True)
diff --git a/apiserver/apiserver/api/utils_paypal.py b/apiserver/apiserver/api/utils_paypal.py
index 4010328..a2d0af8 100644
--- a/apiserver/apiserver/api/utils_paypal.py
+++ b/apiserver/apiserver/api/utils_paypal.py
@@ -243,23 +243,33 @@ def check_training(data, training_id, amount):
logger.info('IPN - Amount valid for training cost, id: ' + str(training.id))
return create_member_training_tx(data, member, training)
-def create_category_tx(data, member, custom_json):
+def create_category_tx(data, member, custom_json, amount):
transactions = models.Transaction.objects
user = getattr(member, 'user', None)
+ category = custom_json['category']
+
+ if category == 'Exchange':
+ protocoin = amount
+ note = '{} Protocoin Purchase'.format(amount)
+ else:
+ protocoin = 0
+ note = custom_json.get('memo', 'none')
+
memo = '{} {} - {}, email: {}, note: {}'.format(
data.get('first_name', 'unknown'),
data.get('last_name', 'unknown'),
- custom_json['category'],
+ category,
data.get('payer_email', 'unknown'),
- custom_json.get('memo', 'none'),
+ note,
)
return transactions.create(
**build_tx(data),
- category=custom_json['category'],
+ category=category,
memo=memo,
user=user,
+ protocoin=protocoin,
)
@@ -354,10 +364,10 @@ def process_paypal_ipn(data):
defaults=dict(user=user),
)
- if custom_json.get('category', False) in ['Snacks', 'OnAcct', 'Donation', 'Consumables', 'Purchases']:
+ if custom_json.get('category', False) in ['Snacks', 'OnAcct', 'Donation', 'Consumables', 'Purchases', 'Exchange']:
logger.info('IPN - Category matched')
update_ipn(ipn, 'Accepted, category')
- return create_category_tx(data, member, custom_json)
+ return create_category_tx(data, member, custom_json, amount)
monthly_fees = member.monthly_fees
diff --git a/webclient/src/Paymaster.js b/webclient/src/Paymaster.js
index 8b4c80b..b1e2b8b 100644
--- a/webclient/src/Paymaster.js
+++ b/webclient/src/Paymaster.js
@@ -9,6 +9,7 @@ export function Paymaster(props) {
const [pop, setPop] = useState('20.00');
const [locker, setLocker] = useState('5.00');
const [consumables, setConsumables] = useState('20.00');
+ const [buyProtocoin, setBuyProtocoin] = useState('10.00');
const [consumablesMemo, setConsumablesMemo] = useState('');
const [donate, setDonate] = useState('20.00');
const [memo, setMemo] = useState('');
@@ -20,6 +21,31 @@ export function Paymaster(props) {
Use these buttons to send money to Protospace.
+Protocoin is used to buy things at Protospace's vending machines. Current balance: ₱ {user.member.protocoin}
+ +