diff --git a/series.py b/series.py index e87b7b0..6fcc3c0 100644 --- a/series.py +++ b/series.py @@ -1,14 +1,15 @@ from wtforms import SubmitField, StringField, HiddenField, validators, TextAreaField, IntegerField from flask_wtf import FlaskForm -from flask import request, render_template +from flask import request, render_template, redirect from wtforms.fields.html5 import DateField from __main__ import db, app, ma +from status import st, Status ################################################################################ # Class describing Series in the database, and via sqlalchemy, connected to the DB as well ################################################################################ class Series(db.Model): - id = db.Column(db.Integer, unique=True, nullable=False, primary_key=True) + id = db.Column(db.Integer, db.Sequence('series_id_seq'), primary_key=True) title = db.Column(db.String(100), unique=False, nullable=False) num_books = db.Column(db.Integer, nullable=False) calcd_rating = db.Column(db.String(10), unique=False, nullable=False) @@ -37,6 +38,12 @@ class SeriesForm(FlaskForm): submit = SubmitField('Save' ) delete = SubmitField('Delete' ) +def CalcAvgRating(sid): + res=db.engine.execute("select round(avg(to_number(r.name, '99')),1) as rating from book b, rating r, series s, book_series_link bsl where s.id={} and s.id = bsl.series_id and bsl.book_id = b.id and b.rating = r.id and r.name ~ E'^\\\\d+$'".format(sid)) + for row in res: + print( row ) + return row.rating + ################################################################################ # Routes for series data # @@ -48,31 +55,47 @@ def seriess(): return render_template("seriess.html", seriess=seriess) ################################################################################ -# /series/ -> GET/POST(save or delete) -> shows/edits/delets a single -# series +# /series -> GET/POST -> creates a new series type and when created, takes you back to /seriess +################################################################################ +@app.route("/series", methods=["GET", "POST"]) +def new_series(): + form = SeriesForm(request.form) + if 'title' not in request.form: + return render_template("series.html", form=form, page_title='Create new Series' ) + else: + series = Series( title=request.form["title"], num_books=request.form["num_books"], note=request.form["note"], calcd_rating=0 ) + db.session.add(series) + db.session.commit() + st.SetMessage( "Created new Series (id={})".format(series.id) ) + return redirect( '/seriess' ) + +################################################################################ +# /series/ -> GET/POST(save or delete) -> shows/edits/delets a single series ################################################################################ @app.route("/series/", methods=["GET", "POST"]) def series(id): ### DDP: should this be request.form or request.values? - alert="Success" - series_form = SeriesForm(request.form) - if request.method == 'POST' and series_form.validate_on_submit(): - id = request.form['id'] + form = SeriesForm(request.form) + if request.method == 'POST' and form.validate(): series = Series.query.get(id) - try: - request.form['submit'] - except: - message="Sorry, Deleting unsupported at present" - alert="Danger" - else: + if 'delete' in request.form: + st.SetMessage("Successfully deleted (id={}, title={})".format( series.id, series.title ) ) + series = Series.query.filter(Series.id==id).delete() + if 'submit' in request.form: + st.SetMessage("Successfully Updated Series (id={})".format(id) ) series.title = request.form['title'] series.num_books = request.form['num_books'] -# series.calcd_rating = + series.calcd_rating = CalcAvgRating(id) series.note = request.form['note'] - db.session.commit() - message="Successfully Updated Series (id={})".format(id) + db.session.commit() + return redirect( '/seriess' ) else: series = Series.query.get(id) - series_form = SeriesForm(request.values, obj=series) - message="" - return render_template("series.html", series=series, alert=alert, message=message, series_form=series_form) + form = SeriesForm(request.values, obj=series) + return render_template("series.html", form=form, page_title='Edit Series' ) + +################################################################################ +# Gets the Series matching id from DB, helper func in jinja2 code to show books +################################################################################ +def GetSeriesById(id): + return Series.query.get(id).name diff --git a/templates/base.html b/templates/base.html index 6981cb8..9e6e4aa 100644 --- a/templates/base.html +++ b/templates/base.html @@ -45,7 +45,7 @@ diff --git a/templates/series.html b/templates/series.html index 36a802c..8eba1d9 100644 --- a/templates/series.html +++ b/templates/series.html @@ -2,7 +2,10 @@ {% block main_content %}
-

Series

Books in Series

+

{{page_title}}

+ {% if 'Create' not in page_title %} +

Books in Series

+ {% endif %}
{% if message|length %}
@@ -12,36 +15,42 @@
- {{ series_form.csrf_token }} - {{ series_form.id }} + {{ form.csrf_token }} + {{ form.id }}
- {{ series_form.title.label( class="col-lg-3 justify-content-end" ) }} - {{ series_form.title( class="form-control col-lg-9" ) }} + {{ form.title.label( class="col-lg-3 justify-content-end" ) }} + {{ form.title( class="form-control col-lg-9" ) }}
- {{ series_form.num_books.label( class="col-lg-3 justify-content-end" ) }} - {{ series_form.num_books( class="form-control col-lg-9" ) }} + {{ form.num_books.label( class="col-lg-3 justify-content-end" ) }} + {{ form.num_books( class="form-control col-lg-9" ) }}
- {{ series_form.calcd_rating.label( class="col-lg-3 justify-content-end" ) }} - {{ series_form.calcd_rating( class="form-control col-lg-9", readonly="true" ) }} + {{ form.calcd_rating.label( class="col-lg-3 justify-content-end" ) }} + {{ form.calcd_rating( class="form-control col-lg-9", readonly="true" ) }}
- {{ series_form.note.label( class="col-lg-3 justify-content-end" ) }} - {{ series_form.note( class="form-control col-lg-9", rows="5" ) }} + {{ form.note.label( class="col-lg-3 justify-content-end" ) }} + {{ form.note( class="form-control col-lg-9", rows="5" ) }}

- {{ series_form.delete( class="btn btn-outline-danger col-lg-2 offset-lg-1" )}} - {{ series_form.submit( class="btn btn-primary col-lg-2" )}} + {% if 'Create' in page_title %} + {{ form.submit( class="btn btn-primary offset-lg-3 col-lg-2" )}} + {% else %} + {{ form.delete( class="btn btn-outline-danger offset-lg-3 col-lg-2" )}} + {{ form.submit( class="btn btn-primary col-lg-2" )}} + {% endif %}
-
-
+ {% if 'Create' not in page_title %} +
+
+ {% endif %}
@@ -49,7 +58,7 @@ {% block script_content %} {% endblock script_content %}