2 from flask import request, abort, redirect, url_for, flash, render_template
4 import sqlalchemy as sa
5 import wradmin.model as model
6 import wrpylib.wrmwcache
9 class BerichtController:
11 def _dependent_date_dict(self, date_invalid):
12 now = datetime.datetime.today()
13 if date_invalid is None:
17 'date_no_change': date_invalid,
18 'date_tomorrow': now + datetime.timedelta(1),
19 'date_one_week': now + datetime.timedelta(7),
20 'date_two_weeks': now + datetime.timedelta(14),
21 'date_one_week_more': date_invalid + datetime.timedelta(7),
22 'date_end_of_saison': datetime.datetime(now.year if now.month < 7 else now.year + 1, 7, 1),
26 """Lists all reports"""
27 q = model.meta.Session.query(model.WrReport)
28 q = q.order_by(sa.sql.expression.desc(model.WrReport.id))
29 paginator = paginate.Page(q.all(), page=int(request.args.get('page', 1)),
30 url_maker=lambda page: url_for('bericht_list', page=page),
32 return render_template('bericht_list.html', paginator=paginator)
35 """Displays a report"""
36 q = model.meta.Session.query(model.WrReport)
40 dates = self._dependent_date_dict(wrreport.date_invalid)
41 return render_template('bericht_view.html', wrreport=wrreport, **dates)
43 def change_date_invalid(self, id=None):
44 assert request.method == 'POST'
47 wrreport_q = model.meta.Session.query(model.WrReport)
48 wrreport = wrreport_q.get(id)
51 dates = self._dependent_date_dict(wrreport.date_invalid)
52 date = request.form['date_invalid']
53 if date == 'tomorrow': wrreport.date_invalid = dates['date_tomorrow']
54 elif date == 'one_week': wrreport.date_invalid = dates['date_one_week']
55 elif date == 'two_weeks': wrreport.date_invalid = dates['date_two_weeks']
56 elif date == 'one_week_more': wrreport.date_invalid = dates['date_one_week_more']
57 elif date == 'end_of_saison': wrreport.date_invalid = dates['date_end_of_saison']
58 elif date == 'now': wrreport.date_invalid = dates['date_now']
59 elif date == 'userdefined':
60 date_userdefined = request.form['date_userdefined']
62 date_userdefined = datetime.datetime.strptime(date_userdefined, '%Y-%m-%d %H:%M')
63 except ValueError as e:
65 return redirect(url_for('bericht_view', id=id))
66 wrreport.date_invalid = date_userdefined
67 model.meta.Session.commit()
68 flash('Datum wurde erfolgreich geƤndert')
69 return redirect(url_for('bericht_view', id=id))
71 def update_reportcache(self):
72 """Updates the wrreportcache table."""
73 c = model.meta.Session.connection()
75 wrpylib.wrmwcache.update_wrreportcache(c)
76 model.meta.Session.commit()
77 flash('Die Berichtzusammenfassung-Tabelle wurde erfolgreich aktualisiesrt.', 'info')
78 except wrpylib.wrmwcache.UpdateCacheError as e:
79 flash(str(e), 'error')
80 # Redirect to result page
81 return redirect(url_for('bericht_list'))