]> ToastFreeware Gitweb - philipp/winterrodeln/wradmin.git/blobdiff - wradmin/controllers/bericht.py
Use flask_sqlalchemy to manage the database connection.
[philipp/winterrodeln/wradmin.git] / wradmin / controllers / bericht.py
index a8c2d77eb9c9cb5ddeab593ae1d5c4e7d374fbda..7084929ea036e92f713fb1fb4be3a57c44d86227 100644 (file)
-# -*- coding: iso-8859-15 -*-
-import logging
-
-from pylons import request, response, session, url, tmpl_context as c
-from pylons.controllers.util import abort, redirect
-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
-import wrpylib.wrvalidators
-
+from flask import request, abort, redirect, url_for, flash, render_template
+import paginate
+import sqlalchemy as sa
 
-log = logging.getLogger(__name__)
-formencode.api.set_stdtranslation(domain="FormEncode", languages=["de"])
+import wrpylib.wrmwcache
 
+from wradmin import db
+from wradmin.model import WrReport
 
-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 BerichtController:
 
-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 = wrpylib.wrvalidators.DateTimeNoSec
-    chained_validators = [RequireDateIfUserDefined()]
+    def _dependent_date_dict(self, date_invalid):
+        now = datetime.datetime.today()
+        if date_invalid is None:
+            date_invalid = now
+        return {
+            'date_now': now,
+            'date_no_change': date_invalid,
+            'date_tomorrow': now + datetime.timedelta(1),
+            'date_one_week': now + datetime.timedelta(7),
+            'date_two_weeks': now + datetime.timedelta(14),
+            'date_one_week_more': date_invalid + datetime.timedelta(7),
+            'date_end_of_saison': datetime.datetime(now.year if now.month < 7 else now.year + 1, 7, 1),
+        }
 
+    def list(self):
+        """Lists all reports"""
+        q = db.session.query(WrReport)
+        q = q.order_by(sa.sql.expression.desc(WrReport.id))
+        paginator = paginate.Page(q.all(), page=int(request.args.get('page', 1)),
+                                  url_maker=lambda page: url_for('bericht_list', page=page),
+                                  items_per_page=25)
+        return render_template('bericht_list.html', paginator=paginator)
 
-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 if now.month < 7 else now.year + 1, 7, 1)
-    
-    
     def view(self, id):
-        "Displays a report"
-        q = model.meta.Session.query(model.WrReport)
-        c.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')
+        """Displays a report"""
+        q = db.session.query(WrReport)
+        wrreport = q.get(id)
+        if wrreport is None:
+            abort(404)
+        dates = self._dependent_date_dict(wrreport.date_invalid)
+        return render_template('bericht_view.html', wrreport=wrreport, **dates)
+
     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'] = u'Datum wurde erfolgreich geändert'
-        session.save()
-        return redirect(url(controller='bericht', action='view', id=id))
-    
-    
-    def new(self, id):
-        "Displays a form to create a new page"
-        return u"Nicht implementiert."
-    
-    
-    def create(self):
-        "Saves the information submitted from new() and redirects to view()"
-        return u"Nicht implementiert."
-    
-    
-    def edit(self, id):
-        "Displays a form for editing the page id"
-        return u"Nicht implementiert."
-    
-    
-    def save(self, id):
-        "Saves the page id and redirects to view()"
-        return u"Nicht implementiert."
-    
-    
-    def list(self):
-        "Lists all reports"
-        q = model.meta.Session.query(model.WrReport)
-        q = q.order_by(sa.sql.expression.desc(model.WrReport.id))
-        c.paginator = paginate.Page(q, page=int(request.params.get('page', 1)), items_per_page = 25)
-        return render('bericht_list.html')
-    
-    
-    def delete(self, id):
-        "Deletes a page"
-        return u"Nicht implementiert."
+        assert request.method == 'POST'
+        if id is None:
+            abort(404)
+        wrreport_q = db.session.query(WrReport)
+        wrreport = wrreport_q.get(id)
+        if wrreport is None:
+            abort(404)
+        dates = self._dependent_date_dict(wrreport.date_invalid)
+        date = request.form['date_invalid']
+        if   date == 'tomorrow':      wrreport.date_invalid = dates['date_tomorrow']
+        elif date == 'one_week':      wrreport.date_invalid = dates['date_one_week']
+        elif date == 'two_weeks':     wrreport.date_invalid = dates['date_two_weeks']
+        elif date == 'one_week_more': wrreport.date_invalid = dates['date_one_week_more']
+        elif date == 'end_of_saison': wrreport.date_invalid = dates['date_end_of_saison']
+        elif date == 'now':           wrreport.date_invalid = dates['date_now']
+        elif date == 'userdefined':
+            date_userdefined = request.form['date_userdefined']
+            try:
+                date_userdefined = datetime.datetime.strptime(date_userdefined, '%Y-%m-%d %H:%M')
+            except ValueError as e:
+                flash(str(e))
+                return redirect(url_for('bericht_view', id=id))
+            wrreport.date_invalid = date_userdefined
+        db.session.commit()
+        flash('Datum wurde erfolgreich geändert')
+        return redirect(url_for('bericht_view', id=id))
+
+    def update_reportcache(self):
+        """Updates the wrreportcache table."""
+        c = db.session.connection()
+        try:
+            wrpylib.wrmwcache.update_wrreportcache(c)
+            db.session.commit()
+            flash('Die Berichtzusammenfassung-Tabelle wurde erfolgreich aktualisiesrt.', 'info')
+        except wrpylib.wrmwcache.UpdateCacheError as e:
+            flash(str(e), 'error')
+        # Redirect to result page
+        return redirect(url_for('bericht_list'))