1 | """ |
||
2 | byceps.blueprints.admin.ticketing.category.views |
||
3 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
||
4 | |||
5 | :Copyright: 2006-2021 Jochen Kupperschmidt |
||
6 | :License: Revised BSD (see `LICENSE` file for details) |
||
7 | """ |
||
8 | |||
9 | 1 | from flask import abort, request |
|
10 | 1 | from flask_babel import gettext |
|
11 | |||
12 | 1 | from .....services.party import service as party_service |
|
13 | 1 | from .....services.ticketing import category_service |
|
14 | 1 | from .....util.framework.blueprint import create_blueprint |
|
15 | 1 | from .....util.framework.flash import flash_success |
|
16 | 1 | from .....util.framework.templating import templated |
|
17 | 1 | from .....util.views import permission_required, redirect_to |
|
18 | 1 | ||
19 | from .forms import CreateOrUpdateForm |
||
20 | 1 | ||
21 | |||
22 | blueprint = create_blueprint('ticketing_category_admin', __name__) |
||
23 | 1 | ||
24 | |||
25 | @blueprint.get('/for_party/<party_id>') |
||
26 | 1 | @permission_required('ticketing.administrate') |
|
27 | 1 | @templated |
|
28 | 1 | def index(party_id): |
|
29 | """List ticket categories for that party.""" |
||
30 | party = _get_party_or_404(party_id) |
||
31 | 1 | ||
32 | categories_with_ticket_counts = list( |
||
33 | 1 | category_service.get_categories_with_ticket_counts_for_party( |
|
34 | party.id |
||
35 | ).items() |
||
36 | ) |
||
37 | |||
38 | return { |
||
39 | 1 | 'party': party, |
|
40 | 'categories_with_ticket_counts': categories_with_ticket_counts, |
||
41 | } |
||
42 | |||
43 | |||
44 | @blueprint.get('/for_party/<party_id>/create') |
||
45 | 1 | @permission_required('ticketing.administrate') |
|
46 | 1 | @templated |
|
47 | 1 | def create_form(party_id, erroneous_form=None): |
|
48 | 1 | """Show form to create a ticket category.""" |
|
49 | party = _get_party_or_404(party_id) |
||
50 | 1 | ||
51 | form = erroneous_form if erroneous_form else CreateOrUpdateForm() |
||
52 | 1 | ||
53 | return { |
||
54 | 1 | 'party': party, |
|
55 | 'form': form, |
||
56 | } |
||
57 | |||
58 | |||
59 | View Code Duplication | @blueprint.post('/for_party/<party_id>') |
|
1 ignored issue
–
show
Duplication
introduced
by
Loading history...
|
|||
60 | 1 | @permission_required('ticketing.administrate') |
|
61 | 1 | def create(party_id): |
|
62 | """Create a ticket category.""" |
||
63 | party = _get_party_or_404(party_id) |
||
64 | |||
65 | form = CreateOrUpdateForm(request.form) |
||
66 | if not form.validate(): |
||
67 | return create_form(party.id, form) |
||
68 | |||
69 | title = form.title.data.strip() |
||
70 | |||
71 | category = category_service.create_category(party.id, title) |
||
72 | |||
73 | flash_success( |
||
74 | gettext( |
||
75 | 'Ticket category "%(title)s" has been created.', |
||
76 | title=category.title, |
||
77 | ) |
||
78 | ) |
||
79 | |||
80 | return redirect_to('.index', party_id=party.id) |
||
81 | |||
82 | |||
83 | @blueprint.get('/categories/<uuid:category_id>/update') |
||
84 | 1 | @permission_required('ticketing.administrate') |
|
85 | 1 | @templated |
|
86 | 1 | def update_form(category_id, erroneous_form=None): |
|
87 | 1 | """Show form to update the category.""" |
|
88 | category = _get_category_or_404(category_id) |
||
89 | 1 | ||
90 | party = party_service.find_party(category.party_id) |
||
91 | 1 | ||
92 | form = ( |
||
93 | 1 | erroneous_form if erroneous_form else CreateOrUpdateForm(obj=category) |
|
94 | ) |
||
95 | |||
96 | return { |
||
97 | 1 | 'party': party, |
|
98 | 'category': category, |
||
99 | 'form': form, |
||
100 | } |
||
101 | |||
102 | |||
103 | View Code Duplication | @blueprint.post('/categories/<uuid:category_id>') |
|
1 ignored issue
–
show
|
|||
104 | 1 | @permission_required('ticketing.administrate') |
|
105 | 1 | def update(category_id): |
|
106 | """Update the category.""" |
||
107 | category = _get_category_or_404(category_id) |
||
108 | |||
109 | form = CreateOrUpdateForm(request.form) |
||
110 | if not form.validate(): |
||
111 | return update_form(category.id, form) |
||
112 | |||
113 | title = form.title.data.strip() |
||
114 | |||
115 | category = category_service.update_category(category.id, title) |
||
116 | |||
117 | flash_success( |
||
118 | gettext('Category "%(title)s" has been updated.', title=category.title) |
||
119 | ) |
||
120 | |||
121 | return redirect_to('.index', party_id=category.party_id) |
||
122 | |||
123 | |||
124 | def _get_party_or_404(party_id): |
||
125 | 1 | party = party_service.find_party(party_id) |
|
126 | 1 | ||
127 | if party is None: |
||
128 | 1 | abort(404) |
|
129 | |||
130 | return party |
||
131 | 1 | ||
132 | |||
133 | def _get_category_or_404(category_id): |
||
134 | 1 | category = category_service.find_category(category_id) |
|
135 | 1 | ||
136 | if category is None: |
||
137 | 1 | abort(404) |
|
138 | |||
139 | return category |
||
140 |