Check if transaction is for valid training first

master
Tanner Collin 4 years ago
parent 47006aa753
commit 52b6896cab
  1. 30
      apiserver/apiserver/api/utils_paypal.py
  2. 1
      apiserver/apiserver/api/views.py

@ -185,7 +185,7 @@ def create_member_training_tx(data, member, training):
user=user,
)
def check_training(data, member, training_id, amount):
def check_training(data, training_id, amount):
trainings = models.Training.objects
if not trainings.filter(id=training_id).exists():
@ -208,10 +208,10 @@ def check_training(data, member, training_id, amount):
if not training.user:
return False
if training.user.member != member:
return False
member = training.user.member
training.attendance_status = 'confirmed'
training.paid_date = datetime.date.today()
training.save()
print('Amount valid for training cost, id:', training.id)
@ -260,6 +260,21 @@ def process_paypal_ipn(data):
update_ipn(ipn, 'Duplicate')
return False
try:
custom_json = json.loads(data['custom'])
except (KeyError, ValueError):
custom_json = False
if custom_json and 'training' in custom_json:
tx = check_training(data, custom_json['training'], amount)
if tx:
print('Training matched, adding hint and returning')
hints.objects.update_or_create(
account=data['payer_id'],
defaults=dict(member_id=tx.member_id),
)
return tx
if not hints.filter(account=data['payer_id']).exists():
print('Unable to associate with member, reporting')
update_ipn(ipn, 'Accepted, Unmatched Member')
@ -279,15 +294,6 @@ def process_paypal_ipn(data):
update_ipn(ipn, 'Accepted, Member Dues')
return create_member_dues_tx(data, member, num_months)
try:
custom_json = json.loads(data['custom'])
except (KeyError, ValueError):
custom_json = False
if custom_json and 'training' in custom_json:
tx = check_training(data, member, custom_json['training'], amount)
if tx: return tx
print('Unable to find a reason for payment, reporting')
update_ipn(ipn, 'Accepted, Unmatched Purchase')
return create_unmatched_purchase_tx(data, member)

@ -196,6 +196,7 @@ class TrainingViewSet(Base, Retrieve, Create, Update):
# TODO: turn these into @actions
# TODO: check if full
# TODO: if already paid, skip to confirmed
def perform_create(self, serializer):
session_id = self.request.data['session']
status = self.request.data['attendance_status']

Loading…
Cancel
Save