Store PayPal transaction type

This commit is contained in:
Tanner Collin 2022-01-23 01:52:23 +00:00
parent c7358239b1
commit 0a7bb7e963
4 changed files with 38 additions and 1 deletions

View File

@ -77,7 +77,8 @@ class Transaction(models.Model):
category = models.TextField(blank=True, null=True) category = models.TextField(blank=True, null=True)
account_type = models.TextField(blank=True, null=True) account_type = models.TextField(blank=True, null=True)
info_source = models.TextField(blank=True, null=True) info_source = models.TextField(blank=True, null=True)
paypal_txn_id = models.CharField(max_length=17, blank=True, null=True) 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) paypal_payer_id = models.CharField(max_length=13, blank=True, null=True)
report_type = models.TextField(blank=True, null=True) report_type = models.TextField(blank=True, null=True)

View File

@ -63,6 +63,7 @@ class TransactionSerializer(serializers.ModelSerializer):
'user', 'user',
'recorder', 'recorder',
'paypal_txn_id', 'paypal_txn_id',
'paypal_txn_type',
'paypal_payer_id', 'paypal_payer_id',
] ]

View File

@ -122,6 +122,7 @@ def build_tx(data):
payment_method=data.get('payment_type', 'unknown'), payment_method=data.get('payment_type', 'unknown'),
paypal_payer_id=data.get('payer_id', 'unknown'), paypal_payer_id=data.get('payer_id', 'unknown'),
paypal_txn_id=data.get('txn_id', 'unknown'), paypal_txn_id=data.get('txn_id', 'unknown'),
paypal_txn_type=data.get('txn_type', 'unknown'),
reference_number=data.get('txn_id', 'unknown'), reference_number=data.get('txn_id', 'unknown'),
) )

View File

@ -0,0 +1,34 @@
import django, sys, os
os.environ['DJANGO_SETTINGS_MODULE'] = 'apiserver.settings'
django.setup()
from urllib.parse import parse_qs
from apiserver.api import models
ipns = models.IPN.objects.all()
transactions = models.Transaction.objects.filter(paypal_txn_id__isnull=False)
txs = {}
for tx in transactions:
txs[tx.paypal_txn_id] = tx
for ipn in ipns:
data = parse_qs(ipn.data)
if data.get('payment_status', [False])[0] != 'Completed':
continue
txn_id = data['txn_id'][0]
txn_type = data['txn_type'][0]
print('Processing tx id:', txn_id, '| type:', txn_type)
txs[txn_id].paypal_txn_type = txn_type
print('Performing bulk update...')
transactions.bulk_update(txs.values(), ['paypal_txn_type'])
print('Processed', ipns.count(), 'IPNs.')
print('Done.')