reword BUG-42 to be more specific, BUG-41 allowing duplicate series links fixed

This commit is contained in:
2023-07-08 14:51:34 +10:00
parent 89966e0570
commit f361a03dc8
2 changed files with 49 additions and 29 deletions

6
BUGs
View File

@@ -1,9 +1,5 @@
#### BUGS (next-46)
BUG-41: failed to add a book with 2 x same series - implement same fix as for duplicate authors (search for processed_bal) - should
actually turn processed_bal into a function, as its used twice, then do similar for series
BUG-42: bug-7 removed as bug-41 covers the more useful version of this AND what we also need (this bug) is not allowing adding a
sub_book_num for a series that has already been taken -- not sure the DB enforces either
BUG-42: can add a sub_book_num for a series that has already been taken (or is invalid, e.g. 9999) -- DB does not enforce either
BUG-45: create a new book, fail (say for now year), and it loses the series you already set in the new html

72
main.py
View File

@@ -579,6 +579,36 @@ def RemoveDuplicateAuthorInForm( request ):
message="Removed duplicate Author!!!"
return ret, message
################################################################################
# Go through request.form, find series and remove any that are duplicates as
# that is not allowed / DB integrity issue. This just sets a message that
# will allow the book to be create/saved still, but the duplicate series will
# be removed
def RemoveDuplicateSeriesInForm( book, request ):
processed=[]
message=""
cnt=1
while f'bsl-book_id-{cnt}' in request.form:
print( f"cnt={cnt}, found series id = {request.form[f'bsl-series_id-{cnt}']} " )
if request.form[ f"bsl-series_id-{cnt}"] not in processed:
if book.IsParent():
newbsl=Book_Series_Link( book_id=book.id, series_id=request.form[f'bsl-series_id-{cnt}'] )
else:
newbsl=Book_Series_Link( book_id=book.id, series_id=request.form[f'bsl-series_id-{cnt}'], book_num=request.form[f'bsl-book_num-{cnt}'] )
# add the contains (null for book_num) bsl for the parent book
if book.IsChild():
parent_bsl=Book_Series_Link( book_id=book.parent[0].id, series_id=request.form[f'bsl-series_id-{cnt}'] )
db.session.add(parent_bsl)
db.session.add(newbsl)
processed.append( request.form[ f"bsl-series_id-{cnt}"] )
else:
message="Removed duplicate Series!!!"
cnt += 1
db.session.commit()
return message
################################################################################
# /book -> GET/POST -> creates a new book and when created, takes you back to
@@ -656,20 +686,13 @@ def new_book():
newbsl=Book_Series_Link( book_id=book.id, series_id=s.series_id, book_num=max_bn+1 )
db.session.add(newbsl)
db.session.commit()
message=RemoveDuplicateSeriesInForm( book, request )
if message == "":
st.SetMessage( "Created new Book ({})".format(book.title) )
else:
st.SetAlert("warning")
st.SetMessage( f"Created new Book ({book.title})<br>BUT {message}" )
cnt=1
for field in request.form:
if 'bsl-book_id-' in field and field != 'bsl-book_id-NUM':
cnt=int(re.findall( '\d+', field )[0])
newbsl=Book_Series_Link( book_id=book.id, series_id=request.form[ f"bsl-series_id-{cnt}"], book_num=request.form[ f"bsl-book_num-{cnt}"] )
db.session.add(newbsl)
db.session.commit()
cnt=cnt+1
return redirect( '/book/{}'.format(book.id) )
else:
alert="danger"
@@ -815,22 +838,23 @@ def book(id):
if book.IsChild():
Book_Series_Link.query.filter(Book_Series_Link.book_id == book.parent[0].id ).delete()
cnt=1
for field in request.form:
if 'bsl-book_id-' in field and field != 'bsl-book_id-NUM':
cnt=int(re.findall( '\d+', field )[0])
if book.IsParent():
newbsl=Book_Series_Link( book_id=request.form[f'bsl-book_id-{cnt}'],
series_id=request.form[f'bsl-series_id-{cnt}'] )
else:
newbsl=Book_Series_Link( book_id=request.form[f'bsl-book_id-{cnt}'],
series_id=request.form[f'bsl-series_id-{cnt}'],
book_num=request.form[f'bsl-book_num-{cnt}'] )
# add the contains (null for book_num) bsl for the parent book
if book.IsChild():
parent_bsl=Book_Series_Link( book_id=book.parent[0].id, series_id=request.form[f'bsl-series_id-{cnt}'] )
db.session.add(parent_bsl)
db.session.add(newbsl)
# cnt=1
# for field in request.form:
# if 'bsl-book_id-' in field and field != 'bsl-book_id-NUM':
# cnt=int(re.findall( '\d+', field )[0])
# if book.IsParent():
# newbsl=Book_Series_Link( book_id=request.form[f'bsl-book_id-{cnt}'],
# series_id=request.form[f'bsl-series_id-{cnt}'] )
# else:
# newbsl=Book_Series_Link( book_id=request.form[f'bsl-book_id-{cnt}'],
# series_id=request.form[f'bsl-series_id-{cnt}'],
# book_num=request.form[f'bsl-book_num-{cnt}'] )
# # add the contains (null for book_num) bsl for the parent book
# if book.IsChild():
# parent_bsl=Book_Series_Link( book_id=book.parent[0].id, series_id=request.form[f'bsl-series_id-{cnt}'] )
# db.session.add(parent_bsl)
# db.session.add(newbsl)
message=RemoveDuplicateSeriesInForm( book, request )
db.session.commit()
# reset rating on this/these series as the book has changed (and maybe the rating has changed)