]> ToastFreeware Gitweb - philipp/winterrodeln/wradmin.git/blob - wradmin/controllers/bericht.py
Fixed calculation of "end of season".
[philipp/winterrodeln/wradmin.git] / wradmin / controllers / bericht.py
1 # -*- coding: iso-8859-15 -*-
2 import logging
3
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
7
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
13 import datetime
14 import formencode
15 import wrpylib.wrvalidators
16
17
18 log = logging.getLogger(__name__)
19 formencode.api.set_stdtranslation(domain="FormEncode", languages=["de"])
20
21
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)})
29         return value_dict
30
31
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()]
38
39
40 class BerichtController(BaseController):
41     "Manages reports (table wrreport)"
42     
43     def _add_dates_to_c(self, date_invalid):
44         now = datetime.datetime.today()
45         if date_invalid is None: date_invalid = now
46         c.date_now = 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)
53     
54     
55     def view(self, id):
56         "Displays a report"
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')
62     
63     
64     @restrict('POST')
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'
82         session.save()
83         return redirect(url(controller='bericht', action='view', id=id))
84     
85     
86     def new(self, id):
87         "Displays a form to create a new page"
88         return u"Nicht implementiert."
89     
90     
91     def create(self):
92         "Saves the information submitted from new() and redirects to view()"
93         return u"Nicht implementiert."
94     
95     
96     def edit(self, id):
97         "Displays a form for editing the page id"
98         return u"Nicht implementiert."
99     
100     
101     def save(self, id):
102         "Saves the page id and redirects to view()"
103         return u"Nicht implementiert."
104     
105     
106     def list(self):
107         "Lists all reports"
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')
112     
113     
114     def delete(self, id):
115         "Deletes a page"
116         return u"Nicht implementiert."