From 1444a52a11680ea2af16f2c2381510f95d33c037 Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Mon, 22 Aug 2022 22:15:03 +0000 Subject: [PATCH] Add Protocoin to Paymaster --- apiserver/apiserver/api/models.py | 2 +- apiserver/apiserver/api/utils_paypal.py | 22 +++++++++++++++------ webclient/src/Paymaster.js | 26 +++++++++++++++++++++++++ webclient/src/Transactions.js | 4 ++-- 4 files changed, 45 insertions(+), 9 deletions(-) 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) {
Paymaster

Use these buttons to send money to Protospace.

+
Protocoin
+

Protocoin is used to buy things at Protospace's vending machines. Current balance: ₱ {user.member.protocoin}

+ + + + Buy {buyProtocoin} Protocoin: + +
+ setBuyProtocoin(v.value)} + /> +
+ + +
+
+
Snacks, Pop, Coffee
diff --git a/webclient/src/Transactions.js b/webclient/src/Transactions.js index 7894edf..289f374 100644 --- a/webclient/src/Transactions.js +++ b/webclient/src/Transactions.js @@ -281,7 +281,7 @@ export function TransactionList(props) { Date {!noMember && Member} Amount - Account + Method {!noCategory && Category} Memo @@ -371,7 +371,7 @@ class TransactionTable extends React.Component { {transaction.category} - Account: + Method: {transaction.account_type} {/*