X-Git-Url: https://git.toastfreeware.priv.at/philipp/winterrodeln/wradmin.git/blobdiff_plain/bc16e26959fabe1a9ea2f9293d9853312ce5fedd..731f87ca567597759fe7935f5e3cf42b8e7c3c03:/wradmin/controllers/bericht.py diff --git a/wradmin/controllers/bericht.py b/wradmin/controllers/bericht.py index 6d95dfd..e8f2f69 100644 --- a/wradmin/controllers/bericht.py +++ b/wradmin/controllers/bericht.py @@ -1,115 +1,68 @@ -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 - - -log = logging.getLogger(__name__) -formencode.api.set_stdtranslation(domain="FormEncode", languages=["de"]) - +from flask import request, abort, redirect, url_for, flash, render_template +import paginate +import sqlalchemy as sa +import wradmin.model as model -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 = 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) -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" + """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') + 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) + 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)) - - - def new(self, id): - "Displays a form to create a new page" - return "Nicht implementiert." - - - def create(self): - "Saves the information submitted from new() and redirects to view()" - return "Nicht implementiert." - - - def edit(self, id): - "Displays a form for editing the page id" - return "Nicht implementiert." - - - def save(self, id): - "Saves the page id and redirects to view()" - return "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 "Nicht implementiert." + flash('Datum wurde erfolgreich geändert') + return redirect(url_for('bericht_view', id=id))