]> ToastFreeware Gitweb - philipp/winterrodeln/wradmin.git/commitdiff
"Date invalid" of reports can be changed now.
authorphilipp <philipp@7aebc617-e5e2-0310-91dc-80fb5f6d2477>
Sat, 21 Mar 2009 21:37:43 +0000 (21:37 +0000)
committerphilipp <philipp@7aebc617-e5e2-0310-91dc-80fb5f6d2477>
Sat, 21 Mar 2009 21:37:43 +0000 (21:37 +0000)
git-svn-id: http://www.winterrodeln.org/svn/servermediawiki/trunk/wradmin@431 7aebc617-e5e2-0310-91dc-80fb5f6d2477

wradmin/wradmin/controllers/bericht.py
wradmin/wradmin/public/style.css
wradmin/wradmin/templates/bericht_view.html

index fd1a030421e23d6a93927da5afde5af636689180..226c627c51b1f9de9216e853434e6f8abb39a9ce 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: iso-8859-15 -*-
 import logging
 
 from pylons import request, response, session, tmpl_context as c
@@ -5,21 +6,87 @@ from pylons.controllers.util import abort, redirect_to
 import webhelpers.paginate as paginate
 
 from wradmin.lib.base import BaseController, render
+from pylons.decorators.rest import restrict
+from pylons.decorators import validate
 import wradmin.model as model
 import sqlalchemy as sa
+import datetime
+import formencode
+
 
 log = logging.getLogger(__name__)
+formencode.api.set_stdtranslation(domain="FormEncode", languages=["de"])
+
+
+class GermanDateTimeConverter(formencode.FancyValidator):
+    def _to_python(self, value, state):
+        "converts datetime strings like '2009-03-22 20:36'"
+        self.assert_string(value, state)
+        try: return datetime.datetime.strptime(value, '%Y-%m-%d %H:%M')
+        except ValueError, e: raise formencode.Invalid(str(e), value, state)
+
+
+class RequireDateIfUserDefined(formencode.validators.FormValidator):
+    "requires that date_userdefined is not empty if date_invalid == 'userdefined'"
+    def _to_python(self, value_dict, state):
+        # if not value_dict.get('date_invalid'): ... # This is _not_ checked because this should be checked elsewhere
+        if value_dict.get('date_invalid') == 'userdefined' and not value_dict.get('date_userdefined'):
+            value = value_dict.get('date_userdefined')
+            raise formencode.Invalid('Es muss ein Wert eingegeben werden', value, state, error_dict={'date_userdefined': formencode.Invalid(self.message('empty', state), value, state)})
+        return value_dict
+
+
+class ChangeDateInvalidForm(formencode.Schema):
+    allow_extra_fields = True
+    filter_extra_fields = True
+    date_invalid = formencode.validators.OneOf(['no_change', 'tomorrow', 'one_week', 'two_weeks', 'one_week_more', 'end_of_saison', 'now', 'userdefined'], not_empty=True)
+    date_userdefined = GermanDateTimeConverter
+    chained_validators = [RequireDateIfUserDefined()]
+
 
 class BerichtController(BaseController):
     "Manages reports (table wrreport)"
     
+    def _add_dates_to_c(self, date_invalid):
+        now = datetime.datetime.today()
+        if date_invalid is None: date_invalid = now
+        c.date_now = now
+        c.date_no_change = date_invalid
+        c.date_tomorrow = now + datetime.timedelta(1)
+        c.date_one_week = now + datetime.timedelta(7)
+        c.date_two_weeks = now + datetime.timedelta(14)
+        c.date_one_week_more = date_invalid + datetime.timedelta(7)
+        c.date_end_of_saison = datetime.datetime(now.year, 7, 1)
+        
     def view(self, id):
         "Displays a report"
         wrreport_q = model.meta.Session.query(model.WrReport)
         c.wrreport =  wrreport_q.get(id)
         if c.wrreport is None: abort(404)
+        self._add_dates_to_c(c.wrreport.date_invalid)
         return render('bericht_view.html')
