X-Git-Url: https://git.toastfreeware.priv.at/philipp/winterrodeln/wradmin.git/blobdiff_plain/76089333a7ceb3c1bd472c7658cca23732764935..2cf4f3b35ca678c082eed9ef7a4dbe651b189870:/wradmin/controllers/bericht.py diff --git a/wradmin/controllers/bericht.py b/wradmin/controllers/bericht.py index ebaf37d..2fb93e5 100644 --- a/wradmin/controllers/bericht.py +++ b/wradmin/controllers/bericht.py @@ -1,81 +1,81 @@ -#from pylons import request, response, session, url, tmpl_context as c -#from pylons.controllers.util import abort, redirect -from flask import request +import datetime +from flask import request, abort, redirect, url_for, flash, render_template import paginate import sqlalchemy as sa - -import wrpylib.wrmwmarkup -import wrpylib.wrmwcache -import wrpylib.mwmarkup - import wradmin.model as model -from wradmin.genshi import render_genshi_template, TemplateContext - - -# 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 = wrpylib.wrvalidators.DateTimeNoSec -# chained_validators = [RequireDateIfUserDefined()] +import wrpylib.wrmwcache class BerichtController: - def _add_dates_to_c(self, 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)) + 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" + """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') + 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) - #@restrict('POST') - #@validate(schema=ChangeDateInvalidForm(), form='view') def change_date_invalid(self, id=None): - if id is None: abort(404) + 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) - 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'] + 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() - session['flash'] = 'Datum wurde erfolgreich geändert' - session.save() - return redirect(url(controller='bericht', action='view', id=id)) + flash('Datum wurde erfolgreich geändert') + return redirect(url_for('bericht_view', id=id)) - 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)), items_per_page = 25) - return render_genshi_template('bericht_list.html', c=c) + 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'))