Skip to content
Snippets Groups Projects
Commit 19dd8aa3 authored by Martin Mareš's avatar Martin Mareš
Browse files

Export škol a jejich garantů

Na žádost Zbyňka Šíra.
parent 5d2e97e8
No related branches found
No related tags found
No related merge requests found
from flask import request from flask import request, g
from sqlalchemy.orm import aliased import locale
from sqlalchemy import and_
from sqlalchemy.orm import aliased, joinedload
import werkzeug.exceptions
import mo.db as db import mo.db as db
from mo.rights import Right
from mo.web import app from mo.web import app
from mo.web.table import Table, Row, Column from mo.web.table import Table, Row, Column
...@@ -61,3 +65,70 @@ def org_export_schools(): ...@@ -61,3 +65,70 @@ def org_export_schools():
filename='skoly', filename='skoly',
) )
return table.send_as(format, streaming=True) return table.send_as(format, streaming=True)
school_orgs_export_columns = (
Column(key='obec'),
Column(key='skola'),
Column(key='kod_skoly'),
Column(key='red_izo'),
Column(key='typ'),
Column(key='garant'),
Column(key='garant_email'),
)
@app.route('/org/export/school-orgs/<region>')
def org_export_school_orgs(region: str):
format = request.args.get('format', 'en_csv')
reg = db.get_place_by_code(region)
if reg is None:
raise werkzeug.exceptions.NotFound()
rr = g.gatekeeper.rights_for(reg)
if not rr.have_right(Right.edit_orgs):
raise werkzeug.exceptions.Forbidden()
sess = db.get_session()
schools = (sess.query(db.School, db.UserRole)
.join(db.RegionDescendant, and_(db.RegionDescendant.region == reg.place_id, db.RegionDescendant.descendant == db.School.place_id))
.outerjoin(db.UserRole, and_(db.UserRole.role == db.RoleType.garant_skola, db.UserRole.place_id == db.School.place_id))
.options(joinedload(db.School.place).joinedload(db.Place.parent_place), joinedload(db.UserRole.user))
.all())
def key(item):
s, ur = item
town = locale.strxfrm(s.place.parent_place.name)
school = locale.strxfrm(s.place.name)
garant = ur.user.sort_key() if ur else ("", "")
return town, school, garant
def gen_rows():
for s, ur in sorted(schools, key=key):
place = s.place
town = s.place.parent_place
user = ur.user if ur else None
typy = []
if s.is_zs:
typy.append('')
if s.is_ss:
typy.append('')
yield Row(keys={
'obec': town.name,
'skola': place.name,
'kod_skoly': place.get_code(),
'red_izo': s.red_izo,
'typ': '+'.join(typy),
'garant': user.full_name() if user else "",
'garant_email': user.email if user else "",
})
table = Table(
id="skoly-organizatori",
columns=school_orgs_export_columns,
rows=gen_rows(),
filename='skoly-organizatori',
)
return table.send_as(format, streaming=True)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment