forked from public/pyceo
159 lines
4.6 KiB
Python
159 lines
4.6 KiB
Python
import urwid
|
|
from ceo import members
|
|
from ceo.urwid import search
|
|
from ceo.urwid.widgets import *
|
|
from ceo.urwid.window import *
|
|
from sqlobject.sqlbuilder import *
|
|
from datetime import datetime
|
|
|
|
import ceo.library as lib
|
|
|
|
|
|
|
|
def library(data):
|
|
menu = make_menu([
|
|
("Checkout Book", checkout_book, None),
|
|
("Return Book", return_book, None),
|
|
# ("Search Books", search_books, None),
|
|
# ("Add Book", add_book, None),
|
|
("Back", raise_back, None),
|
|
])
|
|
push_window(menu, "Library")
|
|
|
|
def search_books(data):
|
|
menu = make_menu([
|
|
("Overdue Books", overdue_books, None),
|
|
])
|
|
push_window(menu, "Book Search")
|
|
|
|
def overdue_books(data):
|
|
None
|
|
|
|
def checkout_book(data):
|
|
push_wizard("Checkout", [CheckoutPage, BookSearchPage, ConfirmPage])
|
|
|
|
def return_book(data):
|
|
push_wizard("Checkout", [CheckinPage, ConfirmPage])
|
|
|
|
class BookSearchPage(WizardPanel):
|
|
def init_widgets(self):
|
|
self.search = None
|
|
self.state["book"] = None
|
|
self.isbn = SingleEdit("ISBN: ")
|
|
self.title = SingleEdit("Title: ")
|
|
|
|
self.widgets = [
|
|
urwid.Text("Book Search"),
|
|
urwid.Text("(Only one field required.)"),
|
|
urwid.Divider(),
|
|
self.isbn,
|
|
self.title
|
|
]
|
|
|
|
def check(self):
|
|
if self.state["book"] is None:
|
|
push_window(SearchPage(self.isbn.get_edit_text(),
|
|
self.title.get_edit_text(),
|
|
None,
|
|
self.state))
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
|
|
class CheckoutPage(WizardPanel):
|
|
def init_widgets(self):
|
|
self.state["user"] = "ERROR"
|
|
self.state["task"] = "sign_out"
|
|
self.user = SingleEdit("Username: ")
|
|
|
|
self.widgets = [
|
|
urwid.Text("Book Checkout"),
|
|
urwid.Divider(),
|
|
self.user,
|
|
]
|
|
|
|
def check(self):
|
|
self.state['user'] = self.user.get_edit_text()
|
|
|
|
class ConfirmPage(WizardPanel):
|
|
def init_widgets(self):
|
|
self.user = urwid.Text("Username: ")
|
|
self.book = urwid.Text("Book: ")
|
|
|
|
title = ""
|
|
if self.state["task"] and self.state["task"]=="sign_in":
|
|
title = "Checkin"
|
|
else:
|
|
title = "Checkout"
|
|
|
|
self.widgets = [
|
|
urwid.Text("Confirm " + title),
|
|
urwid.Divider(),
|
|
self.user,
|
|
self.book
|
|
]
|
|
|
|
def activate(self):
|
|
self.user.set_text("Username: " + self.state["user"])
|
|
if self.state["book"]:
|
|
self.book.set_text("Book: " + self.state["book"].title)
|
|
|
|
def check(self):
|
|
#TODO: Validate user at some point (preferrably user entry screen)
|
|
if self.state["task"] and self.state["task"]=="sign_in":
|
|
self.state["book"].sign_in(self.state["user"])
|
|
else:
|
|
self.state["book"].sign_out(self.state["user"])
|
|
pop_window()
|
|
|
|
|
|
class SearchPage(urwid.WidgetWrap):
|
|
def __init__(self, isbn, title, user, state):
|
|
self.state = state
|
|
books = []
|
|
widgets = []
|
|
if not title is None and not title=="":
|
|
books = lib.Book.select(LIKE(lib.Book.q.title, "%" + title + "%"))
|
|
elif not isbn is None and not isbn=="":
|
|
books = lib.Book.select(lib.Book.q.isbn==isbn)
|
|
elif not user is None and not user=="":
|
|
st = lib.Signout.select(AND(lib.Signout.q.username==user, lib.Signout.q.indate==None))
|
|
for s in st:
|
|
books.append(s.book)
|
|
|
|
for b in books:
|
|
widgets.append(urwid.AttrWrap(ButtonText(self.select, b, str(b)),
|
|
None, 'selected'))
|
|
widgets.append(urwid.Divider())
|
|
|
|
urwid.WidgetWrap.__init__(self, urwid.ListBox(widgets))
|
|
|
|
def select(self, book):
|
|
self.state["book"] = book
|
|
pop_window()
|
|
|
|
class CheckinPage(WizardPanel):
|
|
def init_widgets(self):
|
|
self.state["book"] = None
|
|
self.state["user"] = "ERROR"
|
|
self.state["task"] = "sign_in"
|
|
self.user = SingleEdit("Username: ")
|
|
|
|
self.widgets = [
|
|
urwid.Text("Book Checkin"),
|
|
urwid.Divider(),
|
|
self.user,
|
|
]
|
|
|
|
def check(self):
|
|
if self.state["book"] is None:
|
|
push_window(SearchPage(None,
|
|
None,
|
|
self.user.get_edit_text(),
|
|
self.state))
|
|
return True
|
|
else:
|
|
self.state["user"] = self.user.get_edit_text()
|
|
return False
|