Button-only forms, including BookView
The checkout process should be way more convenient now! Also, when viewing books (by pressing Enter), you can see their categories and see if they're checked out.
This commit is contained in:
parent
da52809b4d
commit
19b8869134
|
@ -330,6 +330,15 @@ def checkout_book(book_id, uwid):
|
|||
conn.commit()
|
||||
c.close()
|
||||
|
||||
def get_checkout_status(book_id):
|
||||
conn = sqlite3.connect(_checkout_db_file)
|
||||
c = conn.cursor()
|
||||
query = "SELECT uwid,date_out FROM "+ _checkout_table + " WHERE id = :id ;"
|
||||
c.execute(query, {"id": book_id})
|
||||
data = c.fetchone()
|
||||
c.close()
|
||||
if data: return {"uwid":data[0], "date_out":data[1]}
|
||||
return None
|
||||
|
||||
@permissions.check_permissions(permissions.PERMISSION_OFFICE)
|
||||
def return_book(book_id):
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import curses
|
||||
import library.database as db
|
||||
from library.interface.form import BookForm,CategoryForm,error_form,catch_error
|
||||
from library.interface.form import BookForm,BookView,CategoryForm,error_form,catch_error
|
||||
from library.exceptions import NoHighlightedEntry
|
||||
|
||||
class browserWindow:
|
||||
|
@ -277,10 +277,8 @@ class trashBrowser(browserWindow):
|
|||
def viewSelection(self,book):
|
||||
bookid = book['id']
|
||||
w=curses.newwin(1,1)
|
||||
bf = BookForm(w, self.hb, book, width=self.mx-10)
|
||||
bf = BookView(w, self.hb, book, width=self.mx-10)
|
||||
self.centreChild(w)
|
||||
bf.caption='Viewing Book '+str(bookid)
|
||||
bf.blabel='done'
|
||||
bf.event_loop()
|
||||
bf.clear()
|
||||
|
||||
|
@ -359,10 +357,8 @@ class bookBrowser(browserWindow):
|
|||
def viewSelection(self,book):
|
||||
bookid = book['id']
|
||||
w=curses.newwin(1,1)
|
||||
bf = BookForm(w,self.hb,book, width=self.mx-20)
|
||||
bf = BookView(w,self.hb,book, width=self.mx-20)
|
||||
self.centreChild(w)
|
||||
bf.caption='Viewing Book '+str(bookid)
|
||||
bf.blabel='done'
|
||||
bf.event_loop()
|
||||
bf.clear()
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import curses
|
||||
from library.interface.form import FormWindow,BookForm,catch_error_with
|
||||
from library.interface.form import FormWindow,BookForm,BookView,catch_error_with
|
||||
import library.database as db
|
||||
|
||||
|
||||
|
@ -18,7 +18,7 @@ class BookIDForm(FormWindow):
|
|||
self.clear()
|
||||
bookid = self.entries[0].value
|
||||
book = db.get_book(bookid)
|
||||
bf = BookForm(self.w, self.hb, book, width=self.mx-10)
|
||||
bf = BookView(self.w, self.hb, book, width=self.mx-10)
|
||||
(y,x) = self.w.getbegyx()
|
||||
(r,c) = self.w.getmaxyx()
|
||||
self.w.mvwin( y+(self.my-r)//2,x+(self.mx-c)//2)
|
||||
|
@ -42,6 +42,7 @@ class FinalCheck(FormWindow):
|
|||
caption = "Is this information correct?"
|
||||
blabel = "Check Out"
|
||||
labels = ["Username", "Book ID"]
|
||||
buttononly = True
|
||||
|
||||
def _return_values(self):
|
||||
return True
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
import curses
|
||||
from library.exceptions import LibrarianException
|
||||
from copy import copy
|
||||
import library.database as db
|
||||
|
||||
|
||||
class TextEntry:
|
||||
|
@ -121,6 +123,7 @@ class FormWindow:
|
|||
left = 0
|
||||
top = 2
|
||||
row = 2
|
||||
buttononly = False
|
||||
caption = "Form"
|
||||
blabel = "Done"
|
||||
labels = ["label1"]
|
||||
|
@ -144,8 +147,12 @@ class FormWindow:
|
|||
def event_loop(self):
|
||||
self.w.keypad(1)
|
||||
self.refresh()
|
||||
self.hl=0;
|
||||
self.entries[self.hl].gain_focus()
|
||||
self.hl=0
|
||||
if self.buttononly:
|
||||
self.bt = 1
|
||||
self._highlight_button()
|
||||
else:
|
||||
self.entries[self.hl].gain_focus()
|
||||
|
||||
ch = self.w.getch()
|
||||
while ch != 27:
|
||||
|
@ -215,6 +222,7 @@ class FormWindow:
|
|||
self.w.chgat(self.brow,1,self.mx-2,curses.A_NORMAL)
|
||||
|
||||
def _mv_focus(self,delta):
|
||||
if self.buttononly: return
|
||||
if self.bt==-1:
|
||||
self.entries[self.hl].lose_focus()
|
||||
else:
|
||||
|
@ -224,7 +232,6 @@ class FormWindow:
|
|||
self.hl = new
|
||||
if new == len(self.labels):
|
||||
self.bt = 1
|
||||
self.bt = min(self.bt,1)
|
||||
self._highlight_button()
|
||||
else:
|
||||
self.bt=-1
|
||||
|
@ -308,6 +315,24 @@ class BookForm(FormWindow):
|
|||
else:
|
||||
FormWindow.handle_input(self,ch)
|
||||
|
||||
class BookView(BookForm):
|
||||
blabel = "Done"
|
||||
buttononly = True
|
||||
labels = ["ISBN", "LCCN", "Title", "Subtitle", "Authors", "Edition",
|
||||
"Publisher", "Publish Date", "Publish Year", "Publish Month", "Publish location",
|
||||
"Pages", "Pagination", "Weight", "Categories", "Status"]
|
||||
|
||||
def __init__(self, window, helpbar, book, width=50):
|
||||
book = copy(book)
|
||||
book["categories"] = " - ".join([cat["category"] for cat in db.getBookCategories(book)])
|
||||
status = db.get_checkout_status(book["id"])
|
||||
if status:
|
||||
book["status"] = "Checked out by %s (%s)" % (status["uwid"], status["date_out"])
|
||||
else:
|
||||
book["status"] = "On shelf"
|
||||
self.caption = "Viewing Book " + str(book["id"])
|
||||
super().__init__(window, helpbar, book, width)
|
||||
|
||||
class CategoryForm(FormWindow):
|
||||
caption = "Add a Category"
|
||||
blabel = "Add"
|
||||
|
@ -316,21 +341,13 @@ class CategoryForm(FormWindow):
|
|||
def _return_values(self):
|
||||
return self.entries[0].value
|
||||
|
||||
class DummyTextEntry(TextEntry):
|
||||
def redraw(self): pass
|
||||
|
||||
class ErrorForm(FormWindow):
|
||||
caption = "Error"
|
||||
blabel = "OK"
|
||||
buttononly = True
|
||||
def __init__(self,window,helpbar,errortext,width=50):
|
||||
self.labels = errortext.split("\n")
|
||||
super().__init__(window, helpbar, width=width)
|
||||
self.bt = 1
|
||||
|
||||
def _make_entries(self):
|
||||
self.entries = []
|
||||
for e in range(len(self.labels)):
|
||||
self.entries.append(DummyTextEntry(self.w))
|
||||
|
||||
def redraw(self):
|
||||
self.w.box()
|
||||
|
@ -339,7 +356,6 @@ class ErrorForm(FormWindow):
|
|||
for l in self.labels:
|
||||
c = 2
|
||||
self.w.addstr(r+self.top,c,l)
|
||||
self.entries[r].redraw()
|
||||
r+=1
|
||||
self.w.addstr(self.brow,self.bcol[1], "<"+self.blabel+">")
|
||||
self.w.chgat(self.brow, self.bcol[1], len(self.blabel)+2, curses.A_REVERSE)
|
||||
|
|
Loading…
Reference in New Issue