]> ToastFreeware Gitweb - philipp/winterrodeln/wradmin.git/blob - wradmin/controllers/bericht.py
Changed encoding to UTF-8.
[philipp/winterrodeln/wradmin.git] / wradmin / controllers / bericht.py
1 import logging
2
3 from pylons import request, response, session, url, tmpl_context as c
4 from pylons.controllers.util import abort, redirect
5 import webhelpers.paginate as paginate
6
7 from wradmin.lib.base import BaseController, render
8 from pylons.decorators.rest import restrict
9 from pylons.decorators import validate
10 import wradmin.model as model
11 import sqlalchemy as sa
12 import datetime
13 import formencode
14 import wrpylib.wrvalidators
15
16
17 log = logging.getLogger(__name__)
18 formencode.api.set_stdtranslation(domain="FormEncode", languages=["de"])
19
20
21 class RequireDateIfUserDefined(formencode.validators.FormValidator):
22     "requires that date_userdefined is not empty if date_invalid == 'userdefined'"
23     def _to_python(self, value_dict, state):
24         # if not value_dict.get('date_invalid'): ... # This is _not_ checked because this should be checked elsewhere
25         if value_dict.get('date_invalid') == 'userdefined' and not value_dict.get('date_userdefined'):
26             value = value_dict.get('date_userdefined')
27             raise formencode.Invalid('Es muss ein Wert eingegeben werden', value, state, error_dict={'date_userdefined': formencode.Invalid(self.message('empty', state), value, state)})
28         return value_dict
29
30
31 class ChangeDateInvalidForm(formencode.Schema):
32     allow_extra_fields = True
33     filter_extra_fields = True
34     date_invalid = formencode.validators.OneOf(['no_change', 'tomorrow', 'one_week', 'two_weeks', 'one_week_more', 'end_of_saison', 'now', 'userdefined'], not_empty=True)
35     date_userdefined = wrpylib.wrvalidators.DateTimeNoSec
36     chained_validators = [RequireDateIfUserDefined()]
37
38
39 class BerichtController(BaseController):
40     "Manages reports (table wrreport)"
41     
42     def _add_dates_to_c(self, date_invalid):
43         now = datetime.datetime.today()
44         if date_invalid is None: date_invalid = now
45         c.date_now = now
46         c.date_no_change = date_invalid
47         c.date_tomorrow = now + datetime.timedelta(1)
48         c.date_one_week = now + datetime.timedelta(7)
49         c.date_two_weeks = now + datetime.timedelta(14)
50         c.date_one_week_more = date_invalid + datetime.timedelta(7)
51         c.date_end_of_saison = datetime.datetime(now.year if now.month < 7 else now.year + 1, 7, 1)
52     
53     
54     def view(self, id):
55         "Displays a report"
56         q = model.meta.Session.query(model.WrReport)
57         c.wrreport =  q.get(id)
58         if c.wrreport is None: abort(404)
59         self._add_dates_to_c(c.wrreport.date_invalid)
60         return render('bericht_view.html')
61     
62     
63     @restrict('POST')
64     @validate(schema=ChangeDateInvalidForm(), form='view')
65     def change_date_invalid(self, id=None):
66         if id is None: abort(404)
67         wrreport_q = model.meta.Session.query(model.WrReport)
68         wrreport =  wrreport_q.get(id)
69         if wrreport is None: abort(404)
70         self._add_dates_to_c(wrreport.date_invalid)
71         date = self.form_result['date_invalid']
72         if   date == 'tomorrow':      wrreport.date_invalid = c.date_tomorrow
73         elif date == 'one_week':      wrreport.date_invalid = c.date_one_week
74         elif date == 'two_weeks':     wrreport.date_invalid = c.date_two_weeks
75         elif date == 'one_week_more': wrreport.date_invalid = c.date_one_week_more
76         elif date == 'end_of_saison': wrreport.date_invalid = c.date_end_of_saison
77         elif date == 'now':           wrreport.date_invalid = c.date_now
78         elif date == 'userdefined':   wrreport.date_invalid = self.form_result['date_userdefined']
79         model.meta.Session.commit()
80         session['flash'] = 'Datum wurde erfolgreich geƤndert'
81         session.save()
82         return redirect(url(controller='bericht', action='view', id=id))
83     
84     
85     def new(self, id):
86         "Displays a form to create a new page"
87         return "Nicht implementiert."
88     
89     
90     def create(self):
91         "Saves the information submitted from new() and redirects to view()"
92         return "Nicht implementiert."
93     
94     
95     def edit(self, id):
96         "Displays a form for editing the page id"
97         return "Nicht implementiert."
98     
99     
100     def save(self, id):
101         "Saves the page id and redirects to view()"
102         return "Nicht implementiert."
103     
104     
105     def list(self):
106         "Lists all reports"
107         q = model.meta.Session.query(model.WrReport)
108         q = q.order_by(sa.sql.expression.desc(model.WrReport.id))
109         c.paginator = paginate.Page(q, page=int(request.params.get('page', 1)), items_per_page = 25)
110         return render('bericht_list.html')
111     
112     
113     def delete(self, id):
114         "Deletes a page"
115         return "Nicht implementiert."