Completed
Push — master ( 1b4b4e...959852 )
by
unknown
58s
created

chezbetty.item_request_new()   A

Complexity

Conditions 4

Size

Total Lines 19

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 4
dl 0
loc 19
rs 9.2
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='item_request_new', request_method='POST')
71
def item_request_new(request):
72
    try:
73
        request_text = request.POST['request']
74
        if len(request_text) < 5:
75
            raise ValueError()
76
77
        datalayer.new_request(None, request.POST['request'])
78
79
        request.session.flash('Request added successfully', 'success')
80
        return HTTPFound(location=request.route_url('index'))
81
82
    except ValueError:
83
        request.session.flash('If you are making a request, it should probably contain some characters.', 'error')
84
        return HTTPFound(location=request.route_url('item_request'))
85
86
    except:
87
        request.session.flash('Error adding request.', 'error')
88
        return HTTPFound(location=request.route_url('index'))
89
90
91
@view_config(route_name='shame', renderer='templates/public/shame.jinja2')
92
def users(request):
93
    users = DBSession.query(User)\
94
                     .filter(User.balance < -5)\
95
                     .order_by(User.balance).all()
96
    return {'users': users}
97
98
99
@view_config(route_name='paydebt', renderer='templates/public/paydebt.jinja2')
100
def paydebt(request):
101
    uniqname = request.matchdict['uniqname']
102
    user = User.from_uniqname(uniqname, local_only=True)
103
    return {'user': user,
104
            'stripe_pk': request.registry.settings['stripe.publishable_key']}
105
106
107
@view_config(route_name='paydebt_submit',
108
             request_method='POST',
109
             renderer='json')
110
def paydebt_submit(request):
111
    uniqname = request.matchdict['uniqname']
112
    user = User.from_uniqname(uniqname, local_only=True)
113
114
    token = request.POST['stripeToken']
115
    amount = float(request.POST['betty_amount'])
116
    total_cents = int(request.POST['betty_total_cents'])
117
118
    post_stripe_payment(
119
            datalayer,
120
            request,
121
            token,
122
            amount,
123
            total_cents,
124
            user,
125
            user)
126
127
    return {}
128