added support for DB table "Verlag"

This commit is contained in:
eclipse 2025-05-01 12:13:03 +02:00
parent cead812e38
commit c47732d875
6 changed files with 153 additions and 3 deletions

View File

@ -19,10 +19,11 @@ def create_app():
init_db(app)
# register blueprints
from the_works.views import home, text, werk
from the_works.views import home, text, werk, verlag
app.register_blueprint(text.bp)
app.register_blueprint(home.bp)
app.register_blueprint(werk.bp)
app.register_blueprint(verlag.bp)
### DEBUG
app.config["SQLALCHEMY_ECHO"] = True

View File

@ -23,6 +23,7 @@ class Reihe(db.Model):
__table__ = db.Model.metadata.tables['Reihe']
text = relationship("Text", back_populates="reihe")
werk = relationship("Werk", back_populates="reihe")
verlag = relationship("Verlag", back_populates="reihe")
class Textform(db.Model):
__table__ = db.Model.metadata.tables['Textform']
@ -35,6 +36,7 @@ class Sprache(db.Model):
class Verlag(db.Model):
__table__ = db.Model.metadata.tables['Verlag']
werk = relationship("Werk", back_populates="verlag")
reihe = relationship("Reihe", back_populates="verlag")
class Werksform(db.Model):
__table__ = db.Model.metadata.tables['Werksform']

View File

@ -10,4 +10,8 @@ table.dataTable td.action {
#text-table_wrapper .dt-search input[type="search"] {
background-image: none;
}
svg {
height: 1.5em;
}

View File

@ -6,11 +6,12 @@
<h2>the_works</h2>
<p>Tobias Radloffs Bücher</p>
</hgroup>
</a>
</li>
</a>
</li>
</ul>
<ul>
<li><a href="{{ url_for('text.all') }}">Texte</a></li>
<li><a href="{{ url_for('werk.all') }}">Werke</a></li>
<li><a href="{{ url_for('verlag.all') }}">Verlage</a></li>
</ul>
</nav>

View File

@ -0,0 +1,103 @@
{% extends 'base.html' %}
{% block title %}Verlage{% endblock title %}
{% block script %}
<script>
const SCRIPT_ROOT = {{ request.script_root | tojson }};
function showCreateModal() {
// set modal heading
document.getElementById("dialog-heading").textContent = "Verlag hinzufügen";
// empty text input
document.getElementById("form_Verlag").value = "";
// set form action
document.getElementById("form_submit").formAction = "{{ url_for('verlag.create') }}";
// show modal
document.getElementById("verlagsmodal").showModal();
}
function showUpdateModal() {
// set modal heading
document.getElementById("dialog-heading").textContent = "Verlag bearbeiten";
// populate text input
document.getElementById("form_Verlag").value = this.dataset.verlag;
// set form action
document.getElementById("form_submit").formAction = `${SCRIPT_ROOT}/verlag/update/${this.dataset.id}`;
// show modal
document.getElementById("verlagsmodal").showModal();
}
window.onload = function () {
// initialise DataTable
let table = new DataTable('#verlagstable', {
paging: false,
order: []
});
deRole("#verlagstable");
// create and append "New"-button to
let button = document.createElement("button");
button.id = "create-button";
button.setAttribute("title", "Verlag hinzufügen");
button.innerHTML = "Neu …";
button.addEventListener("click", showCreateModal, false);
document.getElementById("verlagstable_wrapper").firstElementChild.firstElementChild.appendChild(button);
// add event listeners
document.getElementById ("create-button").addEventListener("click", showCreateModal, false);
for (const el of document.querySelectorAll('.action-update') ) {
el.addEventListener("click", showUpdateModal, false);
}
}
</script>{% endblock script %}
{% block heading %}Verlage{% endblock heading %}
{% block content %}
{% include "_icons.svg" %}
<table id="verlagstable">
<thead>
<tr>
<th>Verlag</th>
<th colspan="2">Aktionen</th>
</tr>
</thead>
<tbody>
{% for verlag in verlage %}
<tr id="verlag-{{ verlag['ID'] }}">
<td title="Verlag">{{ verlag["Verlag"] }}</td>
<td class="action action-update" data-id="{{ verlag['ID'] }}" data-verlag="{{verlag['Verlag'] }}"><a href="#" title="Verlag bearbeiten"><svg viewbox="0 0 24 24"><use href="#update" /></svg></a></td>
<td id="delete-{{ verlag['ID'] }}" class="action"><a onclick="return confirm('Eintrag wirklich löschen?');" href="{{ url_for('verlag.delete', id=verlag['ID']) }}" title="Verlag löschen"><svg viewbox="0 0 24 24"><use href="#delete" /></svg></a></td>
</tr>
{% endfor %}
</tbody>
</table>
<dialog aria-labelledby="dialog-heading" id="verlagsmodal">
<article>
<form id="verlag_detail_form" method="post" >
<header>
<button aria-label="close" rel="prev" onclick="verlagsmodal.close()"></button>
<h1 id="dialog-heading">#</h1>
</header>
<fieldset>
<article>
<label>
Verlagsname (erforderlich)
<input id="form_Verlag" name="form_Verlag" aria-Label="Verlagsname" placeholder="Verlagsname" required />
</label>
</article>
</fieldset>
<footer class="grid">
<button id="form_submit" type="submit" formmethod="post" formaction="{{ url_for('verlag.create') }}">OK</button>
<button class="secondary" aria-label="close" formmethod="dialog" formnovalidate>Abbrechen</button>
</footer>
</form>
</article>
</dialog>
{% endblock content %}

39
the_works/views/verlag.py Normal file
View File

@ -0,0 +1,39 @@
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 Verlag
bp = Blueprint("verlag", __name__)
@bp.route("/verlag")
@bp.route("/verlag/all")
def all():
return render_template("views/verlag.html", verlage=db.session.scalars(select(Verlag)))
@bp.route("/text/verlag/<int:id>")
def read(id):
return db.session.get(Verlag, id)
@bp.route("/verlag/create", methods=["POST"])
def create():
db.session.add(Verlag(Verlag = request.form["form_Verlag"]))
db.session.commit()
flash("Eintrag erfolgreich hinzugefügt")
return redirect(url_for("verlag.all"))
@bp.route("/verlag/update/<int:id>", methods=["POST"])
def update(id):
verlag = db.session.get(Verlag, id)
verlag.Verlag = request.form["form_Verlag"]
db.session.commit()
flash("Eintrag erfolgreich geändert")
return redirect(url_for("verlag.all"))
@bp.route("/verlag/delete/<int:id>")
def delete(id):
verlag = db.session.get(Verlag, id)
db.session.delete(verlag)
db.session.commit()
flash("Eintrag erfolgreich gelöscht")
return redirect(url_for("verlag.all"))