fixed BUGS 28/29 -> can now have empty year_published, fixed up limits to 1850-2100 now too and better error messages. Also auto-change when choose wishlist

This commit is contained in:
2023-06-13 18:53:03 +10:00
parent 9e4ee74775
commit ae2453d073
3 changed files with 48 additions and 11 deletions

2
BUGs
View File

@@ -2,8 +2,6 @@
#### BUGS (next-30)
BUG-27: created a new book, with a series, series was not added
BUG-28: choosing on wish list, does not alter the condition/covertype, etc. (anymore?)
BUG-29: saving a book on wish list needs a year_published (shouldn't)
### DB/back-end

56
main.py
View File

@@ -3,7 +3,7 @@ from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.exc import SQLAlchemyError
from flask_marshmallow import Marshmallow
from flask_bootstrap import Bootstrap
from wtforms import SubmitField, StringField, HiddenField, SelectField, IntegerField, TextAreaField, validators
from wtforms import SubmitField, StringField, HiddenField, SelectField, IntegerField, TextAreaField, validators, ValidationError
from flask_wtf import FlaskForm
#from flask_compress import Compress
from status import st, Status
@@ -65,6 +65,12 @@ from loan import Loan, LoanForm, LoanSchema
from series import Series, SeriesForm, SeriesSchema, ListOfSeriesWithMissingBooks, CalcAvgRating
from user import BDBUser
# hacky constants (FIX THIS)
ON_WISHLIST=2
COVERTYPE_NOT_APPLICABLE=4
CONDITION_NOT_APPLICABLE=4
####################################### CLASSES / DB model #######################################
class QuickParentBook:
parent=[]
@@ -223,7 +229,7 @@ class BookForm(FlaskForm):
owned = SelectField( 'owned' )
covertype = SelectField( 'covertype' )
condition = SelectField( 'condition' )
year_published = IntegerField('Year Published:', validators=[validators.DataRequired(), validators.NumberRange(min=1900, max=2100)] )
year_published = IntegerField('Year Published:', validators=[validators.Optional(), validators.NumberRange(min=1850, max=2100)] )
rating = SelectField( 'rating' )
notes = TextAreaField('Notes:')
blurb = TextAreaField('Blurb:')
@@ -232,6 +238,25 @@ class BookForm(FlaskForm):
add_sub = SubmitField('Add Sub-Book' )
rem_sub = SubmitField('Remove Sub-Book from Parent' )
def validate(self):
print( f"type: self.errors={type(self.errors)}" )
# if on wish list, just accept year_published
if int(self.owned.data) == ON_WISHLIST:
return True
else:
# we own/sold this, so covertype and condition cant be N/A
if int(self.covertype.data) == COVERTYPE_NOT_APPLICABLE:
return False
if int(self.condition.data) == CONDITION_NOT_APPLICABLE:
return False
# otherwise lets check that there is data and its in the right range
if self.year_published.data and self.year_published.data>1850 and int(self.year_published.raw_data[0]) < 2100:
return True
else:
return False
################################# helper functions ###################################
def GetBookIdFromSeriesByBookNum( series_id, book_num ):
tmp_book = Book_Series_Link.query.filter(Book_Series_Link.series_id==series_id,Book_Series_Link.book_num==book_num).all()
@@ -547,7 +572,11 @@ def new_book():
form.process()
return render_template("book.html", page_title='Create new (sub) Book', b=bb, books=None, book_form=form, author_list=author_list, genre_list=genre_list, alert="", message="", poss_series_list=ListOfSeriesWithMissingBooks() )
elif form.validate_on_submit() and len(book_genres):
book = Book( title=request.form['title'], owned=request.form['owned'], covertype=request.form['covertype'], condition=request.form['condition'], publisher=request.form['publisher'], year_published=request.form['year_published'], rating=request.form['rating'], notes=request.form['notes'], blurb=request.form['blurb'], genre=book_genres, author=book_authors )
if request.form['year_published'].isnumeric():
book = Book( title=request.form['title'], owned=request.form['owned'], covertype=request.form['covertype'], condition=request.form['condition'], publisher=request.form['publisher'], year_published=request.form['year_published'], rating=request.form['rating'], notes=request.form['notes'], blurb=request.form['blurb'], genre=book_genres, author=book_authors )
else:
book = Book( title=request.form['title'], owned=request.form['owned'], covertype=request.form['covertype'], condition=request.form['condition'], publisher=request.form['publisher'], rating=request.form['rating'], notes=request.form['notes'], blurb=request.form['blurb'], genre=book_genres, author=book_authors )
db.session.add(book)
db.session.commit()
# this is a sub-book we have added
@@ -574,13 +603,17 @@ def new_book():
return redirect( '/book/{}'.format(book.id) )
else:
alert="danger"
message="Failed to create Book"
message="Failed to create Book."
for field in form.errors:
message = "{}<br>{}={}".format( message, field, form.errors[field] )
if len(book_genres) == 0:
message = "{}<br>genre=book has to have a genre selected".format( message )
print( "ERROR: Failed to create book: {}".format(message) )
book = Book( title=request.form["title"], owned=request.form['owned'], covertype=request.form['covertype'], condition=request.form['condition'], publisher=request.form['publisher'], year_published=request.form['year_published'], rating=request.form['rating'], notes=request.form['notes'], blurb=request.form['blurb'], genre=book_genres, author=book_authors )
if request.form['year_published'].isnumeric():
book = Book( title=request.form["title"], owned=request.form['owned'], covertype=request.form['covertype'], condition=request.form['condition'], publisher=request.form['publisher'], year_published=request.form['year_published'], rating=request.form['rating'], notes=request.form['notes'], blurb=request.form['blurb'], genre=book_genres, author=book_authors )
else:
book = Book( title=request.form["title"], owned=request.form['owned'], covertype=request.form['covertype'], condition=request.form['condition'], publisher=request.form['publisher'], rating=request.form['rating'], notes=request.form['notes'], blurb=request.form['blurb'], genre=book_genres, author=book_authors )
if 'parent_id' in request.form:
bb=QuickParentBook()
bb.parent=[]
@@ -643,7 +676,8 @@ def book(id):
book.covertype = request.form['covertype']
book.condition = request.form['condition']
book.publisher = request.form['publisher']
book.year_published = request.form['year_published']
if request.form['year_published'].isnumeric():
book.year_published = request.form['year_published']
book.rating = request.form['rating']
book.notes = request.form['notes']
book.blurb = request.form['blurb']
@@ -715,9 +749,13 @@ def book(id):
st.SetMessage( "Successfully Updated Book (id={})".format(id) )
else:
st.SetAlert("danger")
message="Failed to update Book (id={})".format(id)
for field in book_form.errors:
message = "{}<br>{}={}".format( message, field, book_form.errors[field] )
message=f"Failed to update Book (id={id}). "
if not book_form.year_published.data:
message += f" year_published cannot be empty";
if int(book_form.condition.data) == CONDITION_NOT_APPLICABLE:
message += f" condition cannot be N/A";
if int(book_form.covertype.data) == COVERTYPE_NOT_APPLICABLE:
message += f" covertype cannot be N/A";
book = Book.query.get(id)
st.SetMessage(message)
else:

View File

@@ -436,6 +436,7 @@ function AddAuthorToBook(num) {
function() { $('#author-{{cnt.idx}}').prop( 'style', '' ) } )
{% set cnt.idx = cnt.idx+1 %}
{% endfor %}
$('#owned').click( function() { if( $("#owned option:selected").text() == 'On Wish List' ) { $('#covertype').val( $('#covertype option:last').val() ); $('#condition').val( $('#condition option:last').val() ); $('#year_published').val(''); $('#rating').val( $('#rating option:last').val() ) } } )
} )
</script>
{% endblock script_content %}