]> ToastFreeware Gitweb - philipp/winterrodeln/wradmin.git/blob - wradmin/controllers/bericht.py
rodelbahn_list.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
3 import paginate
4 import sqlalchemy as sa
5 import wradmin.model as model
6 from wradmin.genshi import render_genshi_template, TemplateContext
7
8
9 class BerichtController:
10
11     def _add_dates_to_c(self, c, date_invalid):
12         now = datetime.datetime.today()
13         if date_invalid is None: date_invalid = now
14         c.date_now = now
15         c.date_no_change = date_invalid
16         c.date_tomorrow = now + datetime.timedelta(1)
17         c.date_one_week = now + datetime.timedelta(7)
18         c.date_two_weeks = now + datetime.timedelta(14)
19         c.date_one_week_more = date_invalid + datetime.timedelta(7)
20         c.date_end_of_saison = datetime.datetime(now.year if now.month < 7 else now.year + 1, 7, 1)
21
22     def list(self):
23         """Lists all reports"""
24         q = model.meta.Session.query(model.WrReport)
25         q = q.order_by(sa.sql.expression.desc(model.WrReport.id))
26         c = TemplateContext()
27         c.paginator = paginate.Page(q.all(), page=int(request.args.get('page', 1)),
28                                     url_maker=lambda page: url_for('bericht_list', page=page),
29                                     items_per_page=25)
30         return render_genshi_template('bericht_list.html', c=c)
31
32     def view(self, id):
33         """Displays a report"""
34         q = model.meta.Session.query(model.WrReport)
35         c = TemplateContext()
36         c.wrreport =  q.get(id)
37         if c.wrreport is None:
38             abort(404)
39         self._add_dates_to_c(c, c.wrreport.date_invalid)
40         return render_genshi_template('bericht_view.html', c=c)
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         c = TemplateContext()
51         self._add_dates_to_c(c, wrreport.date_invalid)
52         date = request.form['date_invalid']
53         if   date == 'tomorrow':      wrreport.date_invalid = c.date_tomorrow
54         elif date == 'one_week':      wrreport.date_invalid = c.date_one_week
55         elif date == 'two_weeks':     wrreport.date_invalid = c.date_two_weeks
56         elif date == 'one_week_more': wrreport.date_invalid = c.date_one_week_more
57         elif date == 'end_of_saison': wrreport.date_invalid = c.date_end_of_saison
58         elif date == 'now':           wrreport.date_invalid = c.date_now
59         elif date == 'userdefined':
60             date_userdefined = request.form['date_userdefined']
61             try:
62                 date_userdefined = datetime.datetime.strptime(date_userdefined, '%Y-%m-%d %H:%M')
63             except ValueError as e:
64                 flash(str(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))