improved display and storage of Werk.Erscheinungsdatum:
- values are displayed in three separate input fields that are being validated on submit - values are stored in the DB as either NULL or a string in format YYYY, YYYY-MM or YYYY-MM-DD - also renamed template
This commit is contained in:
parent
08f39e0d22
commit
ef7947ff41
@ -1,5 +1,6 @@
|
||||
{% extends 'base.html' %}
|
||||
{% set create_mode = (werk['ID'] == 0) %}
|
||||
|
||||
{% block title %}
|
||||
{% if create_mode %}
|
||||
Neues Werk erstellen
|
||||
@ -9,6 +10,27 @@ Werk bearbeiten
|
||||
{% endblock title %}
|
||||
|
||||
{% block script %}
|
||||
<script>
|
||||
function validate_date() {
|
||||
let t = document.getElementById("form_Erscheinungstag");
|
||||
let m = document.getElementById("form_Erscheinungsmonat");
|
||||
let j = document.getElementById("form_Erscheinungsjahr");
|
||||
t.setCustomValidity("");
|
||||
m.setCustomValidity("");
|
||||
console.log("This is function validate_date(): tag/monat/jahr is " + t.value + "/" + m.value + "/" + j.value); //DEBUG
|
||||
if ( t.value != "" ) {
|
||||
if ( j.value == "" || m.value == "" ) {
|
||||
t.setCustomValidity("wenn der Tag angegeben ist, müssen Monat und Jahr ebenfalls angegeben sein");
|
||||
t.reportValidity();
|
||||
}
|
||||
} else if ( m.value != "" ) {
|
||||
if ( j.value == "") {
|
||||
m.setCustomValidity("wenn der Monat angegeben ist, muss das Jahr ebenfalls angegeben sein");
|
||||
m.reportValidity();
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{% endblock script %}
|
||||
|
||||
{% block heading %}
|
||||
@ -65,8 +87,12 @@ Werk bearbeiten
|
||||
<input id="form_Preis" name="form_Preis" aria-label="Preis" placeholder="kein Preis" value="{{ werk['Preis'] }}" />
|
||||
</label>
|
||||
<label>
|
||||
Erscheinungsdatum
|
||||
<input type="date" id="form_Erscheinungsdatum" name="form_Erscheinungsdatum" aria-label="Erscheinungsdatum" placeholder="kein Datum" value="{{ werk['Datum'] }}" />
|
||||
Erscheinungsdatum (TT-MM-JJJJ, MM-JJJJ, JJJJ oder leer)
|
||||
<div class="grid">
|
||||
<input type="number" min="1" max="31" id="form_Erscheinungstag" name="form_Erscheinungstag" aria-label="Erscheinungstag" placeholder="Tag" value="{{ werk['Erscheinungsdatum'][8:] }}" />
|
||||
<input type="number" min="1" max="12" id="form_Erscheinungsmonat" name="form_Erscheinungsmonat" aria-label="Erscheinungsmonat" placeholder="Monat" value="{{ werk['Erscheinungsdatum'][5:7] }}" />
|
||||
<input type="number" min="1980" max="2100" id="form_Erscheinungsjahr" name="form_Erscheinungsjahr" aria-label="Erscheinungsjahr" placeholder="Jahr" value="{{ werk['Erscheinungsdatum'][:4] }}" />
|
||||
</div>
|
||||
</label>
|
||||
<label>
|
||||
ISBN-13
|
||||
@ -100,7 +126,7 @@ Werk bearbeiten
|
||||
</label>
|
||||
</div>
|
||||
<footer class="grid">
|
||||
<button id="form_submit" type="submit" formmethod="post" formaction="{% if create_mode %}{{ url_for('werk.create') }}{% else %}{{ url_for('werk.update', id=werk['ID']) }}{% endif %}">
|
||||
<button id="form_submit" type="submit" onclick="return validate_date()" formmethod="post" formaction="{% if create_mode %}{{ url_for('werk.create') }}{% else %}{{ url_for('werk.update', id=werk['ID']) }}{% endif %}">
|
||||
{% if create_mode %}Eintrag speichern{% else %}Änderungen speichern{% endif %}
|
||||
</button>
|
||||
<button type="reset" title="Alle Felder auf den vorherigen Zustand zurücksetzen">Alles zurücksetzen</button>
|
||||
@ -30,7 +30,7 @@ def all():
|
||||
def read(id):
|
||||
# id of zero -> create new entry
|
||||
if id == 0:
|
||||
return render_template("views/werk_full.html", werk={"ID": 0}, reihen=db.session.scalars(select(Reihe)), verlage=db.session.scalars(select(Verlag)), werksformen=db.session.scalars(select(Werksform)))
|
||||
return render_template("views/werk_detail.html", werk={"ID": 0, "Erscheinungsdatum": ""}, reihen=db.session.scalars(select(Reihe)), verlage=db.session.scalars(select(Verlag)), werksformen=db.session.scalars(select(Werksform)))
|
||||
# all other ids -> update existing entry
|
||||
w = db.session.get(Werk, id)
|
||||
werk = {
|
||||
@ -50,10 +50,13 @@ def read(id):
|
||||
"Klappentext": w.Klappentext or "",
|
||||
"Anmerkungen": w.Anmerkungen or ""
|
||||
}
|
||||
return render_template("views/werk_full.html", werk=werk, reihen=db.session.scalars(select(Reihe)), verlage=db.session.scalars(select(Verlag)), werksformen=db.session.scalars(select(Werksform)))
|
||||
return render_template("views/werk_detail.html", werk=werk, reihen=db.session.scalars(select(Reihe)), verlage=db.session.scalars(select(Verlag)), werksformen=db.session.scalars(select(Werksform)))
|
||||
|
||||
@bp.route("/werk/create", methods=["POST"])
|
||||
def create():
|
||||
datum = get_datum(request.form["form_Erscheinungsjahr"], request.form["form_Erscheinungsmonat"], request.form["form_Erscheinungstag"])
|
||||
print(f"/werk/create: datum is {datum}") #DEBUG
|
||||
# create new entry
|
||||
db.session.add(Werk(
|
||||
Titel = request.form["form_Titel"],
|
||||
Untertitel = request.form["form_Untertitel"] or None,
|
||||
@ -61,7 +64,7 @@ def create():
|
||||
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,
|
||||
Erscheinungsdatum = datum,
|
||||
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,
|
||||
@ -76,6 +79,8 @@ def create():
|
||||
|
||||
@bp.route("/werk/update/<int:id>", methods=["POST"])
|
||||
def update(id):
|
||||
datum = get_datum(request.form["form_Erscheinungsjahr"], request.form["form_Erscheinungsmonat"], request.form["form_Erscheinungstag"])
|
||||
print(f"/werk/update/{id}: datum is {datum}") #DEBUG
|
||||
# get record
|
||||
werk = db.session.get(Werk, id)
|
||||
# update values
|
||||
@ -85,7 +90,7 @@ def update(id):
|
||||
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.Erscheinungsdatum = datum
|
||||
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
|
||||
@ -105,3 +110,14 @@ def delete(id):
|
||||
db.session.commit()
|
||||
flash("Eintrag erfolgreich gelöscht")
|
||||
return redirect(url_for("werk.all"))
|
||||
|
||||
def get_datum(jahr, monat, tag):
|
||||
if tag != "":
|
||||
return "-".join([jahr, monat.zfill(2), tag.zfill(2)])
|
||||
elif monat != "":
|
||||
return "-".join([jahr, monat.zfill(2)])
|
||||
elif jahr != "":
|
||||
return jahr
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user