Completed
Push — master ( 47a02e...98f9f2 )
by
unknown
39:53
created

chezbetty.paydebt_submit()   A

Complexity

Conditions 1

Size

Total Lines 21

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 1
dl 0
loc 21
rs 9.3142
1
from pyramid.events import subscriber
2
from pyramid.events import BeforeRender
3
from pyramid.httpexceptions import HTTPFound
4
from pyramid.renderers import render
5
from pyramid.renderers import render_to_response
6
from pyramid.response import Response
7
from pyramid.view import view_config, forbidden_view_config
8
9
from pyramid.i18n import TranslationStringFactory
10
_ = TranslationStringFactory('betty')
11
12
from sqlalchemy.sql import func
13
from sqlalchemy.exc import DBAPIError
14
from sqlalchemy.orm.exc import NoResultFound
15
16
from .models import *
17
from .models.model import *
18
from .models import user as __user
19
from .models.user import User
20
from .models.item import Item
21
from .models.box import Box
22
from .models.transaction import Transaction, BTCDeposit, PurchaseLineItem
23
from .models.account import Account, VirtualAccount, CashAccount
24
from .models.event import Event
25
from .models.announcement import Announcement
26
from .models.btcdeposit import BtcPendingDeposit
27
from .models.pool import Pool
28
29
from .utility import user_password_reset
30
from .utility import send_email
31
from .utility import post_stripe_payment
32
33
from pyramid.security import Allow, Everyone, remember, forget
34
35
import chezbetty.datalayer as datalayer
36
import transaction
37
38
import traceback
39
40
41
42
@view_config(route_name='about', renderer='templates/public/about.jinja2')
43
def about(request):
44
    return {}
45
46
47
@view_config(route_name='items', renderer='templates/public/items.jinja2')
48
def items(request):
49
    items = DBSession.query(Item)\
50
                     .filter(Item.enabled==True)\
51
                     .filter(Item.in_stock>0)\
52
                     .order_by(Item.name).all()
53
    out_of_stock_items = DBSession.query(Item)\
54
                     .filter(Item.enabled==True)\
55
                     .filter(Item.in_stock==0)\
56
                     .order_by(Item.name).all()
57
    disabled_items = DBSession.query(Item)\
58
                     .filter(Item.enabled==False)\
59
                     .order_by(Item.name).all()
60
    return {'items': items,
61
            'out_of_stock_items': out_of_stock_items,
62
            'disabled_items': disabled_items}
63
64
65
@view_config(route_name='item_request', renderer='templates/public/item_request.jinja2')
66
def item_request(request):
67
    return {}
68
69
70
@view_config(route_name='shame', renderer='templates/public/shame.jinja2')
71
def users(request):
72
    users = DBSession.query(User)\
73
                     .filter(User.balance < -5)\
74
                     .order_by(User.balance).all()
75
    return {'users': users}
76
77
78
@view_config(route_name='paydebt', renderer='templates/public/paydebt.jinja2')
79
def paydebt(request):
80
    uniqname = request.matchdict['uniqname']
81
    user = User.from_uniqname(uniqname, local_only=True)
82
    return {'user': user,
83
            'stripe_pk': request.registry.settings['stripe.publishable_key']}
84
85
86
@view_config(route_name='paydebt_submit',
87
             request_method='POST',
88
             renderer='json')
89
def paydebt_submit(request):
90
    uniqname = request.matchdict['uniqname']
91
    user = User.from_uniqname(uniqname, local_only=True)
92
93
    token = request.POST['stripeToken']
94
    amount = float(request.POST['betty_amount'])
95
    total_cents = int(request.POST['betty_total_cents'])
96
97
    post_stripe_payment(
98
            datalayer,
99
            request,
100
            token,
101
            amount,
102
            total_cents,
103
            user,
104
            user)
105
106
    return {}
107