]> ToastFreeware Gitweb - philipp/winterrodeln/wradmin.git/blob - wradmin/controllers/bericht.py
33687bdf89906ffd43789be08a70246614b3cf1e
[philipp/winterrodeln/wradmin.git] / wradmin / controllers / bericht.py
1 #from pylons import request, response, session, url, tmpl_context as c
2 #from pylons.controllers.util import abort, redirect
3 import datetime
4 from flask import request, abort, url_for
5 import paginate
6 import sqlalchemy as sa
7
8 import wrpylib.wrmwmarkup
9 import wrpylib.wrmwcache
10 import wrpylib.mwmarkup
11
12 import wradmin.model as model
13 from wradmin.genshi import render_genshi_template, TemplateContext
14
15
16 # class RequireDateIfUserDefined(formencode.validators.FormValidator):
17 #     "requires that date_userdefined is not empty if date_invalid == 'userdefined'"
18 #     def _to_python(self, value_dict, state):
19 #         # if not value_dict.get('date_invalid'): ... # This is _not_ checked because this should be checked elsewhere
20 #         if value_dict.get('date_invalid') == 'userdefined' and not value_dict.get('date_userdefined'):
21 #             value = value_dict.get('date_userdefined')
22 #             raise formencode.Invalid('Es muss ein Wert eingegeben werden', value, state, error_dict={'date_userdefined': formencode.Invalid(self.message('empty', state), value, state)})
23 #         return value_dict
24 #
25 #
26 # class ChangeDateInvalidForm(formencode.Schema):
27 #     allow_extra_fields = True
28 #     filter_extra_fields = True
29 #     date_invalid = formencode.validators.OneOf(['no_change', 'tomorrow', 'one_week', 'two_weeks', 'one_week_more', 'end_of_saison', 'now', 'userdefined'], not_empty=True)
30 #     date_userdefined = wrpylib.wrvalidators.DateTimeNoSec
31 #     chained_validators = [RequireDateIfUserDefined()]
32
33
34 class BerichtController:
35
36     def _add_dates_to_c(self, c, date_invalid):
37         now = datetime.datetime.today()
38         if date_invalid is None: date_invalid = now
39         c.date_now = now
40         c.date_no_change = date_invalid
41         c.date_tomorrow = now + datetime.timedelta(1)
42         c.date_one_week = now + datetime.timedelta(7)
43         c.date_two_weeks = now + datetime.timedelta(14)
44         c.date_one_week_more = date_invalid + datetime.timedelta(7)
45         c.date_end_of_saison = datetime.datetime(now.year if now.month < 7 else now.year + 1, 7, 1)
46
47     def list(self):
48         """Lists all reports"""
49         q = model.meta.Session.query(model.WrReport)
50         q = q.order_by(sa.sql.expression.desc(model.WrReport.id))
51         c = TemplateContext()
52         c.paginator = paginate.Page(q.all(), page=int(request.args.get('page', 1)),
53                                     url_maker=lambda page: url_for('bericht_list', page=page),
54                                     items_per_page=25)
55         return render_genshi_template('bericht_list.html', c=c)
56
57     def view(self, id):
58         """Displays a report"""
59         q = model.meta.Session.query(model.WrReport)
60         c = TemplateContext()
61         c.wrreport =  q.get(id)
62         if c.wrreport is None:
63             abort(404)
64         self._add_dates_to_c(c, c.wrreport.date_invalid)
65         return render_genshi_template('bericht_view.html', c=c)
66
67     #@restrict('POST')
68     #@validate(schema=ChangeDateInvalidForm(), form='view')
69     def change_date_invalid(self, id=None):
70         if id is None: abort(404)
71         wrreport_q = model.meta.Session.query(model.WrReport)
72         wrreport =  wrreport_q.get(id)
73         if wrreport is None: abort(404)
74         self._add_dates_to_c(c, wrreport.date_invalid)
75         date = self.form_result['date_invalid']
76         if   date == 'tomorrow':      wrreport.date_invalid = c.date_tomorrow
77         elif date == 'one_week':      wrreport.date_invalid = c.date_one_week
78         elif date == 'two_weeks':     wrreport.date_invalid = c.date_two_weeks
79         elif date == 'one_week_more': wrreport.date_invalid = c.date_one_week_more
80         elif date == 'end_of_saison': wrreport.date_invalid = c.date_end_of_saison
81         elif date == 'now':           wrreport.date_invalid = c.date_now
82         elif date == 'userdefined':   wrreport.date_invalid = self.form_result['date_userdefined']
83         model.meta.Session.commit()
84         session['flash'] = 'Datum wurde erfolgreich geƤndert'
85         session.save()
86         return redirect(url(controller='bericht', action='view', id=id))