-        
+    
+    @restrict('POST')
+    @validate(schema=ChangeDateInvalidForm(), form='view')
+    def change_date_invalid(self, id=None):
+        if id is None: abort(404)
+        wrreport_q = model.meta.Session.query(model.WrReport)
+        wrreport =  wrreport_q.get(id)
+        if wrreport is None: abort(404)
+        self._add_dates_to_c(wrreport.date_invalid)
+        date = self.form_result['date_invalid']
+        if   date == 'tomorrow':      wrreport.date_invalid = c.date_tomorrow
+        elif date == 'one_week':      wrreport.date_invalid = c.date_one_week
+        elif date == 'two_weeks':     wrreport.date_invalid = c.date_two_weeks
+        elif date == 'one_week_more': wrreport.date_invalid = c.date_one_week_more
+        elif date == 'end_of_saison': wrreport.date_invalid = c.date_end_of_saison
+        elif date == 'now':           wrreport.date_invalid = c.date_now
+        elif date == 'userdefined':   wrreport.date_invalid = self.form_result['date_userdefined']
+        model.meta.Session.commit()
+        session['flash'] = 'Datum wurde erfolgreich geändert'
+        session.save()
+        return redirect_to(controller='bericht', action='view', id=id)
+    
     def new(self, id):
         "Displays a form to create a new page"
         return u"Nicht implementiert."
index 6f365f88f2e23f0e1a456965176f633c54aa47b0..c470f5f9d8eb11617ab3d60d6aa8c6b7fecac6b0 100644 (file)
@@ -107,4 +107,10 @@ a {
 
 #footer {
        margin-top: 20px;
-}
\ No newline at end of file
+}
+
+.error-message {
+       font-weight: bold;
+       color: red;
+}
+
index 6e9ad5a4b719649b3b88f8fae84e284b6cb1cb46..78bcc58122780524a4f204625218472c82dd4544 100644 (file)
@@ -94,6 +94,48 @@ Der Bericht wurde am ${c.wrreport.date_report} abgegeben.
     </py:if>
 </table>
 
+<h3>Anzeigedauer des Rodelbahnberichts ändern</h3>
+<form action="${h.url_for(controller='bericht', action='change_date_invalid', id=c.wrreport.id)}" method="post">
+<table>
+       <tr>
+               <th>Enddatum</th>
+               <td><input type="radio" name="date_invalid" value="no_change" checked="true" />Unverändert</td>
+               <td>${c.date_no_change.strftime('%Y-%m-%d %H:%M')}</td>
+       </tr><tr>
+               <th></th>
+               <td><input type="radio" name="date_invalid" value="tomorrow" />Morgen</td>
+               <td>${c.date_tomorrow.strftime('%Y-%m-%d %H:%M')}</td>
+       </tr><tr>
+               <th></th>
+               <td><input type="radio" name="date_invalid" value="one_week" />In einer Woche</td>
+               <td>${c.date_one_week.strftime('%Y-%m-%d %H:%M')}</td>
+       </tr><tr>
+               <th></th>
+               <td><input type="radio" name="date_invalid" value="two_weeks" />In zwei Wochen</td>
+               <td>${c.date_two_weeks.strftime('%Y-%m-%d %H:%M')}</td>
+       </tr><tr>
+               <th></th>
+               <td><input type="radio" name="date_invalid" value="one_week_more" />Einer Woche länger</td>
+               <td>${c.date_one_week_more.strftime('%Y-%m-%d %H:%M')}</td>
+       </tr><tr>
+               <th></th>
+               <td><input type="radio" name="date_invalid" value="end_of_saison" />Saisonende</td>
+               <td>${c.date_end_of_saison.strftime('%Y-%m-%d %H:%M')}</td>
+       </tr><tr>
+               <th></th>
+               <td><input type="radio" name="date_invalid" value="now" />Jetzt (entspricht ohne Meldung löschen)</td>
+               <td>${c.date_now.strftime('%Y-%m-%d %H:%M')}</td>
+       </tr>
+       <tr>
+               <th></th>
+               <td><input type="radio" name="date_invalid" value="userdefined" />Selbst festlegen: </td>
+               <td><input type="text" name="date_userdefined" value="${c.date_no_change.strftime('%Y-%m-%d %H:%M')}"/></td>
+       </tr>
+       <tr><th>Durchführen</th><td><input type="submit" value="OK"/></td><td></td></tr>
+</table>
+</form>
+
+
 </body>
 </html>