]> ToastFreeware Gitweb - philipp/winterrodeln/wradmin.git/blob - wradmin/controllers/bericht.py
Use flask_sqlalchemy to manage the database connection.
[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
6 import wrpylib.wrmwcache
7
8 from wradmin import db
9 from wradmin.model import WrReport
10
11
12 class BerichtController:
13
14     def _dependent_date_dict(self, date_invalid):
15         now = datetime.datetime.today()
16         if date_invalid is None:
17             date_invalid = now
18         return {
19             'date_now': now,
20             'date_no_change': date_invalid,
21             'date_tomorrow': now + datetime.timedelta(1),
22             'date_one_week': now + datetime.timedelta(7),
23             'date_two_weeks': now + datetime.timedelta(14),
24             'date_one_week_more': date_invalid + datetime.timedelta(7),
25             'date_end_of_saison': datetime.datetime(now.year if now.month < 7 else now.year + 1, 7, 1),
26         }
27
28     def list(self):
29         """Lists all reports"""
30         q = db.session.query(WrReport)
31         q = q.order_by(sa.sql.expression.desc(WrReport.id))
32         paginator = paginate.Page(q.all(), page=int(request.args.get('page', 1)),
33                                   url_maker=lambda page: url_for('bericht_list', page=page),
34                                   items_per_page=25)
35         return render_template('bericht_list.html', paginator=paginator)
36
37     def view(self, id):
38         """Displays a report"""
39         q = db.session.query(WrReport)
40         wrreport = q.get(id)
41         if wrreport is None:
42             abort(404)
43         dates = self._dependent_date_dict(wrreport.date_invalid)
44         return render_template('bericht_view.html', wrreport=wrreport, **dates)
45
46     def change_date_invalid(self, id=None):
47         assert request.method == 'POST'
48         if id is None:
49             abort(404)
50         wrreport_q = db.session.query(WrReport)
51         wrreport = wrreport_q.get(id)
52         if wrreport is None:
53             abort(404)
54         dates = self._dependent_date_dict(wrreport.date_invalid)
55         date = request.form['date_invalid']
56         if   date == 'tomorrow':      wrreport.date_invalid = dates['date_tomorrow']
57         elif date == 'one_week':      wrreport.date_invalid = dates['date_one_week']
58         elif date == 'two_weeks':     wrreport.date_invalid = dates['date_two_weeks']
59         elif date == 'one_week_more': wrreport.date_invalid = dates['date_one_week_more']
60         elif date == 'end_of_saison': wrreport.date_invalid = dates['date_end_of_saison']
61         elif date == 'now':           wrreport.date_invalid = dates['date_now']
62         elif date == 'userdefined':
63             date_userdefined = request.form['date_userdefined']
64             try:
65                 date_userdefined = datetime.datetime.strptime(date_userdefined, '%Y-%m-%d %H:%M')
66             except ValueError as e:
67                 flash(str(e))
68                 return redirect(url_for('bericht_view', id=id))
69             wrreport.date_invalid = date_userdefined
70         db.session.commit()
71         flash('Datum wurde erfolgreich geƤndert')
72         return redirect(url_for('bericht_view', id=id))
73
74     def update_reportcache(self):
75         """Updates the wrreportcache table."""
76         c = db.session.connection()
77         try:
78             wrpylib.wrmwcache.update_wrreportcache(c)
79             db.session.commit()
80             flash('Die Berichtzusammenfassung-Tabelle wurde erfolgreich aktualisiesrt.', 'info')
81         except wrpylib.wrmwcache.UpdateCacheError as e:
82             flash(str(e), 'error')
83         # Redirect to result page
84         return redirect(url_for('bericht_list'))