Added a PaymentManager.finish_campaign()
Fixed a small bug in which r['status'] is None and being attached as a text node in PaymentManager.checkStatus()pull/1/head
parent
75fceed7c5
commit
c3c0249b42
|
@ -0,0 +1,40 @@
|
|||
from regluit.core import models
|
||||
from regluit.payment.models import Transaction
|
||||
from regluit.payment.manager import PaymentManager
|
||||
from regluit.payment.paypal import IPN_PAY_STATUS_ACTIVE, IPN_PAY_STATUS_INCOMPLETE, IPN_PAY_STATUS_COMPLETED
|
||||
|
||||
pm = PaymentManager()
|
||||
|
||||
def campaign_display():
|
||||
|
||||
campaigns_with_active_transactions = models.Campaign.objects.filter(transaction__status=IPN_PAY_STATUS_ACTIVE)
|
||||
campaigns_with_incomplete_transactions = models.Campaign.objects.filter(transaction__status=IPN_PAY_STATUS_INCOMPLETE)
|
||||
campaigns_with_completed_transactions = models.Campaign.objects.filter(transaction__status=IPN_PAY_STATUS_COMPLETED)
|
||||
|
||||
print "campaigns with active transactions", campaigns_with_active_transactions
|
||||
print "campaigns with incomplete transactions", campaigns_with_incomplete_transactions
|
||||
print "campaigns with completed transactions", campaigns_with_completed_transactions
|
||||
|
||||
def campaigns_active():
|
||||
return models.Campaign.objects.filter(transaction__status=IPN_PAY_STATUS_ACTIVE)
|
||||
|
||||
def campaigns_incomplete():
|
||||
return models.Campaign.objects.filter(transaction__status=IPN_PAY_STATUS_INCOMPLETE)
|
||||
|
||||
def campaigns_completed():
|
||||
return models.Campaign.objects.filter(transaction__status=IPN_PAY_STATUS_COMPLETED)
|
||||
|
||||
def execute_campaigns(clist):
|
||||
return [pm.execute_campaign(c) for c in clist]
|
||||
|
||||
def finish_campaigns(clist):
|
||||
return [pm.finish_campaign(c) for c in clist]
|
||||
|
||||
|
||||
# by the time we've executed a campaign, we should have r.status = 'COMPLETED' for primary but None for secondary
|
||||
# [[[r.status for r in t.receiver_set.all()] for t in c.transaction_set.all()] for c in campaigns_incomplete()]
|
||||
|
||||
# [[[r.status for r in t.receiver_set.all()] for t in c.transaction_set.all()] for c in campaigns_completed()]
|
||||
|
||||
# res = [pm.finish_campaign(c) for c in campaigns_incomplete()]
|
||||
|
|
@ -83,7 +83,8 @@ class PaymentManager( object ):
|
|||
# will not have a status code or txn id code
|
||||
if receiver.status != r['status']:
|
||||
append_element(doc, tran, "receiver_status_ours", receiver.status)
|
||||
append_element(doc, tran, "receiver_status_theirs", r['status'])
|
||||
append_element(doc, tran, "receiver_status_theirs",
|
||||
r['status'] if r['status'] is not None else 'None')
|
||||
receiver.status = r['status']
|
||||
receiver.save()
|
||||
|
||||
|
@ -337,6 +338,28 @@ class PaymentManager( object ):
|
|||
|
||||
return transactions
|
||||
|
||||
def finish_campaign(self, campaign):
|
||||
'''
|
||||
finish_campaign
|
||||
|
||||
attempts to execute all remaining payment to non-primary receivers
|
||||
|
||||
|
||||
return value: returns a list of transactions with the status of each receiver/transaction updated
|
||||
|
||||
'''
|
||||
|
||||
# QUESTION: to figure out which transactions are in a state in which the payment to the primary recipient is done but not to secondary recipient
|
||||
# Consider two possibilities: status=IPN_PAY_STATUS_INCOMPLETE or execution = EXECUTE_TYPE_CHAINED_DELAYED
|
||||
# which one? Let's try the second one
|
||||
# only allow incomplete transactions to go through again, if there is an error, intervention is needed
|
||||
transactions = Transaction.objects.filter(campaign=campaign, execution=EXECUTE_TYPE_CHAINED_DELAYED)
|
||||
|
||||
for t in transactions:
|
||||
result = self.finish_transaction(t)
|
||||
|
||||
return transactions
|
||||
|
||||
|
||||
def finish_transaction(self, transaction):
|
||||
'''
|
||||
|
|
Loading…
Reference in New Issue