pyceo/ceo/urwid/library.py

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