import datetime
-from flask import request, abort, redirect, url_for, flash
+from flask import request, abort, redirect, url_for, flash, render_template
import paginate
import sqlalchemy as sa
-import wradmin.model as model
-from wradmin.genshi import render_genshi_template, TemplateContext
+
+import wrpylib.wrmwcache
+
+from wradmin import db
+from wradmin.model import WrReport
class BerichtController:
- def _add_dates_to_c(self, c, date_invalid):
+ def _dependent_date_dict(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)
+ 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 = model.meta.Session.query(model.WrReport)
- q = q.order_by(sa.sql.expression.desc(model.WrReport.id))
- c = TemplateContext()
- c.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_genshi_template('bericht_list.html', c=c)
+ 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)
def view(self, id):
"""Displays a report"""
- q = model.meta.Session.query(model.WrReport)
- c = TemplateContext()
- c.wrreport = q.get(id)
- if c.wrreport is None:
+ q = db.session.query(WrReport)
+ wrreport = q.get(id)
+ if wrreport is None:
abort(404)
- self._add_dates_to_c(c, c.wrreport.date_invalid)
- return render_genshi_template('bericht_view.html', c=c)
+ dates = self._dependent_date_dict(wrreport.date_invalid)
+ return render_template('bericht_view.html', wrreport=wrreport, **dates)
def change_date_invalid(self, id=None):
assert request.method == 'POST'
if id is None:
abort(404)
- wrreport_q = model.meta.Session.query(model.WrReport)
+ wrreport_q = db.session.query(WrReport)
wrreport = wrreport_q.get(id)
if wrreport is None:
abort(404)
- c = TemplateContext()
- self._add_dates_to_c(c, wrreport.date_invalid)
+ dates = self._dependent_date_dict(wrreport.date_invalid)
date = request.form['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
+ 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:
flash(str(e))
return redirect(url_for('bericht_view', id=id))
wrreport.date_invalid = date_userdefined
- model.meta.Session.commit()
+ 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'))