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