]> ToastFreeware Gitweb - philipp/winterrodeln/wradmin.git/blob - wradmin/controllers/bericht.py
bericht_view.html now uses jinja2.
[philipp/winterrodeln/wradmin.git] / wradmin / controllers / bericht.py
1 import datetime
2 from flask import request, abort, redirect, url_for, flash, render_template
3 import paginate
4 import sqlalchemy as sa
5 import wradmin.model as model
6
7
8 class BerichtController:
9
10     def _dependent_date_dict(self, date_invalid):
11         now = datetime.datetime.today()
12         if date_invalid is None:
13             date_invalid = now
14         return {
15             'date_now': now,
16             'date_no_change': date_invalid,
17             'date_tomorrow': now + datetime.timedelta(1),
18             'date_one_week': now + datetime.timedelta(7),
19             'date_two_weeks': now + datetime.timedelta(14),
20             'date_one_week_more': date_invalid + datetime.timedelta(7),
21             'date_end_of_saison': datetime.datetime(now.year if now.month < 7 else now.year + 1, 7, 1),
22         }
23
24     def list(self):
25         """Lists all reports"""
26         q = model.meta.Session.query(model.WrReport)
27         q = q.order_by(sa.sql.expression.desc(model.WrReport.id))
28         paginator = paginate.Page(q.all(), page=int(request.args.get('page', 1)),
29                                   url_maker=lambda page: url_for('bericht_list', page=page),
30                                   items_per_page=25)
31         return render_template('bericht_list.html', paginator=paginator)
32
33     def view(self, id):
34         """Displays a report"""
35         q = model.meta.Session.query(model.WrReport)
36         wrreport = q.get(id)
37         if wrreport is None:
38             abort(404)
39         dates = self._dependent_date_dict(wrreport.date_invalid)
40         return render_template('bericht_view.html', wrreport=wrreport, **dates)
41
42     def change_date_invalid(self, id=None):
43         assert request.method == 'POST'
44         if id is None:
45             abort(404)
46         wrreport_q = model.meta.Session.query(model.WrReport)
47         wrreport = wrreport_q.get(id)
48         if wrreport is None:
49             abort(404)
50         dates = self._dependent_date_dict(wrreport.date_invalid)
51         date = request.form['date_invalid']
52         if   date == 'tomorrow':      wrreport.date_invalid = dates['date_tomorrow']
53         elif date == 'one_week':      wrreport.date_invalid = dates['date_one_week']
54         elif date == 'two_weeks':     wrreport.date_invalid = dates['date_two_weeks']
55         elif date == 'one_week_more': wrreport.date_invalid = dates['date_one_week_more']
56         elif date == 'end_of_saison': wrreport.date_invalid = dates['date_end_of_saison']
57         elif date == 'now':           wrreport.date_invalid = dates['date_now']
58         elif date == 'userdefined':
59             date_userdefined = request.form['date_userdefined']
60             try:
61                 date_userdefined = datetime.datetime.strptime(date_userdefined, '%Y-%m-%d %H:%M')
62             except ValueError as e:
63                 flash(str(e))
64                 return redirect(url_for('bericht_view', id=id))
65             wrreport.date_invalid = date_userdefined
66         model.meta.Session.commit()
67         flash('Datum wurde erfolgreich geƤndert')
68         return redirect(url_for('bericht_view', id=id))