Skip to content
Snippets Groups Projects

Place editing

Merged Jiří Setnička requested to merge jirka/schools into master
6 files
+ 151
3
Compare changes
  • Side-by-side
  • Inline

Files

  • f56a54d5
    Editace míst · f56a54d5
    Jiří Setnička authored
    Používá flask_bootstrap na vykreslení formu.
    
    Po editaci zkontroluje změny v objektu a pokud nějaké nastaly, tak
    uloží + zaloguje do databáze.
    
    Přesun místa pod jiné místo je zatím work-in-progress.
+ 89
3
from flask import render_template, g, redirect, url_for
from flask import render_template, g, redirect, url_for, flash
 
from flask_wtf import FlaskForm
from sqlalchemy.orm import joinedload
from sqlalchemy.orm import joinedload
import werkzeug.exceptions
import werkzeug.exceptions
 
import wtforms
import mo
import mo
import mo.db as db
import mo.db as db
import mo.rights
import mo.rights
from mo.web import app
from mo.web import app
 
import wtforms.validators as validators
@app.route('/org/')
@app.route('/org/')
@@ -30,7 +32,91 @@ def org_place(id: int):
@@ -30,7 +32,91 @@ def org_place(id: int):
rr = mo.rights.Rights(g.user)
rr = mo.rights.Rights(g.user)
rr.get_for(place)
rr.get_for(place)
return render_template('org_place.html', place=place, school=school, rights=rr.current_rights)
return render_template(
 
'org_place.html', place=place, school=school, rights=rr.current_rights,
 
can_edit=rr.can_edit_place(place)
 
)
 
 
 
class PlaceEditForm(FlaskForm):
 
name = wtforms.StringField(
 
'Název',
 
validators=[validators.DataRequired()]
 
)
 
code = wtforms.StringField(
 
'Kód', filters=[lambda x: x or None], # may be NULL in db
 
description="Při nevyplnění se použije ID místa"
 
)
 
type = wtforms.SelectField(
 
'Typ', choices=db.PlaceType.choices(), coerce=db.PlaceType.coerce
 
)
 
nuts = wtforms.StringField(
 
'NUTS', filters=[lambda x: x or None], # may be NULL in db
 
description="Pro okresy a výše"
 
)
 
note = wtforms.StringField('Poznámka')
 
submit = wtforms.SubmitField('Uložit')
 
 
 
class PlaceSchoolEditForm(PlaceEditForm):
 
red_izo = wtforms.StringField('RED_IZO')
 
official_name = wtforms.StringField('Oficiální název')
 
address = wtforms.StringField('Adresa')
 
is_zs = wtforms.BooleanField('')
 
is_ss = wtforms.BooleanField('')
 
submit = wtforms.SubmitField('Uložit')
 
 
 
@app.route('/org/place/<int:id>/edit', methods=('GET', 'POST'))
 
def org_place_edit(id: int):
 
sess = db.get_session()
 
 
place = sess.query(db.Place).get(id)
 
if not place:
 
raise werkzeug.exceptions.NotFound()
 
 
rr = mo.rights.Rights(g.user)
 
rr.get_for(place)
 
 
if not rr.can_edit_place(place):
 
raise werkzeug.exceptions.Forbidden()
 
 
if place.type == db.PlaceType.school:
 
school = sess.query(db.School).get(place.place_id)
 
form = PlaceSchoolEditForm(obj=school)
 
else:
 
form = PlaceEditForm(obj=place)
 
school = None
 
 
if form.validate_on_submit():
 
if school:
 
obj = school
 
else:
 
obj = place
 
 
form.populate_obj(obj)
 
if sess.is_modified(obj):
 
changes = db.get_object_changes(obj)
 
app.logger.info(f"Place {id} modified, changes: {changes}")
 
mo.util.log(
 
type=db.LogType.place,
 
what=g.user.user_id,
 
details={'action': 'edit', 'changes': changes},
 
)
 
db.get_session().commit()
 
flash(u'Změny místa uloženy', 'success')
 
else:
 
flash(u'Žádné změny k uložení', 'info')
 
 
return redirect(url_for('org_place', id=id))
 
 
parents = reversed(db.get_place_parents(place)[1:]) # without place itself and from the top
 
 
return render_template(
 
'org_place_edit.html', place=place, school=school,
 
parents=parents, form=form
 
)
 
@app.route('/org/place/')
@app.route('/org/place/')
Loading