changed PaymentManager.cancel to PaymentManager.cancel_transaction and added PaymentManager.cancel_campaign to parallel other methods in PaymentManager
morphing the campaign_admin view towards being able to push all the campaigns through the various statespull/1/head
parent
1872615f2a
commit
17d4acceab
|
@ -12,6 +12,10 @@
|
|||
|
||||
<h2>Campaign Admin</h2>
|
||||
|
||||
{% if command_status %}
|
||||
<p style="font-weight:bold; color:red">{{command_status}}</p>
|
||||
{% endif %}
|
||||
|
||||
<form method="post" action="#">
|
||||
{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
|
@ -36,6 +40,14 @@
|
|||
<li>{{campaign.id}} | {{campaign.name}} </li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<form method="post" action="#">
|
||||
{% csrf_token %}
|
||||
<input type="submit" name="execute_campaigns" value="Execute Payment to Gluejar" id="submit">
|
||||
</form>
|
||||
<form method="post" action="#">
|
||||
{% csrf_token %}
|
||||
<input type="submit" name="cancel_campaigns" value="Cancel Active Transactions" id="submit">
|
||||
</form>
|
||||
{% else %}
|
||||
<p>No campaigns with active transactions</p>
|
||||
{% endif %}
|
||||
|
@ -48,6 +60,10 @@
|
|||
<li>{{campaign.id}} | {{campaign.name}} </li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<form method="post" action="#">
|
||||
{% csrf_token %}
|
||||
<input type="submit" name="finish_campaigns" value="Pay Rights Holders" id="submit">
|
||||
</form>
|
||||
{% else %}
|
||||
<p>No campaigns with incomplete transactions</p>
|
||||
{% endif %}
|
||||
|
@ -65,4 +81,16 @@
|
|||
{% endif %}
|
||||
|
||||
|
||||
<!-- canceled transactions -->
|
||||
<p style="font-weight:bold">Campaigns with canceled transactions</p>
|
||||
{% if campaigns_with_canceled_transactions %}
|
||||
<ul>
|
||||
{% for campaign in campaigns_with_canceled_transactions %}
|
||||
<li>{{campaign.id}} | {{campaign.name}} </li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<p>No campaigns with canceled transactions</p>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
|
@ -39,7 +39,7 @@ from regluit.frontend.forms import RightsHolderForm, UserClaimForm, LibraryThin
|
|||
from regluit.frontend.forms import ManageCampaignForm, DonateForm, CampaignAdminForm
|
||||
from regluit.payment.manager import PaymentManager
|
||||
from regluit.payment.parameters import TARGET_TYPE_CAMPAIGN, TARGET_TYPE_DONATION
|
||||
from regluit.payment.paypal import Preapproval, IPN_PAY_STATUS_ACTIVE, IPN_PAY_STATUS_INCOMPLETE, IPN_PAY_STATUS_COMPLETED
|
||||
from regluit.payment.paypal import Preapproval, IPN_PAY_STATUS_ACTIVE, IPN_PAY_STATUS_INCOMPLETE, IPN_PAY_STATUS_COMPLETED, IPN_PAY_STATUS_CANCELED
|
||||
from regluit.core import goodreads
|
||||
from tastypie.models import ApiKey
|
||||
from regluit.payment.models import Transaction
|
||||
|
@ -425,39 +425,70 @@ def campaign_admin(request):
|
|||
# first task: run PaymentManager.checkStatus() to update Campaign statuses
|
||||
# does it return data to display?
|
||||
|
||||
|
||||
def campaigns_types():
|
||||
# pull out Campaigns with Transactions that are ACTIVE -- and hence can be executed
|
||||
# Campaign.objects.filter(transaction__status='ACTIVE')
|
||||
|
||||
campaigns_with_active_transactions = models.Campaign.objects.filter(transaction__status=IPN_PAY_STATUS_ACTIVE)
|
||||
|
||||
# pull out Campaigns with Transactions that are INCOMPLETE
|
||||
|
||||
campaigns_with_incomplete_transactions = models.Campaign.objects.filter(transaction__status=IPN_PAY_STATUS_INCOMPLETE)
|
||||
|
||||
# show all Campaigns with Transactions that are COMPLETED
|
||||
|
||||
campaigns_with_completed_transactions = models.Campaign.objects.filter(transaction__status=IPN_PAY_STATUS_COMPLETED)
|
||||
|
||||
# show Campaigns with Transactions that are CANCELED
|
||||
|
||||
campaigns_with_canceled_transactions = models.Campaign.objects.filter(transaction__status=IPN_PAY_STATUS_CANCELED)
|
||||
|
||||
return (campaigns_with_active_transactions, campaigns_with_incomplete_transactions, campaigns_with_completed_transactions,
|
||||
campaigns_with_canceled_transactions)
|
||||
|
||||
form = CampaignAdminForm()
|
||||
pm = PaymentManager()
|
||||
check_status_results = None
|
||||
command_status = None
|
||||
|
||||
if request.method == 'GET':
|
||||
check_status_results = None
|
||||
pass
|
||||
elif request.method == 'POST':
|
||||
try:
|
||||
pm = PaymentManager()
|
||||
check_status_results = pm.checkStatus()
|
||||
except Exception, e:
|
||||
check_status_results = e
|
||||
if 'campaign_checkstatus' in request.POST.keys():
|
||||
# campaign_checkstatus
|
||||
try:
|
||||
check_status_results = pm.checkStatus()
|
||||
command_status = _("PaymentDetails and PreapprovalDetails have been applied")
|
||||
except Exception, e:
|
||||
check_status_results = e
|
||||
elif 'execute_campaigns' in request.POST.keys():
|
||||
campaigns_with_active_transactions = models.Campaign.objects.filter(transaction__status=IPN_PAY_STATUS_ACTIVE)
|
||||
results = [pm.execute_campaign(c) for c in campaigns_with_active_transactions]
|
||||
command_status = str(results)
|
||||
elif 'finish_campaigns' in request.POST.keys():
|
||||
campaigns_with_incomplete_transactions = models.Campaign.objects.filter(transaction__status=IPN_PAY_STATUS_INCOMPLETE)
|
||||
results = [pm.finish_campaign(c) for c in campaigns_with_incomplete_transactions]
|
||||
command_status = str(results)
|
||||
pass
|
||||
elif 'cancel_campaigns' in request.POST.keys():
|
||||
campaigns_with_active_transactions = models.Campaign.objects.filter(transaction__status=IPN_PAY_STATUS_ACTIVE)
|
||||
results = [pm.cancel_campaign(c) for c in campaigns_with_active_transactions]
|
||||
command_status = str(results)
|
||||
|
||||
# second task: pull out Campaigns with Transactions that are ACTIVE -- and hence can be executed
|
||||
# Campaign.objects.filter(transaction__status='ACTIVE')
|
||||
(campaigns_with_active_transactions, campaigns_with_incomplete_transactions, campaigns_with_completed_transactions,
|
||||
campaigns_with_canceled_transactions) = campaigns_types()
|
||||
|
||||
campaigns_with_active_transactions = models.Campaign.objects.filter(transaction__status=IPN_PAY_STATUS_ACTIVE)
|
||||
|
||||
# third task: pull out Campaigns with Transactions that are INCOMPLETE
|
||||
|
||||
campaigns_with_incomplete_transactions = models.Campaign.objects.filter(transaction__status=IPN_PAY_STATUS_INCOMPLETE)
|
||||
|
||||
# 4th task: show all Campaigns with Transactions that are COMPLETED
|
||||
|
||||
campaigns_with_completed_transactions = models.Campaign.objects.filter(transaction__status=IPN_PAY_STATUS_COMPLETED)
|
||||
|
||||
context.update({
|
||||
'form': form,
|
||||
'check_status_results':check_status_results,
|
||||
'campaigns_with_active_transactions': campaigns_with_active_transactions,
|
||||
'campaigns_with_incomplete_transactions': campaigns_with_incomplete_transactions,
|
||||
'campaigns_with_completed_transactions': campaigns_with_completed_transactions
|
||||
'campaigns_with_completed_transactions': campaigns_with_completed_transactions,
|
||||
'campaigns_with_canceled_transactions': campaigns_with_canceled_transactions,
|
||||
'command_status': command_status
|
||||
})
|
||||
|
||||
|
||||
|
||||
return render(request, "campaign_admin.html", context)
|
||||
|
||||
def supporter(request, supporter_username, template_name):
|
||||
|
|
|
@ -359,6 +359,24 @@ class PaymentManager( object ):
|
|||
result = self.finish_transaction(t)
|
||||
|
||||
return transactions
|
||||
|
||||
def cancel_campaign(self, campaign):
|
||||
'''
|
||||
cancel_campaign
|
||||
|
||||
attempts to cancel active preapprovals related to the campaign
|
||||
|
||||
|
||||
return value: returns a list of transactions with the status of each receiver/transaction updated
|
||||
|
||||
'''
|
||||
|
||||
transactions = Transaction.objects.filter(campaign=campaign, status=IPN_PAY_STATUS_ACTIVE)
|
||||
|
||||
for t in transactions:
|
||||
result = self.cancel_transaction(t)
|
||||
|
||||
return transactions
|
||||
|
||||
|
||||
def finish_transaction(self, transaction):
|
||||
|
@ -462,7 +480,7 @@ class PaymentManager( object ):
|
|||
logger.info("execute_transaction Error: " + p.error_string())
|
||||
return False
|
||||
|
||||
def cancel(self, transaction):
|
||||
def cancel_transaction(self, transaction):
|
||||
'''
|
||||
cancel
|
||||
|
||||
|
|
|
@ -130,7 +130,7 @@ def testCancel(request):
|
|||
|
||||
t = Transaction.objects.get(id=int(request.GET['transaction']))
|
||||
p = PaymentManager()
|
||||
if p.cancel(t):
|
||||
if p.cancel_transaction(t):
|
||||
return HttpResponse("Success")
|
||||
else:
|
||||
message = "Error: " + t.error
|
||||
|
|
Loading…
Reference in New Issue