Completed
Push — master ( 9c3aa5...9e58f4 )
by Pat
01:04
created

chezbetty.shame_csv()   A

Complexity

Conditions 2

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 2
dl 0
loc 11
rs 9.4285
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
@view_config(route_name='shame_csv', renderer='csv')
99
def shame_csv(request):
100
    users = DBSession.query(User)\
101
                     .filter(User.balance < -5)\
102
                     .order_by(User.balance).all()
103
    header = ['uniqname','balance','name']
104
    rows = [[user.uniqname, user.balance, user.name] for user in users]
105
106
    return {
107
            'header': header,
108
            'rows': rows,
109
            }
110
111
112
@view_config(route_name='paydebt', renderer='templates/public/paydebt.jinja2')
113
def paydebt(request):
114
    uniqname = request.matchdict['uniqname']
115
    user = User.from_uniqname(uniqname, local_only=True)
116
    return {'user': user,
117
            'stripe_pk': request.registry.settings['stripe.publishable_key']}
118
119
120
@view_config(route_name='paydebt_submit',
121
             request_method='POST',
122
             renderer='json')
123
def paydebt_submit(request):
124
    uniqname = request.matchdict['uniqname']
125
    user = User.from_uniqname(uniqname, local_only=True)
126
127
    token = request.POST['stripeToken']
128
    amount = Decimal(request.POST['betty_amount'])
129
    total_cents = int(request.POST['betty_total_cents'])
130
131
    post_stripe_payment(
132
            datalayer,
133
            request,
134
            token,
135
            amount,
136
            total_cents,
137
            user,
138
            user)
139
140
    return {}
141