def __init__(self, request): BaseViewer.__init__(self, request) prepare_main_layout(self.request) self.clients = ClientManager(self.request.db) self.contacts = ContactManager(self.request.db) self._dispatch_table = dict( list=self.list_clients, add=self.add_client, delete=self.delete_client, confirmdelete=self.confirm_delete_client, editclient=self.edit_client, viewclient=self.view_client, ) self.context = self.request.matchdict["context"] self._view = self.context menu = BaseMenu() menu.set_header("Actions") url = self.url(context="add", id="somebody") menu.append_new_entry("Add Client", url) self.layout.options_menus = dict(actions=menu) self.dispatch()
class ClientViewer(BaseViewer): def __init__(self, request): BaseViewer.__init__(self, request) prepare_main_layout(self.request) self.clients = ClientManager(self.request.db) self.contacts = ContactManager(self.request.db) self._dispatch_table = dict( list=self.list_clients, add=self.add_client, delete=self.delete_client, confirmdelete=self.confirm_delete_client, editclient=self.edit_client, viewclient=self.view_client, ) self.context = self.request.matchdict["context"] self._view = self.context menu = BaseMenu() menu.set_header("Actions") url = self.url(context="add", id="somebody") menu.append_new_entry("Add Client", url) self.layout.options_menus = dict(actions=menu) self.dispatch() def list_clients(self): clients = self.clients.all() env = dict(clients=clients) template = "mslemon:templates/consult/listclients.mako" self.layout.content = self.render(template, env) def _make_form(self): schema = AddClientSchema() clist = self.contacts.all() choices = [(c.id, "%s %s" % (c.firstname, c.lastname)) for c in clist] schema["contact"].widget = make_select_widget(choices) form = deform.Form(schema, buttons=("submit",)) self.layout.resources.deform_auto_need(form) return schema, form def add_client(self): schema, form = self._make_form() if "submit" in self.request.POST: controls = self.request.POST.items() self.layout.subheader = "Client Submitted" try: data = form.validate(controls) except deform.ValidationFailure, e: self.layout.content = e.render() return name = data["name"] contact_id = int(data["contact"]) address = data["address"] description = data["description"] c = self.clients.add(name, contact_id, address, description) content = "<p>Client %s added.</p>" % c.name self.layout.content = content return rendered = form.render() self.layout.content = rendered self.layout.subheader = "Add a Client"