1 # -*- coding: iso-8859-15 -*-
4 from pylons import request, response, session, url, tmpl_context as c
5 from pylons.controllers.util import abort, redirect
6 import webhelpers.paginate as paginate
8 from wradmin.lib.base import BaseController, render
9 from pylons.decorators.rest import restrict
10 from pylons.decorators import validate
11 import wradmin.model as model
12 import sqlalchemy as sa
15 import wrpylib.wrvalidators
18 log = logging.getLogger(__name__)
19 formencode.api.set_stdtranslation(domain="FormEncode", languages=["de"])
22 class RequireDateIfUserDefined(formencode.validators.FormValidator):
23 "requires that date_userdefined is not empty if date_invalid == 'userdefined'"
24 def _to_python(self, value_dict, state):
25 # if not value_dict.get('date_invalid'): ... # This is _not_ checked because this should be checked elsewhere
26 if value_dict.get('date_invalid') == 'userdefined' and not value_dict.get('date_userdefined'):
27 value = value_dict.get('date_userdefined')
28 raise formencode.Invalid('Es muss ein Wert eingegeben werden', value, state, error_dict={'date_userdefined': formencode.Invalid(self.message('empty', state), value, state)})
32 class ChangeDateInvalidForm(formencode.Schema):
33 allow_extra_fields = True
34 filter_extra_fields = True
35 date_invalid = formencode.validators.OneOf(['no_change', 'tomorrow', 'one_week', 'two_weeks', 'one_week_more', 'end_of_saison', 'now', 'userdefined'], not_empty=True)
36 date_userdefined = wrpylib.wrvalidators.DateTimeNoSec
37 chained_validators = [RequireDateIfUserDefined()]
40 class BerichtController(BaseController):
41 "Manages reports (table wrreport)"
43 def _add_dates_to_c(self, date_invalid):
44 now = datetime.datetime.today()
45 if date_invalid is None: date_invalid = now
47 c.date_no_change = date_invalid
48 c.date_tomorrow = now + datetime.timedelta(1)
49 c.date_one_week = now + datetime.timedelta(7)
50 c.date_two_weeks = now + datetime.timedelta(14)
51 c.date_one_week_more = date_invalid + datetime.timedelta(7)
52 c.date_end_of_saison = datetime.datetime(now.year if now.month < 7 else now.year + 1, 7, 1)
57 q = model.meta.Session.query(model.WrReport)
58 c.wrreport = q.get(id)
59 if c.wrreport is None: abort(404)
60 self._add_dates_to_c(c.wrreport.date_invalid)
61 return render('bericht_view.html')
65 @validate(schema=ChangeDateInvalidForm(), form='view')
66 def change_date_invalid(self, id=None):
67 if id is None: abort(404)
68 wrreport_q = model.meta.Session.query(model.WrReport)
69 wrreport = wrreport_q.get(id)
70 if wrreport is None: abort(404)
71 self._add_dates_to_c(wrreport.date_invalid)
72 date = self.form_result['date_invalid']
73 if date == 'tomorrow': wrreport.date_invalid = c.date_tomorrow
74 elif date == 'one_week': wrreport.date_invalid = c.date_one_week
75 elif date == 'two_weeks': wrreport.date_invalid = c.date_two_weeks
76 elif date == 'one_week_more': wrreport.date_invalid = c.date_one_week_more
77 elif date == 'end_of_saison': wrreport.date_invalid = c.date_end_of_saison
78 elif date == 'now': wrreport.date_invalid = c.date_now
79 elif date == 'userdefined': wrreport.date_invalid = self.form_result['date_userdefined']
80 model.meta.Session.commit()
81 session['flash'] = u'Datum wurde erfolgreich geƤndert'
83 return redirect(url(controller='bericht', action='view', id=id))
87 "Displays a form to create a new page"
88 return u"Nicht implementiert."
92 "Saves the information submitted from new() and redirects to view()"
93 return u"Nicht implementiert."
97 "Displays a form for editing the page id"
98 return u"Nicht implementiert."
102 "Saves the page id and redirects to view()"
103 return u"Nicht implementiert."
108 q = model.meta.Session.query(model.WrReport)
109 q = q.order_by(sa.sql.expression.desc(model.WrReport.id))
110 c.paginator = paginate.Page(q, page=int(request.params.get('page', 1)), items_per_page = 25)
111 return render('bericht_list.html')
114 def delete(self, id):
116 return u"Nicht implementiert."