import datetime from flask import request, abort, redirect, url_for, flash, render_template import paginate import sqlalchemy as sa import wradmin.model as model import wrpylib.wrmwcache class BerichtController: 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 = model.meta.Session.query(model.WrReport) q = q.order_by(sa.sql.expression.desc(model.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) 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): 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) 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 model.meta.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 = model.meta.Session.connection() try: wrpylib.wrmwcache.update_wrreportcache(c) model.meta.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'))