Private
Public Access
1
0

adding transactions download

This commit is contained in:
Sander Roosendaal
2018-12-21 09:46:23 +01:00
parent 98900059f8
commit 73d8d555d1
7 changed files with 208 additions and 13 deletions

View File

@@ -15,6 +15,7 @@ from rowers.tasks import (
handle_send_email_failed_cancel,
)
import pandas as pd
from rowsandall_app.settings import (
BRAINTREE_MERCHANT_ID,BRAINTREE_PUBLIC_KEY,BRAINTREE_PRIVATE_KEY
@@ -314,5 +315,76 @@ def find_subscriptions(rower):
result.append(thedict)
return result
def get_transactions(start_date,end_date):
results = gateway.transaction.search(
braintree.TransactionSearch.created_at.between(
start_date,
end_date,
)
)
amounts = []
countries = []
card_countries = []
names = []
emails = []
dates = []
currencies = []
statuses = []
ids = []
usernames = []
for transaction in results:
try:
r = Rower.objects.filter(
customer_id=transaction.customer['id'],
paymentprocessor='braintree')[0]
countries.append(r.country)
names.append('{f} {l}'.format(
f = r.user.first_name,
l = r.user.last_name,
)
)
emails.append(r.user.email)
ids.append(r.id)
usernames.append(r.user.username)
except KeyError:
countries.append(
transaction.credit_card_details.country_of_issuance)
names.append('{f} {l}'.format(
f = transaction.customer['first_name'],
l = transaction.customer['last_name']
)
)
emails.append(transaction.customer.email)
ids.append(transaction.customer['id'])
usernames.append('unknown')
amounts.append(transaction.amount)
dates.append(transaction.created_at)
currencies.append(transaction.currency_iso_code)
card_countries.append(
transaction.credit_card_details.country_of_issuance)
statuses.append(transaction.status)
df = pd.DataFrame({
'name':names,
'email':emails,
'date':dates,
'amount':amounts,
'currency':currencies,
'country':countries,
'card_country':card_countries,
'status':statuses,
'username':usernames,
'user_id':ids,
}
)
return df

View File

@@ -10,22 +10,27 @@ def planstopaypal():
plan.external_id = None
plan.save()
def initiaterowerplans():
rowers = Rower.objects.filter(paymenttype = 'recurring',paidplan = None)
for r in rowers:
r.paymentprocessor = 'paypal'
r.save()
def setrowerplans():
rowers = Rower.objects.all()
for r in rowers:
if r.rowerplan != 'basic':
paidplans = PaidPlan.objects.filter(
shortname = r.rowerplan,
paymenttype = r.paymenttype,
clubsize = r.clubsize)
paidplans = PaidPlan.objects.filter(
shortname = r.rowerplan,
paymenttype = r.paymenttype,
clubsize = r.clubsize,
paymentprocessor=r.paymentprocessor)
if paidplans:
r.paidplan = paidplans[0]
r.paymentprocessor = 'paypal'
r.save()
else:
print 'Could not set plan for ',r
if paidplans:
r.paidplan = paidplans[0]
r.save()
else:
print 'Could not set plan for ',r
def is_existing_customer(rower):
if rower.country is not None and rower.customer_id is not None and rower.country != '':

View File

@@ -27,8 +27,16 @@
<i class="fas fa-tachometer-alt-slow fa-fw"></i>&nbsp;Manage Workflow
</a>
</li>
{% if user.is_authenticated and user.is_staff %}
<li id="manage-transactions">
<a href="/rowers/me/transactions/">
<i class="fas fa-credit-card fa-fw"></i>&nbsp;Transactions
</a>
</li>
{% endif %}
</ul><!-- cd-accordion-menu -->
{% if user.is_authenticated and user|is_manager %}
<p>&nbsp;</p>
{% if user|team_members %}

View File

@@ -0,0 +1,24 @@
{% extends "newbase.html" %}
{% load staticfiles %}
{% load rowerfilters %}
{% block main %}
<h1>Download Transactions</h1>
<form actions="" method="post">
<table>
{{ dateform.as_table }}
</table>
{% csrf_token %}
<input type="submit" value="Submit">
</form>
{% endblock %}
{% block sideheader %}
<h1>Profile</h1>
{% endblock %}
{% block sidebar %}
{% include 'menu_profile.html' %}
{% endblock %}

View File

@@ -404,6 +404,7 @@ urlpatterns = [
url(r'^me/edit/$',views.rower_edit_view),
url(r'^me/edit/user/(?P<userid>\d+)$',views.rower_edit_view),
url(r'^me/preferences/$',views.rower_prefs_view),
url(r'^me/transactions/$',views.transactions_view),
url(r'^me/preferences/user/(?P<userid>\d+)$',views.rower_prefs_view),
url(r'^me/edit/(.+.*)/$',views.rower_edit_view),
url(r'^me/c2authorize/$',views.rower_c2_authorize),

View File

@@ -141,7 +141,8 @@ from rowsandall_app.settings import (
UNDERARMOUR_CLIENT_SECRET,UNDERARMOUR_CLIENT_KEY,
RUNKEEPER_CLIENT_ID,RUNKEEPER_REDIRECT_URI,RUNKEEPER_CLIENT_SECRET,
TP_CLIENT_ID,TP_REDIRECT_URI,TP_CLIENT_KEY,TP_CLIENT_SECRET,
BRAINTREE_MERCHANT_ID,BRAINTREE_PUBLIC_KEY,BRAINTREE_PRIVATE_KEY
BRAINTREE_MERCHANT_ID,BRAINTREE_PUBLIC_KEY,BRAINTREE_PRIVATE_KEY,
PAYMENT_PROCESSING_ON
)
from rowers.tasks_standalone import addcomment2
@@ -1073,6 +1074,10 @@ def paidplans_view(request):
@login_required()
def billing_view(request):
if not PAYMENT_PROCESSING_ON:
url = reverse('promembership')
return HttpResponseRedirect(url)
r = getrequestrower(request)
if payments.is_existing_customer(r):
@@ -1116,6 +1121,10 @@ def billing_view(request):
@login_required()
def upgrade_view(request):
if not PAYMENT_PROCESSING_ON:
url = reverse('promembership')
return HttpResponseRedirect(url)
r = getrequestrower(request)
if r.subscription_id is None or r.subscription_id == '':
@@ -1154,6 +1163,10 @@ def upgrade_view(request):
@login_required()
def downgrade_view(request):
if not PAYMENT_PROCESSING_ON:
url = reverse('promembership')
return HttpResponseRedirect(url)
r = getrequestrower(request)
if r.subscription_id is None or r.subscription_id == '':
@@ -1202,6 +1215,10 @@ def downgrade_view(request):
@login_required()
def plan_stop_view(request):
if not PAYMENT_PROCESSING_ON:
url = reverse('promembership')
return HttpResponseRedirect(url)
r = getrequestrower(request)
subscriptions = []
@@ -1223,6 +1240,10 @@ def plan_stop_view(request):
@login_required()
def plan_tobasic_view(request,id=0):
if not PAYMENT_PROCESSING_ON:
url = reverse('promembership')
return HttpResponseRedirect(url)
r = getrequestrower(request)
if r.paidplan.paymentprocessor == 'braintree':
@@ -1241,6 +1262,10 @@ def plan_tobasic_view(request,id=0):
@login_required()
def upgrade_confirm_view(request,planid = 0):
if not PAYMENT_PROCESSING_ON:
url = reverse('promembership')
return HttpResponseRedirect(url)
try:
plan = PaidPlan.objects.get(id=planid)
except PaidPlan.DoesNotExist:
@@ -1262,6 +1287,10 @@ def upgrade_confirm_view(request,planid = 0):
@login_required()
def downgrade_confirm_view(request,planid = 0):
if not PAYMENT_PROCESSING_ON:
url = reverse('promembership')
return HttpResponseRedirect(url)
try:
plan = PaidPlan.objects.get(id=planid)
except PaidPlan.DoesNotExist:
@@ -1284,6 +1313,10 @@ def downgrade_confirm_view(request,planid = 0):
@login_required()
def payment_confirm_view(request,planid = 0):
if not PAYMENT_PROCESSING_ON:
url = reverse('promembership')
return HttpResponseRedirect(url)
try:
plan = PaidPlan.objects.get(id=planid)
except PaidPlan.DoesNotExist:
@@ -1306,6 +1339,10 @@ def payment_confirm_view(request,planid = 0):
@login_required()
def checkouts_view(request):
if not PAYMENT_PROCESSING_ON:
url = reverse('promembership')
return HttpResponseRedirect(url)
r = getrequestrower(request)
@@ -1336,6 +1373,10 @@ def checkouts_view(request):
@login_required()
def upgrade_checkouts_view(request):
if not PAYMENT_PROCESSING_ON:
url = reverse('promembership')
return HttpResponseRedirect(url)
r = getrequestrower(request)
@@ -1366,6 +1407,10 @@ def upgrade_checkouts_view(request):
@login_required()
def downgrade_checkouts_view(request):
if not PAYMENT_PROCESSING_ON:
url = reverse('promembership')
return HttpResponseRedirect(url)
r = getrequestrower(request)
@@ -1397,6 +1442,10 @@ def downgrade_checkouts_view(request):
@login_required()
def payment_completed_view(request):
if not PAYMENT_PROCESSING_ON:
url = reverse('promembership')
return HttpResponseRedirect(url)
r = getrequestrower(request)
return render(request,
@@ -1407,6 +1456,10 @@ def payment_completed_view(request):
@login_required()
def downgrade_completed_view(request):
if not PAYMENT_PROCESSING_ON:
url = reverse('promembership')
return HttpResponseRedirect(url)
r = getrequestrower(request)
return render(request,
@@ -1864,6 +1917,33 @@ def plannedsessions_icsemail_view(request,userid=0):
return response
@login_required()
def transactions_view(request):
if not request.user.is_staff:
raise PermissionDenied("Not Allowed")
if request.method == 'POST':
dateform = DateRangeForm(request.POST)
if dateform.is_valid():
startdate = dateform.cleaned_data['startdate']
enddate = dateform.cleaned_data['enddate']
df = braintreestuff.get_transactions(startdate,enddate)
filename="transactions_{s}_{e}.csv".format(s = startdate, e = enddate)
response = HttpResponse(df.to_csv())
response['Content-Disposition'] = 'attachment; filename="%s"' % filename
response['Content-Type'] = 'application/octet-stream'
return response
else:
dateform = DateRangeForm()
return render(request,
'transactions.html',
{
'dateform':dateform
})
@login_required()
def course_kmlemail_view(request,id=0):