102 lines
3.9 KiB
Python
102 lines
3.9 KiB
Python
from flask import Blueprint, render_template, request, redirect, flash, url_for
|
|
from sqlalchemy import select, insert, update, delete
|
|
from the_works.database import db
|
|
from the_works.models import Werk, Reihe, Verlag, Werksform
|
|
|
|
bp = Blueprint("werk", __name__)
|
|
|
|
@bp.route("/werk")
|
|
@bp.route("/werk/all")
|
|
def all():
|
|
# select all rows from table "Werk", ORM style
|
|
rows = db.session.execute(select(Werk, Reihe, Verlag, Werksform).join(Werk.reihe, isouter=True).join(Werk.verlag, isouter=True).join(Werk.werksform, isouter=True))
|
|
# condense result into list of dicts
|
|
werke = []
|
|
for row in rows:
|
|
werke.append({
|
|
"id": row.Werk.ID,
|
|
"Titel": row.Werk.Titel,
|
|
"Untertitel": row.Werk.Untertitel or "",
|
|
"Werksform": row.Werksform.Werksform if row.Werksform else "",
|
|
"wf_id": row.Werk.Werksform or "",
|
|
"Verlag": row.Verlag.Verlag if row.Verlag else "",
|
|
"v_id": row.Werk.Verlag or "",
|
|
"Reihe": row.Reihe.Titel if row.Reihe else "",
|
|
"r_id": row.Werk.Reihe or ""
|
|
})
|
|
return render_template("views/werk.html", werke=werke, reihen=db.session.scalars(select(Reihe)), verlage=db.session.scalars(select(Verlag)), werksformen=db.session.scalars(select(Werksform)))
|
|
|
|
@bp.route("/werk/read/<int:id>")
|
|
def read(id):
|
|
werk = db.session.get(Werk, id)
|
|
return {
|
|
"Titel": werk.Titel,
|
|
"Untertitel": werk.Untertitel or "",
|
|
"Werksform": werk.Werksform or "",
|
|
"Verlag": werk.Verlag or "",
|
|
"Reihe": werk.Reihe or "",
|
|
"Reihennummer": werk.Reihennummer or "",
|
|
"Erscheinungsdatum": werk.Erscheinungsdatum or "",
|
|
"ISBN_13": werk.ISBN_13 or "",
|
|
"ISBN_10": werk.ISBN_10 or "",
|
|
"ISSN": werk.ISSN or "",
|
|
"Preis": werk.Preis or "",
|
|
"Titelbild": "",
|
|
"Klappentext": werk.Klappentext or "",
|
|
"Anmerkungen": werk.Anmerkungen or ""
|
|
}
|
|
|
|
@bp.route("/werk/create", methods=["POST"])
|
|
def create():
|
|
db.session.add(Werk(
|
|
Titel = request.form["form_Titel"],
|
|
Untertitel = request.form["form_Untertitel"] or None,
|
|
Werksform = request.form["form_Werksform"],
|
|
Verlag = request.form["form_Verlag"] or None,
|
|
Reihe = request.form["form_Reihe"] or None,
|
|
Reihennummer = request.form["form_Reihennummer"] or None,
|
|
Erscheinungsdatum = request.form["form_Erscheinungsdatum"] or None,
|
|
ISBN_13 = request.form["form_ISBN_13"] or None,
|
|
ISBN_10 = request.form["form_ISBN_10"] or None,
|
|
ISSN = request.form["form_ISSN"] or None,
|
|
Preis = request.form["form_Preis"] or None,
|
|
Titelbild = None,
|
|
Klappentext = request.form["form_Klappentext"] or None,
|
|
Anmerkungen = request.form["form_Anmerkungen"] or None
|
|
))
|
|
db.session.commit()
|
|
flash("Eintrag erfolgreich hinzugefügt")
|
|
return redirect(url_for("werk.all"))
|
|
|
|
@bp.route("/werk/update/<int:id>", methods=["POST"])
|
|
def update(id):
|
|
# get record
|
|
werk = db.session.get(Werk, id)
|
|
# update values
|
|
werk.Titel = request.form["form_Titel"]
|
|
werk.Untertitel = request.form["form_Untertitel"] or None
|
|
werk.Werksform = request.form["form_Werksform"]
|
|
werk.Verlag = request.form["form_Verlag"] or None
|
|
werk.Reihe = request.form["form_Reihe"] or None
|
|
werk.Reihennummer = request.form["form_Reihennummer"] or None
|
|
werk.Erscheinungsdatum = request.form["form_Erscheinungsdatum"] or None
|
|
werk.ISBN_13 = request.form["form_ISBN_13"] or None
|
|
werk.ISBN_10 = request.form["form_ISBN_10"] or None
|
|
werk.ISSN = request.form["form_ISSN"] or None
|
|
werk.Preis = request.form["form_Preis"] or None
|
|
werk.Titelbild = None
|
|
werk.Klappentext = request.form["form_Klappentext"] or None
|
|
werk.Anmerkungen = request.form["form_Anmerkungen"] or None
|
|
# commit changes
|
|
db.session.commit()
|
|
flash("Eintrag erfolgreich geändert")
|
|
return redirect(url_for("werk.all"))
|
|
|
|
@bp.route("/werk/delete/<int:id>")
|
|
def delete(id):
|
|
werk = db.session.get(Werk, id)
|
|
db.session.delete(werk)
|
|
db.session.commit()
|
|
flash("Eintrag erfolgreich gelöscht")
|
|
return redirect(url_for("werk.all"))
|