Completed
Push — main ( d487f1...b7ef7f )
by Jochen
03:15
created

byceps.blueprints.admin.shop.shop.views.view()   A

Complexity

Conditions 1

Size

Total Lines 18
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1.125

Importance

Changes 0
Metric Value
cc 1
eloc 12
nop 1
dl 0
loc 18
ccs 3
cts 6
cp 0.5
crap 1.125
rs 9.8
c 0
b 0
f 0
1
"""
2
byceps.blueprints.admin.shop.shop.views
3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
5
:Copyright: 2006-2020 Jochen Kupperschmidt
6
:License: Modified BSD, see LICENSE for details.
7
"""
8
9 1
from flask import abort, request
10
11 1
from .....services.shop.article import service as article_service
12 1
from .....services.shop.order import service as order_service
13 1
from .....services.shop.order.transfer.models import PaymentState
14 1
from .....services.shop.shop import service as shop_service
15 1
from .....util.framework.blueprint import create_blueprint
16 1
from .....util.framework.flash import flash_success
17 1
from .....util.framework.templating import templated
18 1
from .....util.views import redirect_to
19
20 1
from ....common.authorization.decorators import permission_required
21 1
from ....common.authorization.registry import permission_registry
22
23 1
from .authorization import ShopPermission
24 1
from .forms import CreateForm, UpdateForm
25
26
27 1
blueprint = create_blueprint('shop_shop_admin', __name__)
28
29
30 1
permission_registry.register_enum(ShopPermission)
31
32
33 1
@blueprint.route('/')
34 1
@permission_required(ShopPermission.view)
35 1
@templated
36
def index():
37
    """List all shops."""
38
    shops = shop_service.get_all_shops()
39
40
    return {
41
        'shops': shops,
42
    }
43
44
45 1
@blueprint.route('/for_shop/<shop_id>')
46 1
@permission_required(ShopPermission.view)
47 1
@templated
48
def view(shop_id):
49
    """Show the shop."""
50
    shop = _get_shop_or_404(shop_id)
51
52
    order_counts_by_payment_state = order_service.count_orders_per_payment_state(
53
        shop.id
54
    )
55
56
    return {
57
        'shop': shop,
58
59
        'order_counts_by_payment_state': order_counts_by_payment_state,
60
        'PaymentState': PaymentState,
61
62
        'settings': shop.extra_settings,
63
    }
64
65
66 1
@blueprint.route('/shops/create')
67 1
@permission_required(ShopPermission.create)
68 1
@templated
69 1
def create_form(erroneous_form=None):
70
    """Show form to create a shop."""
71
    form = erroneous_form if erroneous_form else CreateForm()
72
    form.set_email_config_choices()
73
74
    return {
75
        'form': form,
76
    }
77
78
79 1
@blueprint.route('/shops', methods=['POST'])
80 1
@permission_required(ShopPermission.create)
81
def create():
82
    """Create a shop."""
83
    form = CreateForm(request.form)
84
    form.set_email_config_choices()
85
86
    if not form.validate():
87
        return create_form(form)
88
89
    shop_id = form.id.data.strip().lower()
90
    title = form.title.data.strip()
91
    email_config_id = form.email_config_id.data
92
93
    shop = shop_service.create_shop(shop_id, title, email_config_id)
94
95
    flash_success(f'Der Shop "{shop.title}" wurde angelegt.')
96
    return redirect_to('.index')
97
98
99 1
@blueprint.route('/shops/<shop_id>/update')
100 1
@permission_required(ShopPermission.update)
101 1
@templated
102 1
def update_form(shop_id, erroneous_form=None):
103
    """Show form to update a shop."""
104
    shop = _get_shop_or_404(shop_id)
105
106
    form = erroneous_form if erroneous_form else UpdateForm(obj=shop)
107
    form.set_email_config_choices()
108
109
    return {
110
        'shop': shop,
111
        'form': form,
112
    }
113
114
115 1
@blueprint.route('/shops/<shop_id>', methods=['POST'])
116 1
@permission_required(ShopPermission.update)
117
def update(shop_id):
118
    """Update a shop."""
119
    shop = _get_shop_or_404(shop_id)
120
121
    form = UpdateForm(request.form)
122
    form.set_email_config_choices()
123
124
    if not form.validate():
125
        return update_form(shop.id, form)
126
127
    title = form.title.data.strip()
128
    email_config_id = form.email_config_id.data
129
130
    shop = shop_service.update_shop(shop_id, title, email_config_id)
131
132
    flash_success(f'Der Shop "{shop.title}" wurde aktualisiert.')
133
    return redirect_to('.view', shop_id=shop.id)
134
135
136 1
def _get_shop_or_404(shop_id):
137
    shop = shop_service.find_shop(shop_id)
138
139
    if shop is None:
140
        abort(404)
141
142
    return shop
143