175 lines
7.0 KiB
Python
175 lines
7.0 KiB
Python
from flask import Blueprint
|
|
from flask import request
|
|
from flask import redirect, abort
|
|
|
|
from scaffold import web
|
|
from scaffold.core.validate import validate
|
|
from website.pages import header, footer
|
|
from website.data import donate, site_user, badges, members
|
|
|
|
from website.libs.payments import payment
|
|
from website.config.settings import *
|
|
|
|
donate_pages = Blueprint('donate_pages', __name__, template_folder='templates')
|
|
|
|
@donate_pages.route("/donate", methods=['GET'])
|
|
@donate_pages.route("/donate/", methods=['GET'])
|
|
def index():
|
|
web.template.create('Maidstone Hackspace')
|
|
header('Maidstone Hackspace Donations')
|
|
web.page.create('Make a donation')
|
|
|
|
web.paragraph.create(
|
|
"""If you would like to donate to the space please type an amount and use the reference code for what ever your donating for, for example use #lair to donate to getting a space.
|
|
We may run pledges in the future for equipment in which case use the reference for the equipment your pledging towards.""")
|
|
|
|
web.page.section(web.paragraph.render())
|
|
#~ for item in donate.get_pledges({'environment':int(gocardless_environment=='production')}):
|
|
#~ web.paragraph.create(
|
|
#~ """Currently raised £%.2f towards %s target is £%.2f.""" % (
|
|
#~ item.get('total', 0) if item.get('total', 0) else 0.0,
|
|
#~ item.get('name'),
|
|
#~ item.get('target', 0)))
|
|
#~ web.page.section(web.paragraph.render())
|
|
|
|
|
|
web.form_simple.create(title='Donate to Maidstone Hackspace', action='/donate/submit', method='post')
|
|
web.form_simple.append(input_name='provider', input_id="choose_gocardless",label='GoCardless', placeholder='gocardless', values='gocardless', input_type='radio', selected=True)
|
|
web.form_simple.append(input_name='provider', input_id="choose_paypal",label='PayPal', placeholder='', values='paypal', input_type='radio')
|
|
# web.form_simple.append(input_name='provider', input_id="choose_braintree",label='Braintree', placeholder='', values='braintree', input_type='radio')
|
|
web.form_simple.append(input_name='reference', label='Reference', placeholder='#lair', values=['#lair','#t-shirt'], input_type='select')
|
|
web.form_simple.append(input_name='amount', label='Donation Amount', placeholder='20.00', values='20.00', input_type='text')
|
|
web.page.append(web.form_simple.render())
|
|
|
|
web.template.body.append(web.page.set_classes('page col s10 offset-s1').render())
|
|
return web.render()
|
|
|
|
|
|
@donate_pages.route("/donate/populate", methods=['GET'])
|
|
def populate_by_name():
|
|
web.template.create('Maidstone Hackspace')
|
|
header('Maidstone Hackspace Donations')
|
|
|
|
pledge = donate.get_pledge({'name': '#lair'}).get()
|
|
|
|
import gocardless
|
|
gocardless.environment = gocardless_environment
|
|
gocardless.set_details(**gocardless_credentials)
|
|
merchant = gocardless.client.merchant()
|
|
|
|
web.template.body.append('Adding Badges')
|
|
badges.create_badge().execute({'name': 'member'})
|
|
badges.create_badge().execute({'name': 'backer'})
|
|
badges.create_badge().execute({'name': 'teacher'})
|
|
badges.create_badge().execute({'name': 'chairman'})
|
|
badges.create_badge().execute({'name': 'treasurer'})
|
|
badges.create_badge().execute({'name': 'secretary'})
|
|
|
|
web.template.body.append('Populating users')
|
|
user_list = {}
|
|
#make sure we have all users in the system
|
|
#~ users_emails = []
|
|
for user in merchant.users():
|
|
user_list[user.id] = user.email
|
|
#~ users_emails.append(user.email)
|
|
site_user.create_basic_user().execute({
|
|
'email': user.email,
|
|
'first_name': user.first_name,
|
|
'last_name': user.last_name
|
|
})
|
|
|
|
#get the users ids and emails
|
|
#~ users = {}
|
|
#~ for member in members.get_members():
|
|
#~ for key, value in user_list.items():
|
|
#~ if value == member.get('email'):
|
|
#~ user_list[key] = member.get('user_id')
|
|
|
|
badge_lookup = {badge.get('name'):badge.get('id') for badge in badges.fetch_badges()}
|
|
|
|
web.template.body.append('Setting Donation Badges')
|
|
environment = int(gocardless_environment=='production')
|
|
for bill in merchant.bills():
|
|
web.template.body.append(str(bill))
|
|
|
|
matched_user = None
|
|
for user_id, user_email in user_list.items():
|
|
if user_email == user.email:
|
|
matched_user = user_id
|
|
|
|
donate.add_payment().execute({'user_id': matched_user,'pledge_id': pledge.get('id') , 'reference': bill.id, 'amount': bill.amount_minus_fees, 'environment': environment})
|
|
|
|
if matched_user:
|
|
badges.assign_badge().execute({'badge_id': badge_lookup.get('backer'), 'user_id': matched_user})
|
|
|
|
return web.render()
|
|
|
|
|
|
@donate_pages.route("/donate/submit", methods=['POST'])
|
|
def submit_donation():
|
|
provider = payment(
|
|
provider=request.form.get('provider', ''),
|
|
style='payment')
|
|
|
|
# convert donation amount to 2 decimal places, paypal seems to require this else it errors
|
|
donation_amount = '{0:.2f}'.format(float(request.form.get('amount')))
|
|
url = provider.make_donation(
|
|
amount=donation_amount,
|
|
reference=request.form.get('reference', ''),
|
|
redirect_success='%s/donate/success' % app_domain,
|
|
redirect_failure='%s/donate/failure' % app_domain
|
|
)
|
|
|
|
return redirect(url)
|
|
|
|
|
|
@donate_pages.route("/donate/success", methods=['GET'])
|
|
def donation_successfull():
|
|
|
|
provider = payment(
|
|
provider='paypal',
|
|
style='payment')
|
|
|
|
bill = provider.confirm(request.args)
|
|
if bill:
|
|
pledge = donate.get_pledge({'name': bill.get('name')}).get()
|
|
|
|
environment = int(provider.environment=='production')
|
|
donate.add_payment().execute({
|
|
'provider_id': provider.provider_id,
|
|
'pledge_id': pledge.get('id',''),
|
|
'reference': bill.get('reference'),
|
|
'amount': bill.get('amount'),
|
|
'environment': environment})
|
|
|
|
web.page.create('Thanks for your donation')
|
|
web.paragraph.create(
|
|
"""Thanks your payment has been recieved.""")
|
|
else:
|
|
web.page.create('Something went wrong')
|
|
web.paragraph.create(
|
|
"""We could not confirm the payment something may have gone terribly wrong.""")
|
|
|
|
web.template.create('Maidstone Hackspace')
|
|
header('Maidstone Hackspace Donations')
|
|
web.page.create('Thanks for your donation')
|
|
web.paragraph.create(
|
|
"""Thanks your payment has been recieved.""")
|
|
web.page.section(web.paragraph.render())
|
|
web.template.body.append(web.page.render())
|
|
return web.render()
|
|
|
|
|
|
|
|
|
|
@donate_pages.route("/donate/failure", methods=['GET'])
|
|
def donation_failed():
|
|
web.template.create('Maidstone Hackspace')
|
|
header('Maidstone Hackspace Donations')
|
|
web.page.create('Looks like something went wrong.')
|
|
web.paragraph.create(
|
|
"""Sorry looks like something went wrong while trying to take this payment.""")
|
|
web.page.section(web.paragraph.render())
|
|
web.template.body.append(web.page.render())
|
|
return web.render()
|