import datetime from flask import request, abort, redirect, url_for, flash import paginate import sqlalchemy as sa import wradmin.model as model from wradmin.genshi import render_genshi_template, TemplateContext class BerichtController: def _add_dates_to_c(self, c, 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 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) 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: abort(404) self._add_dates_to_c(c, c.wrreport.date_invalid) return render_genshi_template('bericht_view.html', c=c) 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 = wrreport_q.get(id) if wrreport is None: abort(404) c = TemplateContext() self._add_dates_to_c(c, 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 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 flash('Datum wurde erfolgreich geƤndert') return redirect(url_for('bericht_view', id=id))