[open-ils-commits] r919 - in servres/trunk: . conifer conifer/custom conifer/doc conifer/integration conifer/integration/auth_evergreen conifer/libsystems/evergreen conifer/libsystems/z3950 conifer/middleware conifer/plumbing conifer/static conifer/syrup conifer/syrup/views conifer/templates conifer/templates/auth conifer/templates/components conifer/templates/feeds conifer/templates/item rfc_sql (gfawcett)

svn at svn.open-ils.org svn at svn.open-ils.org
Wed Jul 14 20:55:38 EDT 2010


Author: gfawcett
Date: 2010-07-14 20:55:37 -0400 (Wed, 14 Jul 2010)
New Revision: 919

Added:
   servres/trunk/conifer/doc/grahams-init-fixture.json
   servres/trunk/conifer/integration/auth_evergreen/
   servres/trunk/conifer/integration/auth_evergreen/__init__.py
   servres/trunk/conifer/integration/auth_evergreen/django.py
   servres/trunk/conifer/integration/auth_evergreen/eg_xmlrpc.py
   servres/trunk/conifer/integration/uwindsor.py
   servres/trunk/conifer/integration/uwindsor_campus_info.py
   servres/trunk/conifer/plumbing/
   servres/trunk/conifer/plumbing/__init__.py
   servres/trunk/conifer/plumbing/genshi_support.py
   servres/trunk/conifer/plumbing/hooksystem.py
   servres/trunk/conifer/syrup/views/_generics.py
   servres/trunk/conifer/syrup/views/auth.py
   servres/trunk/conifer/syrup/views/genshi_namespace.py
Removed:
   servres/trunk/conifer/BRANCH-TODO.org
   servres/trunk/conifer/custom/README
   servres/trunk/conifer/custom/__init__.py
   servres/trunk/conifer/custom/auth_evergreen.py
   servres/trunk/conifer/custom/auth_evergreen_support.py
   servres/trunk/conifer/genshi_namespace.py
   servres/trunk/conifer/genshi_support.py
   servres/trunk/conifer/grahams-init-fixture.json
   servres/trunk/conifer/integration/_hooksystem.py
   servres/trunk/conifer/integration/hooks.py
   servres/trunk/conifer/middleware/__init__.py
   servres/trunk/conifer/middleware/genshi_locals.py
   servres/trunk/conifer/syrup/fuzzy_match.py
   servres/trunk/conifer/syrup/user_lookup.py
   servres/trunk/conifer/syrup/views/generics.py
   servres/trunk/rfc_sql/reserves.sql
Modified:
   servres/trunk/.gitignore
   servres/trunk/conifer/libsystems/evergreen/fm_IDL.xml
   servres/trunk/conifer/libsystems/evergreen/item_status.py
   servres/trunk/conifer/libsystems/evergreen/support.py
   servres/trunk/conifer/libsystems/z3950/marcxml.py
   servres/trunk/conifer/libsystems/z3950/pyz3950_search.py
   servres/trunk/conifer/settings.py
   servres/trunk/conifer/static/main.css
   servres/trunk/conifer/syrup/admin.py
   servres/trunk/conifer/syrup/integration.py
   servres/trunk/conifer/syrup/models.py
   servres/trunk/conifer/syrup/urls.py
   servres/trunk/conifer/syrup/views/__init__.py
   servres/trunk/conifer/syrup/views/_common.py
   servres/trunk/conifer/syrup/views/admin.py
   servres/trunk/conifer/syrup/views/feeds.py
   servres/trunk/conifer/syrup/views/items.py
   servres/trunk/conifer/syrup/views/search.py
   servres/trunk/conifer/syrup/views/sites.py
   servres/trunk/conifer/templates/auth/login.xhtml
   servres/trunk/conifer/templates/browse_index.xhtml
   servres/trunk/conifer/templates/components/site.xhtml
   servres/trunk/conifer/templates/edit_site.xhtml
   servres/trunk/conifer/templates/feeds/site_atom.xml
   servres/trunk/conifer/templates/item/item_add_cat_search.xhtml
   servres/trunk/conifer/templates/master.xhtml
   servres/trunk/conifer/templates/search_results.xhtml
   servres/trunk/conifer/templates/site_detail.xhtml
   servres/trunk/conifer/templates/tabbar.xhtml
   servres/trunk/conifer/templates/tabbar_anonymous.xhtml
   servres/trunk/conifer/templates/zsearch.xhtml
   servres/trunk/conifer/urls.py
Log:
The Great Cleanup

I've made some radical cuts and reorganizations to the source.  Most
functions are still working.

Modified: servres/trunk/.gitignore
===================================================================
--- servres/trunk/.gitignore	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/.gitignore	2010-07-15 00:55:37 UTC (rev 919)
@@ -11,4 +11,5 @@
 /conifer/.dired
 /conifer/local_settings.py
 /conifer/remodel.sqlite3
-*~
\ No newline at end of file
+*~
+/conifer/test.db

Deleted: servres/trunk/conifer/BRANCH-TODO.org
===================================================================
--- servres/trunk/conifer/BRANCH-TODO.org	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/BRANCH-TODO.org	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,38 +0,0 @@
-* Tasks for the =2010-02-campus-integration-reorg= branch
-
-  The goal of this branch is to reorganize and document the two major
-  integration points in Syrup: the library systems and the campus
-  information systems. Both of these integrations existed prior to the
-  branch, but were undocumented and messy.
-
-** The Evergreen-or-not question. 
-   - Prepare to sync with the =eg-schema-experiment= branch
-   - "in evergreen database" vs. "other database with OpenSRF calls"
-
-** Enumerate the ways that campus integration is currently used.
-   Put this in the campus-integration documentation.
-
-** A Library Integration module which is readable and documented
-   - integrate via local_settings.py
-   - Prepare to sync with the =eg-schema-experiment= branch
-
-** How much of the integration data belongs in the database?
-   Should the Django ADMINS list be pulled from the db? What about
-   Z39.50 targets? What are the deciding principles when figuring out
-   where to store config data?
-
-** Campus integration for departments.
-   - how to address the faculty/campus/dept/etc. hierarchy?
-   - list of departments
-   - look up department based on course-code
-   - instructors in a given department
-
-** question: Campus integration for terms?
-   Even just a "feed of terms you might not yet know about?"
-
-** question: when looking up membership info, always update membership table?
-   Should just asking an external campus system, 'What sections is
-   John in?' automatically add membership records for John, for
-   course-sites related to those sections? Should it also (only during
-   the active period of a term) drop John from current sections that
-   he's no longer part of?

Deleted: servres/trunk/conifer/custom/README
===================================================================
--- servres/trunk/conifer/custom/README	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/custom/README	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,4 +0,0 @@
-This directory is going away.
-
-Default integrations are being moved to 'conifer.integration'. The
-active integration modules are to be specified in local_settings.

Deleted: servres/trunk/conifer/custom/__init__.py
===================================================================

Deleted: servres/trunk/conifer/custom/auth_evergreen.py
===================================================================
--- servres/trunk/conifer/custom/auth_evergreen.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/custom/auth_evergreen.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,53 +0,0 @@
-from auth_evergreen_support import EvergreenAuthServer
-from django.contrib.auth.models import User
-from django.conf import settings
-
-class EvergreenAuthBackend(EvergreenAuthServer):
-
-    def __init__(self):
-        assert settings.EVERGREEN_GATEWAY_SERVER, \
-            'EvergreenAuthBackend requires settings.EVERGREEN_GATEWAY_SERVER'
-        EvergreenAuthServer.__init__(
-            self, settings.EVERGREEN_GATEWAY_SERVER)
-
-    def authenticate(self, username=None, password=None):
-        pwd_valid = self.login(username, password)
-        if pwd_valid:
-            return self.maybe_initialize_user(username)
-        return None
-
-    def get_user(self, user_id):
-        try:
-            return User.objects.get(pk=user_id)
-        except User.DoesNotExist:
-            return None
-
-    def maybe_initialize_user(self, username, look_local=True):
-        """Look up user in Django db; if not found, fetch user detail
-        from backend and set up a local user object. Return None if no
-        such user exists in either Django or the backend.
-
-        Setting look_local=False skips the Django search and heads
-        straight to the backend; this shaves a database call when
-        walking a set of backends to initialize a user. Skipping
-        look_local on a username that already exists in Django will
-        certainly lead to an integrity error.
-
-        This method is NOT part of the Django backend interface.
-        """
-        user = None
-        if look_local:
-            try:
-                user = User.objects.get(username=username)
-            except User.DoesNotExist:
-                pass
-        if user is None:
-            u = self.lookup(username)
-            if u:           # user found in Evergreen.
-                user = User(username=username,
-                            first_name = u['first_name'],
-                            last_name  = u['last_name'],
-                            email      = u['email'])
-                user.set_unusable_password()
-                user.save()
-        return user

Deleted: servres/trunk/conifer/custom/auth_evergreen_support.py
===================================================================
--- servres/trunk/conifer/custom/auth_evergreen_support.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/custom/auth_evergreen_support.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,86 +0,0 @@
-# auth_evergreen_support -- Authentication and user lookup against an
-# Evergreen XML-RPC server.
-
-# This is the Evergreen-specific stuff, with no Django dependencies.
-
-import xmlrpclib
-import md5
-import warnings
-import time
-
-#----------------------------------------------------------------------
-# support
-
-def do_request(proxy, method, *args):
-    # Against my test server, I would get intermittent
-    # ProtcolErrors. If we get one, try again, backing off gradually.
-    for attempt in range(5):
-        try:
-            return getattr(proxy, method)(*args)
-        except xmlrpclib.ProtocolError, pe:
-            warnings.warn('open-ils xml-rpc protocol error: trying again: ' + method)
-            time.sleep(0.1 * attempt)       # back off a bit and try again
-
-def _hsh(s):
-    return md5.new(s).hexdigest()
-
-#----------------------------------------------------------------------
-# main interface
-
-class EvergreenAuthServer(object):
-
-    def __init__(self, address, verbose=False):
-        self.address = address
-        self.verbose = verbose
-
-    def proxy(self, service):
-        server = xmlrpclib.Server(
-            'http://%s/xml-rpc/%s' % (self.address, service),
-            verbose=self.verbose)
-        def req(method, *args):
-            return do_request(server, method, *args)
-        return req
-
-    def login(self, username, password):
-        """Return True if the username/password are good, False otherwise."""
-        prx = self.proxy('open-ils.auth')
-        seed = prx('open-ils.auth.authenticate.init', username)
-        resp = prx('open-ils.auth.authenticate.complete',
-                   dict(username=username,
-                        password=_hsh(seed + _hsh(password)), 
-                        type='reserves'))
-        try:
-            # do we need the authkey for anything?
-            authkey = resp['payload']['authtoken']
-            return True
-        except KeyError:
-            return False
-
-    def lookup(self, username):
-        """Given a username, return a dict, or None. The dict must have
-        four keys (first_name, last_name, email, external_username), where
-        external_username value is the username parameter."""
-
-        prx = self.proxy('open-ils.actor')
-        r = prx('open-ils.actor.user.search.username', 'admin')
-        if not r:
-            return None
-        else:
-            r = r[0]['__data__']
-            f = lambda k: r.get(k)
-            person = dict((j, f(k)) for j,k in [('first_name', 'first_given_name'),
-                                                ('last_name', 'family_name'),
-                                                ('email', 'email'),
-                                                ('external_username', 'usrname')])
-            return person
-
-#----------------------------------------------------------------------
-# testing
-
-if __name__ == '__main__':
-    from pprint import pprint
-    address = '192.168.1.10'
-    egreen = EvergreenAuthServer(address)
-    username, password = 'admin', 'open-ils'
-    print egreen.login(username, password)
-    pprint(egreen.lookup('admin'))

Added: servres/trunk/conifer/doc/grahams-init-fixture.json
===================================================================
--- servres/trunk/conifer/doc/grahams-init-fixture.json	                        (rev 0)
+++ servres/trunk/conifer/doc/grahams-init-fixture.json	2010-07-15 00:55:37 UTC (rev 919)
@@ -0,0 +1 @@
+[{"pk": 22, "model": "auth.permission", "fields": {"codename": "add_logentry", "name": "Can add log entry", "content_type": 8}}, {"pk": 23, "model": "auth.permission", "fields": {"codename": "change_logentry", "name": "Can change log entry", "content_type": 8}}, {"pk": 24, "model": "auth.permission", "fields": {"codename": "delete_logentry", "name": "Can delete log entry", "content_type": 8}}, {"pk": 4, "model": "auth.permission", "fields": {"codename": "add_group", "name": "Can add group", "content_type": 2}}, {"pk": 10, "model": "auth.permission", "fields": {"codename": "add_message", "name": "Can add message", "content_type": 4}}, {"pk": 1, "model": "auth.permission", "fields": {"codename": "add_permission", "name": "Can add permission", "content_type": 1}}, {"pk": 7, "model": "auth.permission", "fields": {"codename": "add_user", "name": "Can add user", "content_type": 3}}, {"pk": 5, "model": "auth.permission", "fields": {"codename": "change_group", "name": "Can change group", "content_type": 2}}, {"pk": 11, "model": "auth.permission", "fields": {"codename": "change_message", "name": "Can change message", "content_type": 4}}, {"pk": 2, "model": "auth.permission", "fields": {"codename": "change_permission", "name": "Can change permission", "content_type": 1}}, {"pk": 8, "model": "auth.permission", "fields": {"codename": "change_user", "name": "Can change user", "content_type": 3}}, {"pk": 6, "model": "auth.permission", "fields": {"codename": "delete_group", "name": "Can delete group", "content_type": 2}}, {"pk": 12, "model": "auth.permission", "fields": {"codename": "delete_message", "name": "Can delete message", "content_type": 4}}, {"pk": 3, "model": "auth.permission", "fields": {"codename": "delete_permission", "name": "Can delete permission", "content_type": 1}}, {"pk": 9, "model": "auth.permission", "fields": {"codename": "delete_user", "name": "Can delete user", "content_type": 3}}, {"pk": 13, "model": "auth.permission", "fields": {"codename": "add_contenttype", "name": "Can add content type", "content_type": 5}}, {"pk": 14, "model": "auth.permission", "fields": {"codename": "change_contenttype", "name": "Can change content type", "content_type": 5}}, {"pk": 15, "model": "auth.permission", "fields": {"codename": "delete_contenttype", "name": "Can delete content type", "content_type": 5}}, {"pk": 16, "model": "auth.permission", "fields": {"codename": "add_session", "name": "Can add session", "content_type": 6}}, {"pk": 17, "model": "auth.permission", "fields": {"codename": "change_session", "name": "Can change session", "content_type": 6}}, {"pk": 18, "model": "auth.permission", "fields": {"codename": "delete_session", "name": "Can delete session", "content_type": 6}}, {"pk": 19, "model": "auth.permission", "fields": {"codename": "add_site", "name": "Can add site", "content_type": 7}}, {"pk": 20, "model": "auth.permission", "fields": {"codename": "change_site", "name": "Can change site", "content_type": 7}}, {"pk": 21, "model": "auth.permission", "fields": {"codename": "delete_site", "name": "Can delete site", "content_type": 7}}, {"pk": 25, "model": "auth.permission", "fields": {"codename": "add_migrationhistory", "name": "Can add migration history", "content_type": 9}}, {"pk": 26, "model": "auth.permission", "fields": {"codename": "change_migrationhistory", "name": "Can change migration history", "content_type": 9}}, {"pk": 27, "model": "auth.permission", "fields": {"codename": "delete_migrationhistory", "name": "Can delete migration history", "content_type": 9}}, {"pk": 46, "model": "auth.permission", "fields": {"codename": "add_config", "name": "Can add config", "content_type": 16}}, {"pk": 40, "model": "auth.permission", "fields": {"codename": "add_course", "name": "Can add course", "content_type": 14}}, {"pk": 37, "model": "auth.permission", "fields": {"codename": "add_department", "name": "Can add department", "content_type": 13}}, {"pk": 52, "model": "auth.permission", "fields": {"codename": "add_group", "name": "Can add group", "content_type": 18}}, {"pk": 58, "model": "auth.permission", "fields": {"codename": "add_item", "name": "Can add item", "content_type": 20}}, {"pk": 55, "model": "auth.permission", "fields": {"codename": "add_membership", "name": "Can add membership", "content_type": 19}}, {"pk": 31, "model": "auth.permission", "fields": {"codename": "add_servicedesk", "name": "Can add service desk", "content_type": 11}}, {"pk": 49, "model": "auth.permission", "fields": {"codename": "add_site", "name": "Can add site", "content_type": 17}}, {"pk": 34, "model": "auth.permission", "fields": {"codename": "add_term", "name": "Can add term", "content_type": 12}}, {"pk": 28, "model": "auth.permission", "fields": {"codename": "add_userprofile", "name": "Can add user profile", "content_type": 10}}, {"pk": 43, "model": "auth.permission", "fields": {"codename": "add_z3950target", "name": "Can add z3950 target", "content_type": 15}}, {"pk": 47, "model": "auth.permission", "fields": {"codename": "change_config", "name": "Can change config", "content_type": 16}}, {"pk": 41, "model": "auth.permission", "fields": {"codename": "change_course", "name": "Can change course", "content_type": 14}}, {"pk": 38, "model": "auth.permission", "fields": {"codename": "change_department", "name": "Can change department", "content_type": 13}}, {"pk": 53, "model": "auth.permission", "fields": {"codename": "change_group", "name": "Can change group", "content_type": 18}}, {"pk": 59, "model": "auth.permission", "fields": {"codename": "change_item", "name": "Can change item", "content_type": 20}}, {"pk": 56, "model": "auth.permission", "fields": {"codename": "change_membership", "name": "Can change membership", "content_type": 19}}, {"pk": 32, "model": "auth.permission", "fields": {"codename": "change_servicedesk", "name": "Can change service desk", "content_type": 11}}, {"pk": 50, "model": "auth.permission", "fields": {"codename": "change_site", "name": "Can change site", "content_type": 17}}, {"pk": 35, "model": "auth.permission", "fields": {"codename": "change_term", "name": "Can change term", "content_type": 12}}, {"pk": 29, "model": "auth.permission", "fields": {"codename": "change_userprofile", "name": "Can change user profile", "content_type": 10}}, {"pk": 44, "model": "auth.permission", "fields": {"codename": "change_z3950target", "name": "Can change z3950 target", "content_type": 15}}, {"pk": 48, "model": "auth.permission", "fields": {"codename": "delete_config", "name": "Can delete config", "content_type": 16}}, {"pk": 42, "model": "auth.permission", "fields": {"codename": "delete_course", "name": "Can delete course", "content_type": 14}}, {"pk": 39, "model": "auth.permission", "fields": {"codename": "delete_department", "name": "Can delete department", "content_type": 13}}, {"pk": 54, "model": "auth.permission", "fields": {"codename": "delete_group", "name": "Can delete group", "content_type": 18}}, {"pk": 60, "model": "auth.permission", "fields": {"codename": "delete_item", "name": "Can delete item", "content_type": 20}}, {"pk": 57, "model": "auth.permission", "fields": {"codename": "delete_membership", "name": "Can delete membership", "content_type": 19}}, {"pk": 33, "model": "auth.permission", "fields": {"codename": "delete_servicedesk", "name": "Can delete service desk", "content_type": 11}}, {"pk": 51, "model": "auth.permission", "fields": {"codename": "delete_site", "name": "Can delete site", "content_type": 17}}, {"pk": 36, "model": "auth.permission", "fields": {"codename": "delete_term", "name": "Can delete term", "content_type": 12}}, {"pk": 30, "model": "auth.permission", "fields": {"codename": "delete_userprofile", "name": "Can delete user profile", "content_type": 10}}, {"pk": 45, "model": "auth.permission", "fields": {"codename": "delete_z3950target", "name": "Can delete z3950 target", "content_type": 15}}, {"pk": 1, "model": "auth.user", "fields": {"username": "graham", "first_name": "Fawcett", "last_name": "Graham", "is_active": true, "is_superuser": true, "is_staff": true, "last_login": "2010-07-14 13:03:40", "groups": [], "user_permissions": [], "password": "sha1$c1214$8cc63f8cfc851f04d1058f8448d895d0532a48ad", "email": "fawcett at uwindsor.ca", "date_joined": "2010-07-09 09:15:14"}}, {"pk": 2, "model": "auth.user", "fields": {"username": "art", "first_name": "Art", "last_name": "Rhyno", "is_active": true, "is_superuser": true, "is_staff": true, "last_login": "2010-07-14 13:04:23", "groups": [], "user_permissions": [], "password": "sha1$d20ab$0c4d2b85765001fe8bfe5a206df3e5f208f9ebbe", "email": "artrhyno at uwindsor.ca", "date_joined": "2010-07-14 13:04:23"}}, {"pk": 3, "model": "auth.user", "fields": {"username": "mita", "first_name": "Mita", "last_name": "Williams", "is_active": true, "is_superuser": true, "is_staff": true, "last_login": "2010-07-14 13:04:45", "groups": [], "user_permissions": [], "password": "sha1$02883$d2d17afdf8bbb55a755b8aad175290a526d931d3", "email": "mita at uwindsor.ca", "date_joined": "2010-07-14 13:04:45"}}, {"pk": 16, "model": "contenttypes.contenttype", "fields": {"model": "config", "name": "config", "app_label": "syrup"}}, {"pk": 5, "model": "contenttypes.contenttype", "fields": {"model": "contenttype", "name": "content type", "app_label": "contenttypes"}}, {"pk": 14, "model": "contenttypes.contenttype", "fields": {"model": "course", "name": "course", "app_label": "syrup"}}, {"pk": 13, "model": "contenttypes.contenttype", "fields": {"model": "department", "name": "department", "app_label": "syrup"}}, {"pk": 2, "model": "contenttypes.contenttype", "fields": {"model": "group", "name": "group", "app_label": "auth"}}, {"pk": 18, "model": "contenttypes.contenttype", "fields": {"model": "group", "name": "group", "app_label": "syrup"}}, {"pk": 20, "model": "contenttypes.contenttype", "fields": {"model": "item", "name": "item", "app_label": "syrup"}}, {"pk": 8, "model": "contenttypes.contenttype", "fields": {"model": "logentry", "name": "log entry", "app_label": "admin"}}, {"pk": 19, "model": "contenttypes.contenttype", "fields": {"model": "membership", "name": "membership", "app_label": "syrup"}}, {"pk": 4, "model": "contenttypes.contenttype", "fields": {"model": "message", "name": "message", "app_label": "auth"}}, {"pk": 9, "model": "contenttypes.contenttype", "fields": {"model": "migrationhistory", "name": "migration history", "app_label": "south"}}, {"pk": 1, "model": "contenttypes.contenttype", "fields": {"model": "permission", "name": "permission", "app_label": "auth"}}, {"pk": 11, "model": "contenttypes.contenttype", "fields": {"model": "servicedesk", "name": "service desk", "app_label": "syrup"}}, {"pk": 6, "model": "contenttypes.contenttype", "fields": {"model": "session", "name": "session", "app_label": "sessions"}}, {"pk": 7, "model": "contenttypes.contenttype", "fields": {"model": "site", "name": "site", "app_label": "sites"}}, {"pk": 17, "model": "contenttypes.contenttype", "fields": {"model": "site", "name": "site", "app_label": "syrup"}}, {"pk": 12, "model": "contenttypes.contenttype", "fields": {"model": "term", "name": "term", "app_label": "syrup"}}, {"pk": 3, "model": "contenttypes.contenttype", "fields": {"model": "user", "name": "user", "app_label": "auth"}}, {"pk": 10, "model": "contenttypes.contenttype", "fields": {"model": "userprofile", "name": "user profile", "app_label": "syrup"}}, {"pk": 15, "model": "contenttypes.contenttype", "fields": {"model": "z3950target", "name": "z3950 target", "app_label": "syrup"}}, {"pk": "7ab9e962df78ff5840a97773342df8bf", "model": "sessions.session", "fields": {"expire_date": "2010-07-23 09:20:53", "session_data": "gAJ9cQEoVQp0ZXN0Y29va2llcQJVBndvcmtlZHEDVRJfYXV0aF91c2VyX2JhY2tlbmRxBFUpZGph\nbmdvLmNvbnRyaWIuYXV0aC5iYWNrZW5kcy5Nb2RlbEJhY2tlbmRxBVUNX2F1dGhfdXNlcl9pZHEG\nSwF1LjI2YWFjNGJiMTNlZDE1ZjlmYjQxMzZlMWJjZGIxMDAw\n"}}, {"pk": "cd02d11771c381c73799afc5f75ea750", "model": "sessions.session", "fields": {"expire_date": "2010-07-28 13:03:40", "session_data": "gAJ9cQEoVRJfYXV0aF91c2VyX2JhY2tlbmRxAlUpZGphbmdvLmNvbnRyaWIuYXV0aC5iYWNrZW5k\ncy5Nb2RlbEJhY2tlbmRxA1UNX2F1dGhfdXNlcl9pZHEESwF1LjdlNTBmMDAyMWI4ZWQ0ZWUwOGE1\nZTdkMDUxZWNmZGZj\n"}}, {"pk": 1, "model": "sites.site", "fields": {"domain": "example.com", "name": "example.com"}}, {"pk": 5, "model": "admin.logentry", "fields": {"action_flag": 2, "action_time": "2010-07-14 13:07:00", "object_repr": "graham", "object_id": "1", "change_message": "Changed first_name and last_name.", "user": 1, "content_type": 3}}, {"pk": 4, "model": "admin.logentry", "fields": {"action_flag": 2, "action_time": "2010-07-14 13:05:00", "object_repr": "mita", "object_id": "3", "change_message": "Changed first_name, last_name, email, is_staff and is_superuser.", "user": 1, "content_type": 3}}, {"pk": 3, "model": "admin.logentry", "fields": {"action_flag": 1, "action_time": "2010-07-14 13:04:45", "object_repr": "mita", "object_id": "3", "change_message": "", "user": 1, "content_type": 3}}, {"pk": 2, "model": "admin.logentry", "fields": {"action_flag": 2, "action_time": "2010-07-14 13:04:41", "object_repr": "art", "object_id": "2", "change_message": "Changed first_name, last_name, email, is_staff and is_superuser.", "user": 1, "content_type": 3}}, {"pk": 1, "model": "admin.logentry", "fields": {"action_flag": 1, "action_time": "2010-07-14 13:04:23", "object_repr": "art", "object_id": "2", "change_message": "", "user": 1, "content_type": 3}}, {"pk": 1, "model": "south.migrationhistory", "fields": {"applied": "2010-07-09 13:20:26", "app_name": "syrup", "migration": "0001_initial"}}, {"pk": 2, "model": "south.migrationhistory", "fields": {"applied": "2010-07-09 13:20:26", "app_name": "syrup", "migration": "0002_auto__add_field_site_term__add_field_site_course__add_unique_site_owne"}}, {"pk": 1, "model": "syrup.userprofile", "fields": {"last_email_notice": "2010-07-08 22:26:34", "created": "2010-07-08 22:26:34", "wants_email_notices": false, "last_modified": "2010-07-08 22:26:34", "user": 1, "ils_userid": null}}, {"pk": 1, "model": "syrup.servicedesk", "fields": {"active": true, "last_modified": "2010-07-08 22:30:22", "external_id": "", "name": "Leddy Library Reserves, Lower Level", "created": "2010-07-08 22:30:22"}}, {"pk": 1, "model": "syrup.term", "fields": {"code": "2010S", "name": "2010 Summer", "created": "2010-07-08 22:29:28", "finish": "2010-09-01", "start": "2010-05-01", "last_modified": "2010-07-08 22:29:28"}}, {"pk": 2, "model": "syrup.term", "fields": {"code": "2010F", "name": "2010 Fall", "created": "2010-07-08 22:29:50", "finish": "2010-12-31", "start": "2010-09-01", "last_modified": "2010-07-08 22:29:50"}}, {"pk": 3, "model": "syrup.term", "fields": {"code": "2011W", "name": "2011 Winter", "created": "2010-07-08 22:30:05", "finish": "2011-05-01", "start": "2011-01-01", "last_modified": "2010-07-08 22:30:05"}}, {"pk": 1, "model": "syrup.department", "fields": {"active": true, "service_desk": 1, "last_modified": "2010-07-08 22:30:34", "name": "Metaphysics", "created": "2010-07-08 22:30:34"}}, {"pk": 2, "model": "syrup.department", "fields": {"active": true, "service_desk": 1, "last_modified": "2010-07-08 22:30:44", "name": "Biology", "created": "2010-07-08 22:30:44"}}, {"pk": 3, "model": "syrup.department", "fields": {"active": true, "service_desk": 1, "last_modified": "2010-07-08 22:30:54", "name": "Computer Science", "created": "2010-07-08 22:30:54"}}, {"pk": 1, "model": "syrup.course", "fields": {"code": "99-100", "department": 1, "last_modified": "2010-07-08 22:31:24", "name": "Introduction to Thought", "created": "2010-07-08 22:31:24"}}, {"pk": 2, "model": "syrup.course", "fields": {"code": "99-200", "department": 1, "last_modified": "2010-07-08 22:31:36", "name": "Intermediate Thought", "created": "2010-07-08 22:31:36"}}, {"pk": 1, "model": "syrup.z3950target", "fields": {"name": "Concat/OWA", "database": "OWA", "syntax": "USMARC", "host": "zed.concat.ca", "active": true, "port": 210}}, {"pk": 2, "model": "syrup.z3950target", "fields": {"name": "LOC", "database": "Voyager", "syntax": "USMARC", "host": "z3950.loc.gov", "active": true, "port": 7090}}, {"pk": 1, "model": "syrup.config", "fields": {"name": "application.title", "value": "Reserv-o-Matic"}}, {"pk": 2, "model": "syrup.config", "fields": {"name": "default.desk", "value": "1"}}]

Deleted: servres/trunk/conifer/genshi_namespace.py
===================================================================
--- servres/trunk/conifer/genshi_namespace.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/genshi_namespace.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,35 +0,0 @@
-# genshi_namespace
-
-# Toplevel definitions in this module will be available in when
-# rendering a Genshi template.
-
-from conifer.integration._hooksystem import gethook, callhook
-import itertools
-from itertools import cycle
-from conifer.syrup import models
-import django.forms
-
-# this probably ought to be a method on User, or another model class.
-def instructor_url(instructor, suffix=''):
-    return '/instructor/%d/%s' % (instructor.id, suffix)
-
-# added to make department browse
-def department_url(department, suffix=''):
-    return '/department/%d/%s' % (department.id, suffix)
-
-
-def call_or_value(obj, dflt=None):
-    # This is used by the generics templates.
-    if callable(obj):
-        return obj() or dflt
-    else:
-        return obj or dflt
-
-
-def instructs(user, site):
-    try:
-        mbr = models.Member.objects.get(user=user, site=site)
-        return mbr.role in ('INSTR', 'PROXY')
-    except:
-        return False
-    

Deleted: servres/trunk/conifer/genshi_support.py
===================================================================
--- servres/trunk/conifer/genshi_support.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/genshi_support.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,52 +0,0 @@
-import genshi_namespace
-from django.http import HttpResponse, HttpRequest
-from genshi.template import TemplateLoader
-from genshi.filters import Translator
-from genshi.builder import tag
-import genshi.output
-from django.conf import settings
-import gettext
-from conifer.middleware.genshi_locals import get_request
-import genshi
-
-#------------------------------------------------------------
-# set up internationalization
-
-# if settings.USE_I18N:
-#     translations = gettext.GNUTranslations(
-#         file('locale/%s/LC_MESSAGES/conifer-syrup.mo' % settings.LANGUAGE_CODE))
-#     _ = translations.ugettext
-# else:
-#     _ = gettext.gettext
-
-from django.utils import translation
-_ = translation.ugettext
-
-def template_loaded(template):
-    if settings.USE_I18N:
-        template.filters.insert(0, Translator(_))
-
-
-dirs = [settings.HERE('templates')]
-
-loader = TemplateLoader(dirs, auto_reload=True, callback=template_loaded)
-
-def template(tname):
-    return loader.load(tname)
-           
-
-def _inject_django_things_into_namespace(request, ns):
-    ns['_'] = _
-    ns['request'] = request
-    ns['ROOT']    = request.META['SCRIPT_NAME']
-    ns['user'] = getattr(request, 'user', None)
-    ns.update(genshi_namespace.__dict__)
-
-#------------------------------------------------------------
-# main API
-
-def render(tname, _django_type=HttpResponse, _serialization='xhtml', **kwargs):
-    request = get_request()
-    _inject_django_things_into_namespace(request, kwargs)
-    return _django_type(template(tname).generate(**kwargs).render(_serialization, doctype='xhtml'))
-

Deleted: servres/trunk/conifer/grahams-init-fixture.json
===================================================================
--- servres/trunk/conifer/grahams-init-fixture.json	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/grahams-init-fixture.json	2010-07-15 00:55:37 UTC (rev 919)
@@ -1 +0,0 @@
-[{"pk": 22, "model": "auth.permission", "fields": {"codename": "add_logentry", "name": "Can add log entry", "content_type": 8}}, {"pk": 23, "model": "auth.permission", "fields": {"codename": "change_logentry", "name": "Can change log entry", "content_type": 8}}, {"pk": 24, "model": "auth.permission", "fields": {"codename": "delete_logentry", "name": "Can delete log entry", "content_type": 8}}, {"pk": 4, "model": "auth.permission", "fields": {"codename": "add_group", "name": "Can add group", "content_type": 2}}, {"pk": 10, "model": "auth.permission", "fields": {"codename": "add_message", "name": "Can add message", "content_type": 4}}, {"pk": 1, "model": "auth.permission", "fields": {"codename": "add_permission", "name": "Can add permission", "content_type": 1}}, {"pk": 7, "model": "auth.permission", "fields": {"codename": "add_user", "name": "Can add user", "content_type": 3}}, {"pk": 5, "model": "auth.permission", "fields": {"codename": "change_group", "name": "Can change group", "content_type": 2}}, {"pk": 11, "model": "auth.permission", "fields": {"codename": "change_message", "name": "Can change message", "content_type": 4}}, {"pk": 2, "model": "auth.permission", "fields": {"codename": "change_permission", "name": "Can change permission", "content_type": 1}}, {"pk": 8, "model": "auth.permission", "fields": {"codename": "change_user", "name": "Can change user", "content_type": 3}}, {"pk": 6, "model": "auth.permission", "fields": {"codename": "delete_group", "name": "Can delete group", "content_type": 2}}, {"pk": 12, "model": "auth.permission", "fields": {"codename": "delete_message", "name": "Can delete message", "content_type": 4}}, {"pk": 3, "model": "auth.permission", "fields": {"codename": "delete_permission", "name": "Can delete permission", "content_type": 1}}, {"pk": 9, "model": "auth.permission", "fields": {"codename": "delete_user", "name": "Can delete user", "content_type": 3}}, {"pk": 13, "model": "auth.permission", "fields": {"codename": "add_contenttype", "name": "Can add content type", "content_type": 5}}, {"pk": 14, "model": "auth.permission", "fields": {"codename": "change_contenttype", "name": "Can change content type", "content_type": 5}}, {"pk": 15, "model": "auth.permission", "fields": {"codename": "delete_contenttype", "name": "Can delete content type", "content_type": 5}}, {"pk": 16, "model": "auth.permission", "fields": {"codename": "add_session", "name": "Can add session", "content_type": 6}}, {"pk": 17, "model": "auth.permission", "fields": {"codename": "change_session", "name": "Can change session", "content_type": 6}}, {"pk": 18, "model": "auth.permission", "fields": {"codename": "delete_session", "name": "Can delete session", "content_type": 6}}, {"pk": 19, "model": "auth.permission", "fields": {"codename": "add_site", "name": "Can add site", "content_type": 7}}, {"pk": 20, "model": "auth.permission", "fields": {"codename": "change_site", "name": "Can change site", "content_type": 7}}, {"pk": 21, "model": "auth.permission", "fields": {"codename": "delete_site", "name": "Can delete site", "content_type": 7}}, {"pk": 25, "model": "auth.permission", "fields": {"codename": "add_migrationhistory", "name": "Can add migration history", "content_type": 9}}, {"pk": 26, "model": "auth.permission", "fields": {"codename": "change_migrationhistory", "name": "Can change migration history", "content_type": 9}}, {"pk": 27, "model": "auth.permission", "fields": {"codename": "delete_migrationhistory", "name": "Can delete migration history", "content_type": 9}}, {"pk": 46, "model": "auth.permission", "fields": {"codename": "add_config", "name": "Can add config", "content_type": 16}}, {"pk": 40, "model": "auth.permission", "fields": {"codename": "add_course", "name": "Can add course", "content_type": 14}}, {"pk": 37, "model": "auth.permission", "fields": {"codename": "add_department", "name": "Can add department", "content_type": 13}}, {"pk": 52, "model": "auth.permission", "fields": {"codename": "add_group", "name": "Can add group", "content_type": 18}}, {"pk": 58, "model": "auth.permission", "fields": {"codename": "add_item", "name": "Can add item", "content_type": 20}}, {"pk": 55, "model": "auth.permission", "fields": {"codename": "add_membership", "name": "Can add membership", "content_type": 19}}, {"pk": 31, "model": "auth.permission", "fields": {"codename": "add_servicedesk", "name": "Can add service desk", "content_type": 11}}, {"pk": 49, "model": "auth.permission", "fields": {"codename": "add_site", "name": "Can add site", "content_type": 17}}, {"pk": 34, "model": "auth.permission", "fields": {"codename": "add_term", "name": "Can add term", "content_type": 12}}, {"pk": 28, "model": "auth.permission", "fields": {"codename": "add_userprofile", "name": "Can add user profile", "content_type": 10}}, {"pk": 43, "model": "auth.permission", "fields": {"codename": "add_z3950target", "name": "Can add z3950 target", "content_type": 15}}, {"pk": 47, "model": "auth.permission", "fields": {"codename": "change_config", "name": "Can change config", "content_type": 16}}, {"pk": 41, "model": "auth.permission", "fields": {"codename": "change_course", "name": "Can change course", "content_type": 14}}, {"pk": 38, "model": "auth.permission", "fields": {"codename": "change_department", "name": "Can change department", "content_type": 13}}, {"pk": 53, "model": "auth.permission", "fields": {"codename": "change_group", "name": "Can change group", "content_type": 18}}, {"pk": 59, "model": "auth.permission", "fields": {"codename": "change_item", "name": "Can change item", "content_type": 20}}, {"pk": 56, "model": "auth.permission", "fields": {"codename": "change_membership", "name": "Can change membership", "content_type": 19}}, {"pk": 32, "model": "auth.permission", "fields": {"codename": "change_servicedesk", "name": "Can change service desk", "content_type": 11}}, {"pk": 50, "model": "auth.permission", "fields": {"codename": "change_site", "name": "Can change site", "content_type": 17}}, {"pk": 35, "model": "auth.permission", "fields": {"codename": "change_term", "name": "Can change term", "content_type": 12}}, {"pk": 29, "model": "auth.permission", "fields": {"codename": "change_userprofile", "name": "Can change user profile", "content_type": 10}}, {"pk": 44, "model": "auth.permission", "fields": {"codename": "change_z3950target", "name": "Can change z3950 target", "content_type": 15}}, {"pk": 48, "model": "auth.permission", "fields": {"codename": "delete_config", "name": "Can delete config", "content_type": 16}}, {"pk": 42, "model": "auth.permission", "fields": {"codename": "delete_course", "name": "Can delete course", "content_type": 14}}, {"pk": 39, "model": "auth.permission", "fields": {"codename": "delete_department", "name": "Can delete department", "content_type": 13}}, {"pk": 54, "model": "auth.permission", "fields": {"codename": "delete_group", "name": "Can delete group", "content_type": 18}}, {"pk": 60, "model": "auth.permission", "fields": {"codename": "delete_item", "name": "Can delete item", "content_type": 20}}, {"pk": 57, "model": "auth.permission", "fields": {"codename": "delete_membership", "name": "Can delete membership", "content_type": 19}}, {"pk": 33, "model": "auth.permission", "fields": {"codename": "delete_servicedesk", "name": "Can delete service desk", "content_type": 11}}, {"pk": 51, "model": "auth.permission", "fields": {"codename": "delete_site", "name": "Can delete site", "content_type": 17}}, {"pk": 36, "model": "auth.permission", "fields": {"codename": "delete_term", "name": "Can delete term", "content_type": 12}}, {"pk": 30, "model": "auth.permission", "fields": {"codename": "delete_userprofile", "name": "Can delete user profile", "content_type": 10}}, {"pk": 45, "model": "auth.permission", "fields": {"codename": "delete_z3950target", "name": "Can delete z3950 target", "content_type": 15}}, {"pk": 1, "model": "auth.user", "fields": {"username": "graham", "first_name": "", "last_name": "", "is_active": true, "is_superuser": true, "is_staff": true, "last_login": "2010-07-09 09:20:52", "groups": [], "user_permissions": [], "password": "sha1$c1214$8cc63f8cfc851f04d1058f8448d895d0532a48ad", "email": "fawcett at uwindsor.ca", "date_joined": "2010-07-09 09:15:14"}}, {"pk": 16, "model": "contenttypes.contenttype", "fields": {"model": "config", "name": "config", "app_label": "syrup"}}, {"pk": 5, "model": "contenttypes.contenttype", "fields": {"model": "contenttype", "name": "content type", "app_label": "contenttypes"}}, {"pk": 14, "model": "contenttypes.contenttype", "fields": {"model": "course", "name": "course", "app_label": "syrup"}}, {"pk": 13, "model": "contenttypes.contenttype", "fields": {"model": "department", "name": "department", "app_label": "syrup"}}, {"pk": 2, "model": "contenttypes.contenttype", "fields": {"model": "group", "name": "group", "app_label": "auth"}}, {"pk": 18, "model": "contenttypes.contenttype", "fields": {"model": "group", "name": "group", "app_label": "syrup"}}, {"pk": 20, "model": "contenttypes.contenttype", "fields": {"model": "item", "name": "item", "app_label": "syrup"}}, {"pk": 8, "model": "contenttypes.contenttype", "fields": {"model": "logentry", "name": "log entry", "app_label": "admin"}}, {"pk": 19, "model": "contenttypes.contenttype", "fields": {"model": "membership", "name": "membership", "app_label": "syrup"}}, {"pk": 4, "model": "contenttypes.contenttype", "fields": {"model": "message", "name": "message", "app_label": "auth"}}, {"pk": 9, "model": "contenttypes.contenttype", "fields": {"model": "migrationhistory", "name": "migration history", "app_label": "south"}}, {"pk": 1, "model": "contenttypes.contenttype", "fields": {"model": "permission", "name": "permission", "app_label": "auth"}}, {"pk": 11, "model": "contenttypes.contenttype", "fields": {"model": "servicedesk", "name": "service desk", "app_label": "syrup"}}, {"pk": 6, "model": "contenttypes.contenttype", "fields": {"model": "session", "name": "session", "app_label": "sessions"}}, {"pk": 7, "model": "contenttypes.contenttype", "fields": {"model": "site", "name": "site", "app_label": "sites"}}, {"pk": 17, "model": "contenttypes.contenttype", "fields": {"model": "site", "name": "site", "app_label": "syrup"}}, {"pk": 12, "model": "contenttypes.contenttype", "fields": {"model": "term", "name": "term", "app_label": "syrup"}}, {"pk": 3, "model": "contenttypes.contenttype", "fields": {"model": "user", "name": "user", "app_label": "auth"}}, {"pk": 10, "model": "contenttypes.contenttype", "fields": {"model": "userprofile", "name": "user profile", "app_label": "syrup"}}, {"pk": 15, "model": "contenttypes.contenttype", "fields": {"model": "z3950target", "name": "z3950 target", "app_label": "syrup"}}, {"pk": "7ab9e962df78ff5840a97773342df8bf", "model": "sessions.session", "fields": {"expire_date": "2010-07-23 09:20:53", "session_data": "gAJ9cQEoVQp0ZXN0Y29va2llcQJVBndvcmtlZHEDVRJfYXV0aF91c2VyX2JhY2tlbmRxBFUpZGph\nbmdvLmNvbnRyaWIuYXV0aC5iYWNrZW5kcy5Nb2RlbEJhY2tlbmRxBVUNX2F1dGhfdXNlcl9pZHEG\nSwF1LjI2YWFjNGJiMTNlZDE1ZjlmYjQxMzZlMWJjZGIxMDAw\n"}}, {"pk": 1, "model": "sites.site", "fields": {"domain": "example.com", "name": "example.com"}}, {"pk": 1, "model": "south.migrationhistory", "fields": {"applied": "2010-07-09 13:20:26", "app_name": "syrup", "migration": "0001_initial"}}, {"pk": 2, "model": "south.migrationhistory", "fields": {"applied": "2010-07-09 13:20:26", "app_name": "syrup", "migration": "0002_auto__add_field_site_term__add_field_site_course__add_unique_site_owne"}}, {"pk": 1, "model": "syrup.userprofile", "fields": {"last_email_notice": "2010-07-08 22:26:34", "created": "2010-07-08 22:26:34", "wants_email_notices": false, "last_modified": "2010-07-08 22:26:34", "user": 1, "ils_userid": null}}, {"pk": 1, "model": "syrup.servicedesk", "fields": {"active": true, "last_modified": "2010-07-08 22:30:22", "external_id": "", "name": "Leddy Library Reserves, Lower Level", "created": "2010-07-08 22:30:22"}}, {"pk": 1, "model": "syrup.term", "fields": {"code": "2010S", "name": "2010 Summer", "created": "2010-07-08 22:29:28", "finish": "2010-09-01", "start": "2010-05-01", "last_modified": "2010-07-08 22:29:28"}}, {"pk": 2, "model": "syrup.term", "fields": {"code": "2010F", "name": "2010 Fall", "created": "2010-07-08 22:29:50", "finish": "2010-12-31", "start": "2010-09-01", "last_modified": "2010-07-08 22:29:50"}}, {"pk": 3, "model": "syrup.term", "fields": {"code": "2011W", "name": "2011 Winter", "created": "2010-07-08 22:30:05", "finish": "2011-05-01", "start": "2011-01-01", "last_modified": "2010-07-08 22:30:05"}}, {"pk": 1, "model": "syrup.department", "fields": {"active": true, "service_desk": 1, "last_modified": "2010-07-08 22:30:34", "name": "Metaphysics", "created": "2010-07-08 22:30:34"}}, {"pk": 2, "model": "syrup.department", "fields": {"active": true, "service_desk": 1, "last_modified": "2010-07-08 22:30:44", "name": "Biology", "created": "2010-07-08 22:30:44"}}, {"pk": 3, "model": "syrup.department", "fields": {"active": true, "service_desk": 1, "last_modified": "2010-07-08 22:30:54", "name": "Computer Science", "created": "2010-07-08 22:30:54"}}, {"pk": 1, "model": "syrup.course", "fields": {"code": "99-100", "department": 1, "last_modified": "2010-07-08 22:31:24", "name": "Introduction to Thought", "created": "2010-07-08 22:31:24"}}, {"pk": 2, "model": "syrup.course", "fields": {"code": "99-200", "department": 1, "last_modified": "2010-07-08 22:31:36", "name": "Intermediate Thought", "created": "2010-07-08 22:31:36"}}, {"pk": 1, "model": "syrup.z3950target", "fields": {"name": "zed/OWA", "database": "OWA", "syntax": "USMARC", "host": "zed.concat.ca", "active": true, "port": 210}}, {"pk": 1, "model": "syrup.config", "fields": {"name": "application.title", "value": "Reserv-o-Matic"}}, {"pk": 2, "model": "syrup.config", "fields": {"name": "default.desk", "value": "1"}}]

Deleted: servres/trunk/conifer/integration/_hooksystem.py
===================================================================
--- servres/trunk/conifer/integration/_hooksystem.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/integration/_hooksystem.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,21 +0,0 @@
-# TODO: decide whether or not to use this!
-
-import warnings
-import conifer.syrup.integration as HOOKS
-
-__all__ = ['callhook', 'callhook_required', 'gethook']
-
-def gethook(name, default=None):
-    print dir(HOOKS)
-    print (name, getattr(HOOKS, name))
-    return getattr(HOOKS, name) or default
-
-def callhook_required(name, *args, **kwargs):
-    f = getattr(HOOKS, name)
-    assert f, 'implementation for hook %r required but not found' % name
-    return f(*args, **kwargs)
-
-def callhook(name, *args, **kwargs):
-    f = getattr(HOOKS, name)
-    if f:
-        return f(*args, **kwargs)

Copied: servres/trunk/conifer/integration/auth_evergreen/__init__.py (from rev 918, servres/trunk/conifer/custom/__init__.py)
===================================================================

Copied: servres/trunk/conifer/integration/auth_evergreen/django.py (from rev 918, servres/trunk/conifer/custom/auth_evergreen.py)
===================================================================
--- servres/trunk/conifer/integration/auth_evergreen/django.py	                        (rev 0)
+++ servres/trunk/conifer/integration/auth_evergreen/django.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -0,0 +1,53 @@
+from eg_xmlrpc import EvergreenAuthServer
+from django.contrib.auth.models import User
+from django.conf import settings
+
+class EvergreenAuthBackend(EvergreenAuthServer):
+
+    def __init__(self):
+        assert settings.EVERGREEN_GATEWAY_SERVER, \
+            'EvergreenAuthBackend requires settings.EVERGREEN_GATEWAY_SERVER'
+        EvergreenAuthServer.__init__(
+            self, settings.EVERGREEN_GATEWAY_SERVER)
+
+    def authenticate(self, username=None, password=None):
+        pwd_valid = self.login(username, password)
+        if pwd_valid:
+            return self.maybe_initialize_user(username)
+        return None
+
+    def get_user(self, user_id):
+        try:
+            return User.objects.get(pk=user_id)
+        except User.DoesNotExist:
+            return None
+
+    def maybe_initialize_user(self, username, look_local=True):
+        """Look up user in Django db; if not found, fetch user detail
+        from backend and set up a local user object. Return None if no
+        such user exists in either Django or the backend.
+
+        Setting look_local=False skips the Django search and heads
+        straight to the backend; this shaves a database call when
+        walking a set of backends to initialize a user. Skipping
+        look_local on a username that already exists in Django will
+        certainly lead to an integrity error.
+
+        This method is NOT part of the Django backend interface.
+        """
+        user = None
+        if look_local:
+            try:
+                user = User.objects.get(username=username)
+            except User.DoesNotExist:
+                pass
+        if user is None:
+            u = self.lookup(username)
+            if u:           # user found in Evergreen.
+                user = User(username=username,
+                            first_name = u['first_name'],
+                            last_name  = u['last_name'],
+                            email      = u['email'])
+                user.set_unusable_password()
+                user.save()
+        return user

Copied: servres/trunk/conifer/integration/auth_evergreen/eg_xmlrpc.py (from rev 918, servres/trunk/conifer/custom/auth_evergreen_support.py)
===================================================================
--- servres/trunk/conifer/integration/auth_evergreen/eg_xmlrpc.py	                        (rev 0)
+++ servres/trunk/conifer/integration/auth_evergreen/eg_xmlrpc.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -0,0 +1,86 @@
+# auth_evergreen_support -- Authentication and user lookup against an
+# Evergreen XML-RPC server.
+
+# This is the Evergreen-specific stuff, with no Django dependencies.
+
+import xmlrpclib
+import md5
+import warnings
+import time
+
+#----------------------------------------------------------------------
+# support
+
+def do_request(proxy, method, *args):
+    # Against my test server, I would get intermittent
+    # ProtcolErrors. If we get one, try again, backing off gradually.
+    for attempt in range(5):
+        try:
+            return getattr(proxy, method)(*args)
+        except xmlrpclib.ProtocolError, pe:
+            warnings.warn('open-ils xml-rpc protocol error: trying again: ' + method)
+            time.sleep(0.1 * attempt)       # back off a bit and try again
+
+def _hsh(s):
+    return md5.new(s).hexdigest()
+
+#----------------------------------------------------------------------
+# main interface
+
+class EvergreenAuthServer(object):
+
+    def __init__(self, address, verbose=False):
+        self.address = address
+        self.verbose = verbose
+
+    def proxy(self, service):
+        server = xmlrpclib.Server(
+            'http://%s/xml-rpc/%s' % (self.address, service),
+            verbose=self.verbose)
+        def req(method, *args):
+            return do_request(server, method, *args)
+        return req
+
+    def login(self, username, password):
+        """Return True if the username/password are good, False otherwise."""
+        prx = self.proxy('open-ils.auth')
+        seed = prx('open-ils.auth.authenticate.init', username)
+        resp = prx('open-ils.auth.authenticate.complete',
+                   dict(username=username,
+                        password=_hsh(seed + _hsh(password)), 
+                        type='reserves'))
+        try:
+            # do we need the authkey for anything?
+            authkey = resp['payload']['authtoken']
+            return True
+        except KeyError:
+            return False
+
+    def lookup(self, username):
+        """Given a username, return a dict, or None. The dict must have
+        four keys (first_name, last_name, email, external_username), where
+        external_username value is the username parameter."""
+
+        prx = self.proxy('open-ils.actor')
+        r = prx('open-ils.actor.user.search.username', 'admin')
+        if not r:
+            return None
+        else:
+            r = r[0]['__data__']
+            f = lambda k: r.get(k)
+            person = dict((j, f(k)) for j,k in [('first_name', 'first_given_name'),
+                                                ('last_name', 'family_name'),
+                                                ('email', 'email'),
+                                                ('external_username', 'usrname')])
+            return person
+
+#----------------------------------------------------------------------
+# testing
+
+if __name__ == '__main__':
+    from pprint import pprint
+    address = '192.168.1.10'
+    egreen = EvergreenAuthServer(address)
+    username, password = 'admin', 'open-ils'
+    print egreen.login(username, password)
+    pprint(egreen.lookup('admin'))

Deleted: servres/trunk/conifer/integration/hooks.py
===================================================================
--- servres/trunk/conifer/integration/hooks.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/integration/hooks.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,59 +0,0 @@
-from datetime import date
-from django.conf import settings
-from conifer.libsystems.evergreen.support import initialize
-from conifer.libsystems.z3950 import marcxml as M
-from conifer.libsystems.evergreen import item_status as I
-from conifer.libsystems.z3950 import pyz3950_search as PZ
-
-def department_course_catalogue():
-    """
-    Return a list of rows representing all known, active courses and
-    the departments to which they belong. Each row should be a tuple
-    in the form: ('Department name', 'course-code', 'Course name').
-    """
-    return [
-        ('Arts','01-01-209','Ethics in the Professions'),
-        ('Social Work','02-47-204','Issues & Perspectives in Social Welfare'),
-        ('Social Work','02-47-211','Prof Comm in Gen. Social Work Practice'),
-        ('Social Work','02-47-336','Theory and Practice Social Work I'),
-        ('Social Work','02-47-361','Field Practice I - A'),
-        ('Social Work','02-47-362','Field Practice I - B'),
-        ('Social Work','02-47-370','Mothering and Motherhood'),
-        ('Social Work','02-47-456','Social Work and Health'),
-        ]
-
-def term_catalogue():
-    """
-    Return a list of rows representing all known terms. Each row
-    should be a tuple in the form: ('term-code', 'term-name',
-    'start-date', 'end-date'), where the dates are instances of the
-    datetime.date class.
-    """
-    return [
-        ('2011S', '2011 Summer', date(2011,5,1), date(2011,9,1)),
-        ('2011F', '2011 Fall', date(2011,9,1), date(2011,12,31)),
-        ]
-
-
-#--------------------------------------------------
-# ILS integration
-
-EG_BASE = 'http://%s/' % settings.EVERGREEN_GATEWAY_SERVER
-initialize(EG_BASE)
-
-
-def item_status(item):
-    if 'psychology' in item.title.lower():
-        return (8, 4, 2)
-    else:
-        return (2, 0, 0)
-
-
-def cat_search(query, start=1, limit=10):
-    if query.startswith(EG_BASE):
-        results = M.marcxml_to_records(I.url_to_marcxml(query))
-        numhits = len(results)
-    else:
-        cat_host, cat_port, cat_db = settings.Z3950_CONFIG
-        results, numhits = PZ.search(cat_host, cat_port, cat_db, query, start, limit)
-    return results, numhits

Added: servres/trunk/conifer/integration/uwindsor.py
===================================================================
--- servres/trunk/conifer/integration/uwindsor.py	                        (rev 0)
+++ servres/trunk/conifer/integration/uwindsor.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -0,0 +1,113 @@
+from datetime import date
+from django.conf import settings
+from conifer.libsystems.evergreen.support import initialize, E1
+from conifer.libsystems.z3950 import marcxml as M
+from conifer.libsystems.evergreen import item_status as I
+from conifer.libsystems.z3950 import pyz3950_search as PZ
+from xml.etree import ElementTree as ET
+import re
+
+
+def department_course_catalogue():
+    """
+    Return a list of rows representing all known, active courses and
+    the departments to which they belong. Each row should be a tuple
+    in the form: ('Department name', 'course-code', 'Course name').
+    """
+    return [
+        ('Arts','01-01-209','Ethics in the Professions'),
+        ('Social Work','02-47-204','Issues & Perspectives in Social Welfare'),
+        ('Social Work','02-47-211','Prof Comm in Gen. Social Work Practice'),
+        ('Social Work','02-47-336','Theory and Practice Social Work I'),
+        ('Social Work','02-47-361','Field Practice I - A'),
+        ('Social Work','02-47-362','Field Practice I - B'),
+        ('Social Work','02-47-370','Mothering and Motherhood'),
+        ('Social Work','02-47-456','Social Work and Health'),
+        ]
+
+def term_catalogue():
+    """
+    Return a list of rows representing all known terms. Each row
+    should be a tuple in the form: ('term-code', 'term-name',
+    'start-date', 'end-date'), where the dates are instances of the
+    datetime.date class.
+    """
+    return [
+        ('2011S', '2011 Summer', date(2011,5,1), date(2011,9,1)),
+        ('2011F', '2011 Fall', date(2011,9,1), date(2011,12,31)),
+        ]
+
+
+#--------------------------------------------------
+# ILS integration
+
+EG_BASE = 'http://%s/' % settings.EVERGREEN_GATEWAY_SERVER
+initialize(EG_BASE)
+
+
+def item_status(item):
+    if 'psychology' in item.title.lower():
+        return (8, 4, 2)
+    else:
+        return (2, 0, 0)
+
+
+def cat_search(query, start=1, limit=10):
+    if query.startswith(EG_BASE):
+        # query is an Evergreen URL
+        results = M.marcxml_to_records(I.url_to_marcxml(query))
+        numhits = len(results)
+    else:
+        # query is an actual Z39.50 query
+        cat_host, cat_port, cat_db = settings.Z3950_CONFIG
+        results, numhits = PZ.search(cat_host, cat_port, cat_db, query, start, limit)
+    return results, numhits
+
+def bib_id_to_marcxml(bib_id):
+    """
+    Given a bib_id, return a MARC record in MARCXML format. Return
+    None if the bib_id does not exist.
+    """
+    try:
+        xml = I.bib_id_to_marcxml(bib_id)
+        return ET.fromstring(xml)
+    except:
+        return None
+
+def get_better_copy_of_marc(marc_string):
+    """
+    This function takes a MARCXML record and returns either the same
+    record, or another instance of the same record from a different
+    source. 
+
+    This is a hack. There is currently at least one Z39.50 server that
+    returns a MARCXML record with broken character encoding. This
+    function declares a point at which we can work around that server.
+    """
+    dct = M.marcxml_to_dictionary(marc_string)
+    bib_id = dct.get('901c')
+    better = bib_id_to_marcxml(bib_id)
+    return better or marc_string
+
+def marcxml_to_url(marc_string):
+    """
+    Given a MARC record, return either a URL (representing the
+    electronic resource) or None.
+
+    Typically this will be the 856$u value; but in Conifer, 856$9 and
+    856$u form an associative array, where $9 holds the institution
+    codes and $u holds the URLs.
+    """
+    LIBCODE = 'OWA'             # Leddy
+    try:
+        dct   = M.marcxml_to_dictionary(marc_string)
+        words = lambda string: re.findall(r'\S+', string)
+        keys  = words(dct.get('8569'))
+        urls  = words(dct.get('856u'))
+        print 'KEYS:', keys
+        print 'URLS:', urls
+        return urls[keys.index(LIBCODE)]
+    except:
+        return None
+
+    

Added: servres/trunk/conifer/integration/uwindsor_campus_info.py
===================================================================
--- servres/trunk/conifer/integration/uwindsor_campus_info.py	                        (rev 0)
+++ servres/trunk/conifer/integration/uwindsor_campus_info.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -0,0 +1,14 @@
+from urllib2 import *
+from django.utils import simplejson
+
+CAMPUS_INFO_SERVICE = 'http://fawcett.medialab.uwindsor.ca/campus-info/'
+
+def call(name, *args):
+    url = '%s%s?%s' % (CAMPUS_INFO_SERVICE, name, simplejson.dumps(args))
+    raw = urlopen(url).read()
+    return simplejson.loads(raw)
+
+if __name__ == '__main__':
+    print call('methods_supported')
+    print call('person_lookup', 'fawcett')
+    print call('membership_ids', 'dunn15')

Modified: servres/trunk/conifer/libsystems/evergreen/fm_IDL.xml
===================================================================
--- servres/trunk/conifer/libsystems/evergreen/fm_IDL.xml	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/libsystems/evergreen/fm_IDL.xml	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,3902 +1,8 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
-
-Copyright (C) 2006-2008 Georgia Public Library Service
-Copyright (C) 2008 Equinox Software, Inc
-Author: Mike Rylander <miker at esilibrary.com>
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
-
--->
-
-<IDL xmlns="http://opensrf.org/spec/IDL/base/v1" xmlns:oils_persist="http://open-ils.org/spec/opensrf/IDL/persistence/v1" xmlns:oils_obj="http://open-ils.org/spec/opensrf/IDL/objects/v1" xmlns:reporter="http://open-ils.org/spec/opensrf/IDL/reporter/v1" xmlns:permacrud="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-
-	<!-- Virtual classes -->
-	<class id="mups" controller="open-ils.cstore" oils_obj:fieldmapper="money::user_payment_summary" oils_persist:virtual="true">
-		<fields>
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="usr" oils_obj:array_position="3" oils_persist:virtual="true" />
-			<field name="forgive_payment" oils_obj:array_position="4" oils_persist:virtual="true" />
-			<field name="work_payment" oils_obj:array_position="5" oils_persist:virtual="true" />
-			<field name="credit_payment" oils_obj:array_position="6" oils_persist:virtual="true" />
-			<field name="goods_payment" oils_obj:array_position="7" oils_persist:virtual="true" />
-		</fields>
-		<links>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-		</links>
-	</class>
-
-	<class id="mwps" controller="open-ils.cstore" oils_obj:fieldmapper="money::workstation_payment_summary" oils_persist:virtual="true">
-		<fields>
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="workstation" oils_obj:array_position="3" oils_persist:virtual="true" />
-			<field name="cash_payment" oils_obj:array_position="4" oils_persist:virtual="true" />
-			<field name="check_payment" oils_obj:array_position="5" oils_persist:virtual="true" />
-			<field name="credit_card_payment" oils_obj:array_position="6" oils_persist:virtual="true" />
-		</fields>
-		<links>
-			<link field="workstation" reltype="has_a" key="id" map="" class="aws"/>
-		</links>
-	</class>
-
-	<class id="brn" controller="open-ils.cstore" oils_obj:fieldmapper="biblio::record_node" oils_persist:virtual="true">
-		<fields>
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="id" oils_obj:array_position="4" oils_persist:virtual="true" />
-			<field name="children" oils_obj:array_position="3" oils_persist:virtual="true" />
-			<field name="owner_doc" oils_obj:array_position="9" oils_persist:virtual="true" />
-			<field name="intra_doc_id" oils_obj:array_position="5" oils_persist:virtual="true" />
-			<field name="parent_node" oils_obj:array_position="10" oils_persist:virtual="true" />
-			<field name="node_type" oils_obj:array_position="8" oils_persist:virtual="true" />
-			<field name="namespace_uri" oils_obj:array_position="7" oils_persist:virtual="true" />
-			<field name="name" oils_obj:array_position="6" oils_persist:virtual="true" />
-			<field name="value" oils_obj:array_position="11" oils_persist:virtual="true" />
-		</fields>
-	</class>
-
-	<class id="mvr" controller="open-ils.cstore" oils_obj:fieldmapper="metabib::virtual_record" oils_persist:virtual="true">
-		<fields>
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="title" oils_obj:array_position="19" oils_persist:virtual="true" />
-			<field name="author" oils_obj:array_position="3" oils_persist:virtual="true" />
-			<field name="doc_id" oils_obj:array_position="6" oils_persist:virtual="true" />
-			<field name="doc_type" oils_obj:array_position="7" oils_persist:virtual="true" />
-			<field name="pubdate" oils_obj:array_position="12" oils_persist:virtual="true" />
-			<field name="isbn" oils_obj:array_position="9" oils_persist:virtual="true" />
-			<field name="publisher" oils_obj:array_position="13" oils_persist:virtual="true" />
-			<field name="tcn" oils_obj:array_position="18" oils_persist:virtual="true" />
-			<field name="subject" oils_obj:array_position="16" oils_persist:virtual="true" />
-			<field name="types_of_resource" oils_obj:array_position="21" oils_persist:virtual="true" />
-			<field name="call_numbers" oils_obj:array_position="4" oils_persist:virtual="true" />
-			<field name="edition" oils_obj:array_position="8" oils_persist:virtual="true" />
-			<field name="online_loc" oils_obj:array_position="10" oils_persist:virtual="true" />
-			<field name="synopsis" oils_obj:array_position="17" oils_persist:virtual="true" />
-			<field name="physical_description" oils_obj:array_position="11" oils_persist:virtual="true" />
-			<field name="toc" oils_obj:array_position="20" oils_persist:virtual="true" />
-			<field name="copy_count" oils_obj:array_position="5" oils_persist:virtual="true" />
-			<field name="series" oils_obj:array_position="15" oils_persist:virtual="true" />
-			<field name="serials" oils_obj:array_position="14" oils_persist:virtual="true" />
-		</fields>
-	</class>
-
-	<class id="ex" controller="open-ils.cstore" oils_obj:fieldmapper="ex" oils_persist:virtual="true">
-		<fields>
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="err_msg" oils_obj:array_position="3" oils_persist:virtual="true" />
-			<field name="type" oils_obj:array_position="4" oils_persist:virtual="true" />
-		</fields>
-	</class>
-
-	<class id="perm_ex" controller="open-ils.cstore" oils_obj:fieldmapper="perm_ex" oils_persist:virtual="true">
-		<fields>
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="err_msg" oils_obj:array_position="3" oils_persist:virtual="true" />
-			<field name="type" oils_obj:array_position="4" oils_persist:virtual="true" />
-		</fields>
-	</class>
-
-	<class id="amtr" controller="open-ils.cstore" oils_obj:fieldmapper="action::matrix_test_result" oils_persist:virtual="true">
-		<fields oils_persist:primary="matchpoint">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Matchpoint ID" name="matchpoint" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Success" name="success" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Failure Part" name="fail_part" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="matchpoint" reltype="has_a" key="id" map="" class="ccmm"/>
-		</links>
-	</class>
-
-
-	<!-- Actually in the DB -->
-	<class id="vbq" controller="open-ils.cstore" oils_obj:fieldmapper="vandelay::bib_queue" oils_persist:tablename="vandelay.bib_queue" reporter:label="Import/Overlay Bib Queue">
-		<fields oils_persist:primary="id" oils_persist:sequence="vandelay.queue_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Queue ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:selector="name" reporter:datatype="id"/>
-			<field reporter:label="Owner" name="owner" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Name" name="name" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text" oils_persist:i18n="true"/>
-			<field reporter:label="Complete" name="complete" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Type" name="queue_type" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="owner" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-		<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-			<actions>
-				<create permission="CREATE_BIB_IMPORT_QUEUE" global_required="true"/>
-				<retrieve permission="CREATE_BIB_IMPORT_QUEUE|UPDATE_BIB_IMPORT_QUEUE|DELETE_BIB_IMPORT_QUEUE" global_required="true"/>
-				<update permission="UPDATE_BIB_IMPORT_QUEUE" global_required="true"/>
-				<delete permission="DELETE_BIB_IMPORT_QUEUE" global_required="true"/>
-			</actions>
-		</permacrud>
-	</class>
-
-	<class id="vqbr" controller="open-ils.cstore" oils_obj:fieldmapper="vandelay::queued_bib_record" oils_persist:tablename="vandelay.queued_bib_record" reporter:label="Queued Bib Record">
-		<fields oils_persist:primary="id" oils_persist:sequence="vandelay.queued_record_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Record ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Create Time" name="create_time" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Import Time" name="import_time" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="MARC" name="marc" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Queue" name="queue" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Bib Source" name="bib_source" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Final Target Record" name="imported_as" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Purpose" name="purpose" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="queue" reltype="has_a" key="id" map="" class="vbq"/>
-			<link field="bib_source" reltype="has_a" key="id" map="" class="cbs"/>
-			<link field="imported_as" reltype="has_a" key="id" map="" class="bre"/>
-		</links>
-		<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-			<actions>
-				<create permission="CREATE_BIB_IMPORT_QUEUE" global_required="true"/>
-				<retrieve permission="CREATE_BIB_IMPORT_QUEUE|UPDATE_BIB_IMPORT_QUEUE|DELETE_BIB_IMPORT_QUEUE" global_required="true"/>
-				<update permission="UPDATE_BIB_IMPORT_QUEUE" global_required="true"/>
-				<delete permission="DELETE_BIB_IMPORT_QUEUE" global_required="true"/>
-			</actions>
-		</permacrud>
-	</class>
-
-	<class id="vqbrad" controller="open-ils.cstore" oils_obj:fieldmapper="vandelay::bib_attr_definition" oils_persist:tablename="vandelay.bib_attr_definition" reporter:label="Queued Bib Record Attribute Definition">
-		<fields oils_persist:primary="id" oils_persist:sequence="vandelay.bib_attr_definition_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Code" name="code" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Description" name="description" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text" oils_persist:i18n="true"/>
-			<field reporter:label="XPath" name="xpath" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Remove RegExp" name="remove" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Is Identifier?" name="ident" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="bool"/>
-		</fields>
-		<links/>
-		<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-			<actions>
-				<create permission="CREATE_BIB_IMPORT_FIELD_DEF" global_required="true"/>
-				<retrieve permission="CREATE_BIB_IMPORT_IMPORT_FIELD_DEF|UPDATE_BIB_IMPORT_IMPORT_FIELD_DEF|DELETE_BIB_IMPORT_IMPORT_FIELD_DEF" global_required="true"/>
-				<update permission="UPDATE_BIB_IMPORT_IMPORT_FIELD_DEF" global_required="true"/>
-				<delete permission="DELETE_BIB_IMPORT_IMPORT_FIELD_DEF" global_required="true"/>
-			</actions>
-		</permacrud>
-	</class>
-
-	<class id="vqbra" controller="open-ils.cstore" oils_obj:fieldmapper="vandelay::queued_bib_record_attr" oils_persist:tablename="vandelay.queued_bib_record_attr" reporter:label="Queued Bib Record Attribute">
-		<fields oils_persist:primary="id" oils_persist:sequence="vandelay.queued_bib_record_attr_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Attribute ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Record" name="record" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Field" name="field" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Value" name="attr_value" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="record" reltype="has_a" key="id" map="" class="vqbr"/>
-			<link field="field" reltype="has_a" key="id" map="" class="vqbrad"/>
-		</links>
-		<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-			<actions>
-				<create permission="CREATE_BIB_IMPORT_QUEUE" global_required="true"/>
-				<retrieve permission="CREATE_BIB_IMPORT_QUEUE|UPDATE_BIB_IMPORT_QUEUE|DELETE_BIB_IMPORT_QUEUE" global_required="true"/>
-				<update permission="UPDATE_BIB_IMPORT_QUEUE" global_required="true"/>
-				<delete permission="DELETE_BIB_IMPORT_QUEUE" global_required="true"/>
-			</actions>
-		</permacrud>
-	</class>
-
-	<class id="vbm" controller="open-ils.cstore" oils_obj:fieldmapper="vandelay::bib_match" oils_persist:tablename="vandelay.bib_match" reporter:label="Queued Bib Record Match">
-		<fields oils_persist:primary="id" oils_persist:sequence="vandelay.bib_match_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Match ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Queued Record" name="queued_record" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Matched Attribute" name="field" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Evergreen Record" name="eg_record" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Field Type" name="field_type" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="queued_record" reltype="has_a" key="id" map="" class="vqbr"/>
-			<link field="eg_record" reltype="has_a" key="id" map="" class="bre"/>
-			<link field="matched_attr" reltype="has_a" key="id" map="" class="vqbra"/>
-		</links>
-		<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-			<actions>
-				<create permission="CREATE_BIB_IMPORT_QUEUE" global_required="true"/>
-				<retrieve permission="CREATE_BIB_IMPORT_QUEUE|UPDATE_BIB_IMPORT_QUEUE|DELETE_BIB_IMPORT_QUEUE" global_required="true"/>
-				<update permission="UPDATE_BIB_IMPORT_QUEUE" global_required="true"/>
-				<delete permission="DELETE_BIB_IMPORT_QUEUE" global_required="true"/>
-			</actions>
-		</permacrud>
-	</class>
-
-	<class id="vaq" controller="open-ils.cstore" oils_obj:fieldmapper="vandelay::authority_queue" oils_persist:tablename="vandelay.authority_queue" reporter:label="Import/Overlay Authority Queue">
-		<fields oils_persist:primary="id" oils_persist:sequence="vandelay.queue_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Queue ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:selector="name" reporter:datatype="id"/>
-			<field reporter:label="Owner" name="owner" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Name" name="name" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text" oils_persist:i18n="true"/>
-			<field reporter:label="Complete" name="complete" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Type" name="queue_type" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Purpose" name="queue_purpose" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="owner" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-		<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-			<actions>
-				<create permission="CREATE_AUTHORITY_IMPORT_QUEUE" global_required="true"/>
-				<retrieve permission="CREATE_AUTHORITY_IMPORT_QUEUE|UPDATE_AUTHORITY_IMPORT_QUEUE|DELETE_AUTHORITY_IMPORT_QUEUE" global_required="true"/>
-				<update permission="UPDATE_AUTHORITY_IMPORT_QUEUE" global_required="true"/>
-				<delete permission="DELETE_AUTHORITY_IMPORT_QUEUE" global_required="true"/>
-			</actions>
-		</permacrud>
-	</class>
-
-	<class id="vqar" controller="open-ils.cstore" oils_obj:fieldmapper="vandelay::queued_authority_record" oils_persist:tablename="vandelay.queued_authority_record" reporter:label="Queued Authority Record">
-		<fields oils_persist:primary="id" oils_persist:sequence="vandelay.queued_record_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Record ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Create Time" name="create_time" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Import Time" name="import_time" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="MARC" name="marc" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Queue" name="queue" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Final Target Record" name="imported_as" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Purpose" name="purpose" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="queue" reltype="has_a" key="id" map="" class="vaq"/>
-			<link field="imported_as" reltype="has_a" key="id" map="" class="are"/>
-		</links>
-		<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-			<actions>
-				<create permission="CREATE_AUTHORITY_IMPORT_QUEUE" global_required="true"/>
-				<retrieve permission="CREATE_AUTHORITY_IMPORT_QUEUE|UPDATE_AUTHORITY_IMPORT_QUEUE|DELETE_AUTHORITY_IMPORT_QUEUE" global_required="true"/>
-				<update permission="UPDATE_AUTHORITY_IMPORT_QUEUE" global_required="true"/>
-				<delete permission="DELETE_AUTHORITY_IMPORT_QUEUE" global_required="true"/>
-			</actions>
-		</permacrud>
-	</class>
-
-	<class id="vqarad" controller="open-ils.cstore" oils_obj:fieldmapper="vandelay::authority_attr_definition" oils_persist:tablename="vandelay.authority_attr_definition" reporter:label="Queued Authority Record Attribute Definition">
-		<fields oils_persist:primary="id" oils_persist:sequence="vandelay.authority_attr_definition_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Code" name="code" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Description" name="description" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text" oils_persist:i18n="true"/>
-			<field reporter:label="XPath" name="xpath" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Remove RegExp" name="remove" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Is Identifier?" name="ident" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="bool"/>
-		</fields>
-		<links/>
-		<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-			<actions>
-				<create permission="CREATE_AUTHORITY_IMPORT_IMPORT_FIELD_DEF" global_required="true"/>
-				<retrieve permission="CREATE_AUTHORITY_IMPORT_IMPORT_FIELD_DEF|UPDATE_AUTHORITY_IMPORT_IMPORT_FIELD_DEF|DELETE_AUTHORITY_IMPORT_IMPORT_FIELD_DEF" global_required="true"/>
-				<update permission="UPDATE_AUTHORITY_IMPORT_IMPORT_FIELD_DEF" global_required="true"/>
-				<delete permission="DELETE_AUTHORITY_IMPORT_IMPORT_FIELD_DEF" global_required="true"/>
-			</actions>
-		</permacrud>
-	</class>
-
-	<class id="vqara" controller="open-ils.cstore" oils_obj:fieldmapper="vandelay::queued_authority_record_attr" oils_persist:tablename="vandelay.queued_authority_record_attr" reporter:label="Queued Authority Record Attribute">
-		<fields oils_persist:primary="id" oils_persist:sequence="vandelay.queued_authority_record_attr_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Attribute ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Record" name="record" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Field" name="field" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Value" name="attr_value" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="record" reltype="has_a" key="id" map="" class="vaqr"/>
-			<link field="field" reltype="has_a" key="id" map="" class="vqarad"/>
-		</links>
-		<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-			<actions>
-				<create permission="CREATE_AUTHORITY_IMPORT_QUEUE" global_required="true"/>
-				<retrieve permission="CREATE_AUTHORITY_IMPORT_QUEUE|UPDATE_AUTHORITY_IMPORT_QUEUE|DELETE_AUTHORITY_IMPORT_QUEUE" global_required="true"/>
-				<update permission="UPDATE_AUTHORITY_IMPORT_QUEUE" global_required="true"/>
-				<delete permission="DELETE_AUTHORITY_IMPORT_QUEUE" global_required="true"/>
-			</actions>
-		</permacrud>
-	</class>
-
-	<class id="vam" controller="open-ils.cstore" oils_obj:fieldmapper="vandelay::authority_match" oils_persist:tablename="vandelay.authority_match" reporter:label="Queued Authority Record Match">
-		<fields oils_persist:primary="id" oils_persist:sequence="vandelay.authority_match_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Match ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Queued Record" name="queued_record" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Matched Attribute" name="field" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Evergreen Record" name="eg_record" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="queued_record" reltype="has_a" key="id" map="" class="vqbr"/>
-			<link field="eg_record" reltype="has_a" key="id" map="" class="bre"/>
-			<link field="matched_attr" reltype="has_a" key="id" map="" class="vqbra"/>
-		</links>
-		<permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-			<actions>
-				<create permission="CREATE_AUTHORITY_IMPORT_QUEUE" global_required="true"/>
-				<retrieve permission="CREATE_AUTHORITY_IMPORT_QUEUE|UPDATE_AUTHORITY_IMPORT_QUEUE|DELETE_AUTHORITY_IMPORT_QUEUE" global_required="true"/>
-				<update permission="UPDATE_AUTHORITY_IMPORT_QUEUE" global_required="true"/>
-				<delete permission="DELETE_AUTHORITY_IMPORT_QUEUE" global_required="true"/>
-			</actions>
-		</permacrud>
-	</class>
-
-
-	<class id="auoi" controller="open-ils.cstore" oils_obj:fieldmapper="actor::usr_org_unit_opt_in" oils_persist:tablename="actor.usr_org_unit_opt_in" reporter:label="User Sharing Opt-in">
-		<fields oils_persist:primary="id" oils_persist:sequence="actor.usr_org_unit_opt_in_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Opt-in ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Workstation" name="opt_in_ws" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Staff Member" name="staff" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="User" name="usr" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Allowed Org Unit" name="org_unit" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Opt-in Date/Time" name="opt_in_ts" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-		</fields>
-		<links>
-			<link field="org_unit" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="staff" reltype="has_a" key="id" map="" class="au"/>
-			<link field="opt_in_ws" reltype="has_a" key="id" map="" class="aws"/>
-		</links>
-	</class>
-
-	<class id="aws" controller="open-ils.cstore" oils_obj:fieldmapper="actor::workstation" oils_persist:tablename="actor.workstation" reporter:label="Workstation">
-		<fields oils_persist:primary="id" oils_persist:sequence="actor.workstation_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Workstation ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Workstation Name" name="name" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Owning Library" name="owning_lib" oils_obj:array_position="5" oils_persist:virtual="false"  reporter:datatype="org_unit"/>
-		</fields>
-		<links>
-			<link field="owning_lib" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-	</class>
-
-	<class id="ccm" controller="open-ils.cstore" oils_obj:fieldmapper="config::circ_modifier" oils_persist:tablename="config.circ_modifier" reporter:label="Circulation Modifier">
-		<fields oils_persist:primary="code">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Code" name="code" oils_obj:array_position="3" oils_persist:virtual="false" reporter:selector="name" reporter:datatype="id"/>
-			<field reporter:label="Name" name="name" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text" oils_persist:i18n="true"/>
-			<field reporter:label="Description" name="description" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text" oils_persist:i18n="true"/>
-			<field reporter:label="SIP2 Media Type" name="sip2_media_type" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text" oils_persist:i18n="true"/>
-			<field reporter:label="Magnetic Media" name="magnetic_media" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="bool"/>
-		</fields>
-		<links/>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_CIRC_MOD" context_field="parent_ou"/>
-                <retrieve/>
-                <update permission="UPDATE_CIRC_MOD" context_field="parent_ou"/>
-                <delete permission="DELETE_CIRC_MOD" context_field="parent_ou"/>
-            </actions>
-        </permacrud>
-	</class>
-
-	<class id="cvrfm" controller="open-ils.cstore" oils_obj:fieldmapper="config::videorecording_format_map" oils_persist:tablename="config.videorecording_format_map" reporter:label="Videorecording Format" oils_persist:field_safe="true">
-		<fields oils_persist:primary="code">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Code" name="code" oils_obj:array_position="3" oils_persist:virtual="false" reporter:selector="name" reporter:datatype="id"/>
-			<field reporter:label="Name" name="name" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text" oils_persist:i18n="true"/>
-		</fields>
-		<links/>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_MARC_CODE" global_required="true"/>
-                <retrieve permission="CREATE_MARC_CODE|UPDATE_MARC_CODE|DELETE_MARC_CODE" global_required="true"/>
-                <update permission="UPDATE_MARC_CODE" global_required="true"/>
-                <delete permission="DELETE_MARC_CODE" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-
-	<class id="chmm" controller="open-ils.cstore" oils_obj:fieldmapper="config::hold_matrix_matchpoint" oils_persist:tablename="config.hold_matrix_matchpoint" reporter:label="Hold Matrix Matchpoint">
-		<fields oils_persist:primary="id" oils_persist:sequence="config.hold_matrix_matchpoint_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Matchpoint ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Active?" name="active" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="User Home Library" name="user_home_ou" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Request Library" name="request_ou" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Pickup Library" name="pickup_ou" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Owning Library" name="item_owning_ou" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Item Circ Library" name="item_circ_ou" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="User Permission Group" name="usr_grp" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Requestor Permission Group" name="requestor_grp" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Circulation Modifier" name="circ_modifier" oils_obj:array_position="12" oils_persist:virtual="false" oils_persist:primitive="string" reporter:datatype="link"/>
-			<field reporter:label="MARC Type" name="marc_type" oils_obj:array_position="13" oils_persist:virtual="false" oils_persist:primitive="string" reporter:datatype="link"/>
-			<field reporter:label="MARC Form" name="marc_form" oils_obj:array_position="14" oils_persist:virtual="false" oils_persist:primitive="string" reporter:datatype="link"/>
-			<field reporter:label="Videorecording Format" name="marc_vr_format" oils_obj:array_position="15" oils_persist:virtual="false" oils_persist:primitive="string" reporter:datatype="link"/>
-			<field reporter:label="Reference?" name="ref_flag" oils_obj:array_position="16" oils_persist:virtual="false" reporter:datatype="bool"/>
-		</fields>
-		<links>
-			<link field="user_home_ou" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="request_ou" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="pickup_ou" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="item_owning_ou" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="item_circ_ou" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="usr_grp" reltype="has_a" key="id" map="" class="pgt"/>
-			<link field="requestor_grp" reltype="has_a" key="id" map="" class="pgt"/>
-			<link field="circ_modifier" reltype="has_a" key="id" map="" class="ccm"/>
-			<link field="marc_type" reltype="has_a" key="id" map="" class="ccm"/>
-			<link field="marc_type" reltype="has_a" key="code" map="" class="citm"/>
-			<link field="marc_form" reltype="has_a" key="code" map="" class="cifm"/>
-			<link field="marc_vr_format" reltype="has_a" key="code" map="" class="cvrfm"/>
-		</links>
-	</class>
-
-	<class id="ccmm" controller="open-ils.cstore" oils_obj:fieldmapper="config::circ_matrix_matchpoint" oils_persist:tablename="config.circ_matrix_matchpoint" reporter:label="Circulation Matrix Matchpoint">
-		<fields oils_persist:primary="id" oils_persist:sequence="config.circ_matrix_matchpoint_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Matchpoint ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Active?" name="active" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Org Unit" name="org_unit" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Permission Group" name="grp" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Circulation Modifier" name="circ_modifier" oils_obj:array_position="7" oils_persist:virtual="false" oils_persist:primitive="string" reporter:datatype="link"/>
-			<field reporter:label="MARC Type" name="marc_type" oils_obj:array_position="8" oils_persist:virtual="false" oils_persist:primitive="string" reporter:datatype="link"/>
-			<field reporter:label="MARC Form" name="marc_form" oils_obj:array_position="9" oils_persist:virtual="false" oils_persist:primitive="string" reporter:datatype="link"/>
-			<field reporter:label="Videorecording Format" name="marc_vr_format" oils_obj:array_position="10" oils_persist:virtual="false" oils_persist:primitive="string" reporter:datatype="link"/>
-			<field reporter:label="Reference?" name="ref_flag" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="User Age: Lower Bound" name="usr_age_lower_bound" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="User Age: Upper Bound" name="usr_age_upper_bound" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="org_unit" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="grp" reltype="has_a" key="id" map="" class="pgt"/>
-			<link field="circ_modifier" reltype="has_a" key="id" map="" class="ccm"/>
-			<link field="marc_type" reltype="has_a" key="id" map="" class="ccm"/>
-			<link field="marc_type" reltype="has_a" key="code" map="" class="citm"/>
-			<link field="marc_form" reltype="has_a" key="code" map="" class="cifm"/>
-			<link field="marc_vr_format" reltype="has_a" key="code" map="" class="cvrfm"/>
-		</links>
-	</class>
-
-	<class id="chmt" controller="open-ils.cstore" oils_obj:fieldmapper="config::hold_matrix_test" oils_persist:tablename="config.hold_matrix_test" reporter:label="Hold Matrix Test Set">
-		<fields oils_persist:primary="matchpoint">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Matchpoint ID" name="matchpoint" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Holdable?" name="holdable" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Range is from Owning Lib?" name="distance_is_from_owner" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Transit Range" name="transit_range" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field reporter:label="Max Holds" name="max_holds" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field reporter:label="Max includes Frozen" name="include_frozen_holds" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Copy Age Hold Protection Rule" name="age_hold_protect_rule" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="matchpoint" reltype="has_a" key="id" map="" class="ccmm"/>
-			<link field="age_hold_protect_rule" reltype="has_a" key="id" map="" class="crahp"/>
-		</links>
-	</class>
-
-	<class id="ccmt" controller="open-ils.cstore" oils_obj:fieldmapper="config::circ_matrix_test" oils_persist:tablename="config.circ_matrix_test" reporter:label="Circulation Matrix Test Set">
-		<fields oils_persist:primary="matchpoint">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Matchpoint ID" name="matchpoint" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Circulate?" name="circulate" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Max Items Out" name="max_items_out" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field reporter:label="Max Overdue" name="max_overdue" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field reporter:label="Max Fines" name="max_fines" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="money"/>
-			<field reporter:label="Test Script" name="script_test" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="matchpoint" reltype="has_a" key="id" map="" class="ccmm"/>
-		</links>
-	</class>
-
-	<class id="ccmcmt" controller="open-ils.cstore" oils_obj:fieldmapper="config::circ_matrix_circ_mod_test" oils_persist:tablename="config.circ_matrix_circ_mod_test" reporter:label="Circulation Matrix Circulation Modifier Subtest">
-		<fields oils_persist:primary="id" oils_persist:sequence="config.circ_matrix_circ_mod_test_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Test ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Matchpoint ID" name="matchpoint" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Items Out" name="items_out" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field reporter:label="Circulation Modifier" name="circ_mod" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="matchpoint" reltype="has_a" key="id" map="" class="ccmm"/>
-			<link field="circ_mod" reltype="has_a" key="id" map="" class="ccm"/>
-		</links>
-	</class>
-
-	<class id="ccmrs" controller="open-ils.cstore" oils_obj:fieldmapper="config::circ_matrix_ruleset" oils_persist:tablename="config.circ_matrix_ruleset" reporter:label="Circulation Matrix Rule Set">
-		<fields oils_persist:primary="matchpoint">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Matchpoint ID" name="matchpoint" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Duration Rule" name="duration_rule" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Recurring Fine Rule" name="recurring_fine_rule" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Max Fine Rule" name="max_fine_rule" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="matchpoint" reltype="has_a" key="id" map="" class="ccmm"/>
-			<link field="duration_rule" reltype="has_a" key="id" map="" class="crcd"/>
-			<link field="max_fine_rule" reltype="has_a" key="id" map="" class="crmf"/>
-			<link field="recurring_fine_rule" reltype="has_a" key="id" map="" class="crrf"/>
-		</links>
-	</class>
-
-	<class id="cit" controller="open-ils.cstore" oils_obj:fieldmapper="config::identification_type" oils_persist:tablename="config.identification_type" reporter:label="Identification Type">
-		<fields oils_persist:primary="id" oils_persist:sequence="config.identification_type_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Identification ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:selector="name" reporter:datatype="id"/>
-			<field reporter:label="Identification Name" name="name" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text" oils_persist:i18n="true"/>
-		</fields>
-		<links/>
-	</class>
-
-	<class id="asvq" controller="open-ils.cstore" oils_obj:fieldmapper="action::survey_question" oils_persist:tablename="action.survey_question" reporter:label="User Survey Question">
-		<fields oils_persist:primary="id" oils_persist:sequence="action.survey_question_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Answers" name="answers" oils_obj:array_position="3" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Responses" name="responses" oils_obj:array_position="4" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Question ID" name="id" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Question" name="question" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Survey" name="survey" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="survey" reltype="has_a" key="id" map="" class="asv"/>
-			<link field="responses" reltype="has_many" key="question" map="" class="asvr"/>
-			<link field="answers" reltype="has_many" key="question" map="" class="asva"/>
-		</links>
-	</class>
-	<class id="mbts" controller="open-ils.cstore" oils_obj:fieldmapper="money::billable_transaction_summary" oils_persist:tablename="money.billable_xact_summary" reporter:label="Billable Transaction Summary">
-		<fields oils_persist:primary="id" oils_persist:sequence="">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Balance Owed" name="balance_owed" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="money"/>
-			<field reporter:label="Transaction ID" name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Last Billing Note" name="last_billing_note" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Last Billing Timestamp" name="last_billing_ts" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Last Billing Type" name="last_billing_type" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Last Payment Note" name="last_payment_note" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Last Payment Timestamp" name="last_payment_ts" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Last Payment Type" name="last_payment_type" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Total Owed" name="total_owed" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="money"/>
-			<field reporter:label="Total Paid" name="total_paid" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="money"/>
-			<field reporter:label="Billed User" name="usr" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Transaction Finish Time" name="xact_finish" oils_obj:array_position="14" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field reporter:label="Transaction Start Time" name="xact_start" oils_obj:array_position="15" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field reporter:label="Transaction Type" name="xact_type" oils_obj:array_position="16" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-		</links>
-	</class>
-	<class id="aun" controller="open-ils.cstore" oils_obj:fieldmapper="actor::usr_note" oils_persist:tablename="actor.usr_note" reporter:label="User Note">
-		<fields oils_persist:primary="id" oils_persist:sequence="actor.usr_note_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Creation Date/Time" name="create_date" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Creating Staff" name="creator" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Note ID" name="id" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Is OPAC Visible?" name="pub" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Note Title" name="title" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="User" name="usr" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="link" />
-			<field reporter:label="Note Content" name="value" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="creator" reltype="has_a" key="id" map="" class="au"/>
-		</links>
-	</class>
-	<class id="aus" controller="open-ils.cstore" oils_obj:fieldmapper="actor::user_setting" oils_persist:tablename="actor.usr_setting" reporter:label="User Setting">
-		<fields oils_persist:primary="id" oils_persist:sequence="actor.usr_setting_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Setting ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Name" name="name" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="User" name="usr" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Value" name="value" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-		</links>
-	</class>
-	<class id="mafe" controller="open-ils.cstore" oils_obj:fieldmapper="metabib::author_field_entry" oils_persist:tablename="metabib.author_field_entry">
-		<fields oils_persist:primary="id" oils_persist:sequence="metabib.author_field_entry_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="field" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="source" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="value" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="source" reltype="has_a" key="id" map="" class="bre"/>
-			<link field="field" reltype="has_a" key="id" map="" class="cmf"/>
-		</links>
-	</class>
-	<class id="aihu" controller="open-ils.cstore" oils_obj:fieldmapper="action::in_house_use" oils_persist:tablename="action.in_house_use" reporter:core="true" reporter:label="In House Use">
-		<fields oils_persist:primary="id" oils_persist:sequence="action.in_house_use_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Use ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Item" name="item" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="int" />
-			<field reporter:label="Using Library" name="org_unit" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field reporter:label="Recording Staff" name="staff" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Use Date/Time" name="use_time" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-		</fields>
-		<links>
-			<link field="item" reltype="has_a" key="id" map="" class="acp"/>
-			<link field="staff" reltype="has_a" key="id" map="" class="au"/>
-			<link field="org_unit" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-	</class>
-	<class id="ancihu" controller="open-ils.cstore" oils_obj:fieldmapper="action::non_cat_in_house_use" oils_persist:tablename="action.non_cat_in_house_use" reporter:core="true" reporter:label="Non-cataloged In House Use">
-		<fields oils_persist:primary="id" oils_persist:sequence="action.non_cat_in_house_use_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Use ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Item Type" name="item_type" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Using Library" name="org_unit" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field reporter:label="Recording Staff" name="staff" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Use Date/Time" name="use_time" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-		</fields>
-		<links>
-			<link field="item_type" reltype="has_a" key="id" map="" class="cnct"/>
-			<link field="staff" reltype="has_a" key="id" map="" class="au"/>
-			<link field="org_unit" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-	</class>
-	<class id="atc" controller="open-ils.cstore" oils_obj:fieldmapper="action::transit_copy" oils_persist:tablename="action.transit_copy" reporter:core="true" reporter:label="Copy Transit">
-		<fields oils_persist:primary="id" oils_persist:sequence="action.transit_copy_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Pretransit Copy Status" name="copy_status" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Destination" name="dest" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Receive Date/Time" name="dest_recv_time" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Transit ID" name="id" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Is Persistent? (unused)" name="persistant_transfer" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Previous Hop (unused)" name="prev_hop" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Source" name="source" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Send Date/Time" name="source_send_time" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Transited Copy" name="target_copy" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Hold Transit" name="hold_transit_copy" oils_obj:array_position="12" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="hold_transit_copy" reltype="might_have" key="id" map="" class="ahtc"/>
-			<link field="source" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="copy_status" reltype="has_a" key="id" map="" class="ccs"/>
-			<link field="dest" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="target_copy" reltype="has_a" key="id" map="" class="acp"/>
-		</links>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="TRANSIT_COPY"/>
-                <retrieve/>
-                <update permission="UPDATE_TRANSIT" context_field="dest|source"/>
-                <delete permission="DELETE_TRANSIT" context_field="dest|source"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="asvr" controller="open-ils.cstore" oils_obj:fieldmapper="action::survey_response" oils_persist:tablename="action.survey_response" reporter:label="Survey Response">
-		<fields oils_persist:primary="id" oils_persist:sequence="action.survey_response_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Answer" name="answer" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Answer Date/Time" name="answer_date" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Effective Answer Date/Time" name="effective_date" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Answer ID" name="id" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Question" name="question" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Response Group ID" name="response_group_id" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="int" />
-			<field reporter:label="Survey" name="survey" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Responding User" name="usr" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="question" reltype="has_a" key="id" map="" class="asvq"/>
-			<link field="survey" reltype="has_a" key="id" map="" class="asv"/>
-			<link field="answer" reltype="has_a" key="id" map="" class="asva"/>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-		</links>
-	</class>
-	<class id="ccbi" controller="open-ils.cstore" oils_obj:fieldmapper="container::copy_bucket_item" oils_persist:tablename="container.copy_bucket_item">
-		<fields oils_persist:primary="id" oils_persist:sequence="container.copy_bucket_item_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="bucket" oils_obj:array_position="3" oils_persist:virtual="false" />
-			<field name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="target_copy" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="create_time" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="timestamp" />
-		</fields>
-		<links>
-			<link field="target_copy" reltype="has_a" key="id" map="" class="acp"/>
-			<link field="bucket" reltype="has_a" key="id" map="" class="ccb"/>
-		</links>
-	</class>
-	<class id="are" controller="open-ils.cstore" oils_obj:fieldmapper="authority::record_entry" oils_persist:tablename="authority.record_entry">
-		<fields oils_persist:primary="id" oils_persist:sequence="authority.record_entry_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="active" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="arn_source" oils_obj:array_position="4" oils_persist:virtual="false" />
-			<field name="arn_value" oils_obj:array_position="5" oils_persist:virtual="false" />
-			<field name="create_date" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="creator" oils_obj:array_position="7" oils_persist:virtual="false" />
-			<field name="deleted" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="edit_date" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="editor" oils_obj:array_position="10" oils_persist:virtual="false" />
-			<field name="id" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="last_xact_id" oils_obj:array_position="12" oils_persist:virtual="false" />
-			<field name="marc" oils_obj:array_position="13" oils_persist:virtual="false" />
-			<field name="source" oils_obj:array_position="14" oils_persist:virtual="false" />
-			<field name="fixed_fields" oils_obj:array_position="15" oils_persist:virtual="true" />
-			<field name="notes" oils_obj:array_position="16" oils_persist:virtual="true" />
-		</fields>
-		<links>
-			<link field="editor" reltype="has_a" key="id" map="" class="au"/>
-			<link field="creator" reltype="has_a" key="id" map="" class="au"/>
-			<link field="notes" reltype="has_many" key="record" map="" class="arn"/>
-			<link field="fixed_fields" reltype="might_have" key="record" map="" class="ard"/>
-		</links>
-	</class>
-	<class id="ard" controller="open-ils.cstore" oils_obj:fieldmapper="authority::record_descriptor" oils_persist:tablename="authority.rec_descriptor">
-		<fields oils_persist:primary="id" oils_persist:sequence="authority.rec_descriptor_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="char_encoding" oils_obj:array_position="3" oils_persist:virtual="false" />
-			<field name="id" oils_obj:array_position="4" oils_persist:virtual="false" />
-			<field name="record" oils_obj:array_position="5" oils_persist:virtual="false" />
-			<field name="record_status" oils_obj:array_position="6" oils_persist:virtual="false" />
-		</fields>
-		<links>
-			<link field="record" reltype="has_a" key="id" map="" class="are"/>
-		</links>
-	</class>
-	<class id="clm" controller="open-ils.cstore" oils_obj:fieldmapper="config::language_map" oils_persist:tablename="config.language_map" reporter:label="Language Map" oils_persist:field_safe="true">
-		<fields oils_persist:primary="code" oils_persist:sequence="">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Language Code" name="code" oils_obj:array_position="3" oils_persist:virtual="false" reporter:selector="value" reporter:datatype="text"/>
-			<field reporter:label="Language" name="value" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text" oils_persist:i18n="true"/>
-		</fields>
-		<links/>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_MARC_CODE" global_required="true"/>
-                <retrieve permission="CREATE_MARC_CODE|UPDATE_MARC_CODE|DELETE_MARC_CODE" global_required="true"/>
-                <update permission="UPDATE_MARC_CODE" global_required="true"/>
-                <delete permission="DELETE_MARC_CODE" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="mccp" controller="open-ils.cstore" oils_obj:fieldmapper="money::credit_card_payment" oils_persist:tablename="money.credit_card_payment">
-		<fields oils_persist:primary="id" oils_persist:sequence="money.payment_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="accepting_usr" oils_obj:array_position="3" oils_persist:virtual="false" />
-			<field name="amount" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="amount_collected" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="approval_code" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="cash_drawer" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="cc_number" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="cc_type" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="expire_month" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="int" />
-			<field name="expire_year" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="int" />
-			<field name="id" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="note" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="payment_ts" oils_obj:array_position="14" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="xact" oils_obj:array_position="15" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="payment_type" oils_obj:array_position="16" oils_persist:virtual="true" reporter:datatype="text"/>
-			<field name="payment" oils_obj:array_position="17" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="payment" reltype="might_have" key="id" map="" class="mp"/>
-			<link field="accepting_usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="cash_drawer" reltype="has_a" key="id" map="" class="aws"/>
-			<link field="xact" reltype="has_a" key="id" map="" class="mbt"/>
-		</links>
-	</class>
-	<class id="cxt" controller="open-ils.cstore" oils_obj:fieldmapper="config::xml_transform" oils_persist:tablename="config.xml_transform" reporter:label="XML/XSLT Transform Definition">
-		<fields oils_persist:primary="name">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="field_class" oils_obj:array_position="3" oils_persist:virtual="false" />
-			<field reporter:label="Name" name="name" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text" />
-			<field reporter:label="Namespace URI" name="namespace_uri" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Namespace Prefix" name="prefix" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="XSLT" name="xslt" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text" />
-		</fields>
-		<links/>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_XML_TRANSFORM" global_required="true"/>
-                <retrieve/>
-                <update permission="UPDATE_XML_TRANSFORM" global_required="true"/>
-                <delete permission="DELETE_XML_TRANSFORM" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="cmf" controller="open-ils.cstore" oils_obj:fieldmapper="config::metabib_field" oils_persist:tablename="config.metabib_field">
-		<fields oils_persist:primary="id" oils_persist:sequence="config.metabib_field_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="field_class" oils_obj:array_position="3" oils_persist:virtual="false" />
-			<field name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="name" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="xpath" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="weight" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="int" />
-			<field name="format" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="search_field" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="bool" />
-			<field name="facet_field" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="bool" />
-		</fields>
-		<links/>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_METABIB_FIELD" global_required="true"/>
-                <retrieve/>
-                <update permission="UPDATE_METABIB_FIELD" global_required="true"/>
-                <delete permission="DELETE_METABIB_FIELD" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="cam" controller="open-ils.cstore" oils_obj:fieldmapper="config::audience_map" oils_persist:tablename="config.audience_map" reporter:label="Audience Map" oils_persist:field_safe="true">
-		<fields oils_persist:primary="code" oils_persist:sequence="">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Audience Code" name="code" oils_obj:array_position="3" oils_persist:virtual="false" reporter:selector="value" reporter:datatype="text"/>
-			<field reporter:label="Description" name="description" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text" oils_persist:i18n="true" />
-			<field reporter:label="Audience" name="value" oils_obj:array_position="5" oils_persist:virtual="false"  reporter:datatype="text" oils_persist:i18n="true"/>
-		</fields>
-		<links/>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_MARC_CODE" global_required="true"/>
-                <retrieve permission="CREATE_MARC_CODE|UPDATE_MARC_CODE|DELETE_MARC_CODE" global_required="true"/>
-                <update permission="UPDATE_MARC_CODE" global_required="true"/>
-                <delete permission="DELETE_MARC_CODE" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="cifm" controller="open-ils.cstore" oils_obj:fieldmapper="config::item_form_map" oils_persist:tablename="config.item_form_map" reporter:label="Item Form Map" oils_persist:field_safe="true">
-		<fields oils_persist:primary="code" oils_persist:sequence="">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Item Form Code" name="code" oils_obj:array_position="3" oils_persist:virtual="false" reporter:selector="value" reporter:datatype="text"/>
-			<field reporter:label="Item Form" name="value" oils_obj:array_position="4" oils_persist:virtual="false"  reporter:datatype="text" oils_persist:i18n="true"/>
-		</fields>
-		<links/>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_MARC_CODE" global_required="true"/>
-                <retrieve permission="CREATE_MARC_CODE|UPDATE_MARC_CODE|DELETE_MARC_CODE" global_required="true"/>
-                <update permission="UPDATE_MARC_CODE" global_required="true"/>
-                <delete permission="DELETE_MARC_CODE" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="acn" controller="open-ils.cstore" oils_obj:fieldmapper="asset::call_number" oils_persist:tablename="asset.call_number" reporter:label="Call Number/Volume">
-		<fields oils_persist:primary="id" oils_persist:sequence="asset.call_number_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Copies" name="copies" oils_obj:array_position="3" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Create Date/Time" name="create_date" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Creating User" name="creator" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Is Deleted" name="deleted" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Last Edit Date/Time" name="edit_date" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Last Editing User" name="editor" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Call Number/Volume ID" name="id" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Call Number Label" name="label" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Owning Library" name="owning_lib" oils_obj:array_position="11" oils_persist:virtual="false"  reporter:datatype="org_unit"/>
-			<field reporter:label="Bib Record" name="record" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Notes" name="notes" oils_obj:array_position="13" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="editor" reltype="has_a" key="id" map="" class="au"/>
-			<link field="creator" reltype="has_a" key="id" map="" class="au"/>
-			<link field="record" reltype="has_a" key="id" map="" class="bre"/>
-			<link field="owning_lib" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="notes" reltype="has_many" key="call_number" map="" class="acnn"/>
-			<link field="copies" reltype="has_many" key="call_number" map="" class="acp"/>
-		</links>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_VOLUME" context_field="owning_lib"/>
-                <retrieve/>
-                <update permission="UPDATE_VOLUME" context_field="owning_lib"/>
-                <delete permission="DELETE_VOLUME" context_field="owning_lib"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="cst" controller="open-ils.cstore" oils_obj:fieldmapper="config::standing" oils_persist:tablename="config.standing">
-		<fields oils_persist:primary="id" oils_persist:sequence="config.standing_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="value" oils_obj:array_position="4" oils_persist:virtual="false" oils_persist:i18n="true" />
-		</fields>
-		<links/>
-	</class>
-	<class id="mous" controller="open-ils.cstore" oils_obj:fieldmapper="money::open_user_summary" oils_persist:tablename="money.open_usr_summary">
-		<fields oils_persist:primary="usr" oils_persist:sequence="">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="balance_owed" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="total_owed" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="total_paid" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="usr" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links/>
-	</class>
-	<class id="mct" controller="open-ils.cstore" oils_obj:fieldmapper="money::collections_tracker" oils_persist:tablename="money.collections_tracker">
-		<fields oils_persist:primary="id" oils_persist:sequence="money.collections_tracker_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="collector" oils_obj:array_position="3" oils_persist:virtual="false" />
-			<field name="enter_time" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="id" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="location" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="usr" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="collector" reltype="has_a" key="id" map="" class="au"/>
-			<link field="location" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="money.collections_tracker.create" context_field="location"/>
-                <retrieve/>
-                <delete permission="money.collections_tracker.create" context_field="location"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="bre" controller="open-ils.cstore" oils_obj:fieldmapper="biblio::record_entry" oils_persist:tablename="biblio.record_entry" reporter:core="true" reporter:label="Bibliographic Record">
-		<fields oils_persist:primary="id" oils_persist:sequence="biblio.record_entry_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Call Numbers" name="call_numbers" oils_obj:array_position="3" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Fixed Field Entry" name="fixed_fields" oils_obj:array_position="4" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Is Active?" name="active" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Record Creation Date/Time" name="create_date" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Record Creator" name="creator" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Is Deleted?" name="deleted" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Last Edit Data/Time" name="edit_date" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Last Editing User" name="editor" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Fingerprint" name="fingerprint" oils_obj:array_position="11" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Record ID" name="id" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Last Transaction ID" name="last_xact_id" oils_obj:array_position="13" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="MARC21Slim" name="marc" oils_obj:array_position="14" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Overall Quality" name="quality" oils_obj:array_position="15" oils_persist:virtual="false" reporter:datatype="int" />
-			<field reporter:label="Record Source" name="source" oils_obj:array_position="16" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="TCN Source" name="tcn_source" oils_obj:array_position="17" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="TCN Value" name="tcn_value" oils_obj:array_position="18" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Metarecord" name="metarecord" oils_obj:array_position="19" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Language Code" name="language" oils_obj:array_position="20" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Non-MARC Record Notes" name="notes" oils_obj:array_position="21" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Indexed Keyword Field Entries" name="keyword_field_entries" oils_obj:array_position="22" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Indexed Subject Field Entries" name="subject_field_entries" oils_obj:array_position="23" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Indexed Title Field Entries" name="title_field_entries" oils_obj:array_position="24" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Indexed Author Field Entries" name="author_field_entries" oils_obj:array_position="25" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Indexed Series Field Entries" name="series_field_entries" oils_obj:array_position="26" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Flattened MARC Fields " name="full_record_entries" oils_obj:array_position="27" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Simple Record Extracts " name="simple_record" oils_obj:array_position="28" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="editor" reltype="has_a" key="id" map="" class="au"/>
-			<link field="creator" reltype="has_a" key="id" map="" class="au"/>
-			<link field="simple_record" reltype="might_have" key="id" map="" class="rmsr"/>
-			<link field="metarecord" reltype="might_have" key="source" map="metarecord" class="mmrsm"/>
-			<link field="call_numbers" reltype="has_many" key="record" map="" class="acn"/>
-			<link field="keyword_field_entries" reltype="has_many" key="source" map="" class="mkfe"/>
-			<link field="fixed_fields" reltype="might_have" key="record" map="" class="mrd"/>
-			<link field="language" reltype="might_have" key="record" map="item_lang" class="mrd"/>
-			<link field="subject_field_entries" reltype="has_many" key="source" map="" class="msfe"/>
-			<link field="title_field_entries" reltype="has_many" key="source" map="" class="mtfe"/>
-			<link field="notes" reltype="has_many" key="record" map="" class="bren"/>
-			<link field="author_field_entries" reltype="has_many" key="source" map="" class="mafe"/>
-			<link field="series_field_entries" reltype="has_many" key="source" map="" class="msefe"/>
-			<link field="full_record_entries" reltype="has_many" key="record" map="" class="mfr"/>
-		</links>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_MARC|IMPORT_MARC" global_required="true"/>
-                <retrieve/>
-                <update permission="UPDATE_MARC" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="aouhoo" controller="open-ils.cstore" oils_obj:fieldmapper="actor::org_unit::hours_of_operation" oils_persist:tablename="actor.hours_of_operation">
-		<fields oils_persist:primary="id" oils_persist:sequence="">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="dow_0_close" oils_obj:array_position="3" oils_persist:virtual="false" />
-			<field name="dow_0_open" oils_obj:array_position="4" oils_persist:virtual="false" />
-			<field name="dow_1_close" oils_obj:array_position="5" oils_persist:virtual="false" />
-			<field name="dow_1_open" oils_obj:array_position="6" oils_persist:virtual="false" />
-			<field name="dow_2_close" oils_obj:array_position="7" oils_persist:virtual="false" />
-			<field name="dow_2_open" oils_obj:array_position="8" oils_persist:virtual="false" />
-			<field name="dow_3_close" oils_obj:array_position="9" oils_persist:virtual="false" />
-			<field name="dow_3_open" oils_obj:array_position="10" oils_persist:virtual="false" />
-			<field name="dow_4_close" oils_obj:array_position="11" oils_persist:virtual="false" />
-			<field name="dow_4_open" oils_obj:array_position="12" oils_persist:virtual="false" />
-			<field name="dow_5_close" oils_obj:array_position="13" oils_persist:virtual="false" />
-			<field name="dow_5_open" oils_obj:array_position="14" oils_persist:virtual="false" />
-			<field name="dow_6_close" oils_obj:array_position="15" oils_persist:virtual="false" />
-			<field name="dow_6_open" oils_obj:array_position="16" oils_persist:virtual="false" />
-			<field name="id" oils_obj:array_position="17" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="org_unit" oils_obj:array_position="18" oils_persist:virtual="true" reporter:datatype="org_unit"/>
-		</fields>
-		<links>
-			<link field="org_unit" reltype="might_have" key="id" map="" class="aou"/>
-		</links>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_HOURS_OF_OPERATION" context_field="org_unit"/>
-                <retrieve/>
-                <update permission="UPDATE_HOURS_OF_OPERATION" context_field="org_unit"/>
-                <delete permission="DELETE_HOURS_OF_OPERATION" context_field="org_unit"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="aoucd" controller="open-ils.cstore" oils_obj:fieldmapper="actor::org_unit::closed_date" oils_persist:tablename="actor.org_unit_closed">
-		<fields oils_persist:primary="id" oils_persist:sequence="actor.org_unit_closed_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="close_end" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field name="close_start" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field name="id" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="org_unit" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field name="reason" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="org_unit" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_ORG_UNIT_CLOSING" context_field="org_unit"/>
-                <retrieve/>
-                <update permission="UPDATE_ORG_UNIT_CLOSING" context_field="org_unit"/>
-                <delete permission="DELETE_ORG_UNIT_CLOSING" context_field="org_unit"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="crcd" controller="open-ils.cstore" oils_obj:fieldmapper="config::rules::circ_duration" oils_persist:tablename="config.rule_circ_duration">
-		<fields oils_persist:primary="id" oils_persist:sequence="config.rule_circ_duration_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="extended" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="interval"/>
-			<field name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="max_renewals" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="int" />
-			<field name="name" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="normal" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="interval"/>
-			<field name="shrt" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="interval"/>
-		</fields>
-		<links>
-		</links>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_CIRC_DURATION" global_required="true"/>
-                <retrieve/>
-                <update permission="UPDATE_CIRC_DURATION" global_required="true"/>
-                <delete permission="DELETE_CIRC_DURATION" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="mobts" controller="open-ils.cstore" oils_obj:fieldmapper="money::open_billable_transaction_summary" oils_persist:tablename="money.open_billable_xact_summary">
-		<fields oils_persist:primary="id" oils_persist:sequence="">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="balance_owed" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="money"/>
-			<field name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="last_billing_note" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="last_billing_ts" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="last_billing_type" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="last_payment_note" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="last_payment_ts" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="last_payment_type" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="total_owed" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="money"/>
-			<field name="total_paid" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="money"/>
-			<field name="usr" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="xact_finish" oils_obj:array_position="14" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field name="xact_start" oils_obj:array_position="15" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field name="xact_type" oils_obj:array_position="16" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="xact" oils_obj:array_position="17" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field name="grocery" oils_obj:array_position="18" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field name="circulation" oils_obj:array_position="19" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field name="billing_location" oils_obj:array_position="20" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="xact" reltype="might_have" key="id" map="" class="mbt"/>
-			<link field="circulation" reltype="might_have" key="id" map="" class="circ"/>
-			<link field="grocery" reltype="might_have" key="id" map="" class="mg"/>
-			<link field="billing_location" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-	</class>
-	<class id="au" controller="open-ils.cstore" oils_obj:fieldmapper="actor::user" oils_persist:tablename="actor.usr" reporter:core="true" reporter:label="ILS User">
-		<fields oils_persist:primary="id" oils_persist:sequence="actor.usr_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="All Addresses" name="addresses" oils_obj:array_position="3" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="All Library Cards" name="cards" oils_obj:array_position="4" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="All Circulations" name="checkouts" oils_obj:array_position="5" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="All Hold Requests" name="hold_requests" oils_obj:array_position="6" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="All Permissions" name="permissions" oils_obj:array_position="7" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="All User Settings" name="settings" oils_obj:array_position="8" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Standing Penalties" name="standing_penalties" oils_obj:array_position="9" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Statistical Category Entries" name="stat_cat_entries" oils_obj:array_position="10" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Survey Responses" name="survey_responses" oils_obj:array_position="11" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field name="ws_ou" oils_obj:array_position="12" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field name="wsid" oils_obj:array_position="13" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Active" name="active" oils_obj:array_position="14" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Alert Message" name="alert_message" oils_obj:array_position="15" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Barred" name="barred" oils_obj:array_position="16" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Physical Address" name="billing_address" oils_obj:array_position="17" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Current Library Card" name="card" oils_obj:array_position="18" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Claims-returned Count" name="claims_returned_count" oils_obj:array_position="19" oils_persist:virtual="false" reporter:datatype="int" />
-			<field reporter:label="Record Creation Date/Time" name="create_date" oils_obj:array_position="20" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="User Credit Balance" name="credit_forward_balance" oils_obj:array_position="21" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Daytime Phone" name="day_phone" oils_obj:array_position="22" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Date of Birth" name="dob" oils_obj:array_position="23" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Email Address" name="email" oils_obj:array_position="24" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Evening Phone" name="evening_phone" oils_obj:array_position="25" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Privilege Expiration Date" name="expire_date" oils_obj:array_position="26" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Last Name" name="family_name" oils_obj:array_position="27" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="First Name" name="first_given_name" oils_obj:array_position="28" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Home Library" name="home_ou" oils_obj:array_position="29" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field reporter:label="User ID" name="id" oils_obj:array_position="30" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Primary Identification Type" name="ident_type" oils_obj:array_position="31" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Secondary Identification Type" name="ident_type2" oils_obj:array_position="32" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Primary Identification" name="ident_value" oils_obj:array_position="33" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Secondary Identification" name="ident_value2" oils_obj:array_position="34" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field name="last_xact_id" oils_obj:array_position="35" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Mailing Address" name="mailing_address" oils_obj:array_position="36" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Is Group Lead Account" name="master_account" oils_obj:array_position="37" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Internet Access Level" name="net_access_level" oils_obj:array_position="38" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Other Phone" name="other_phone" oils_obj:array_position="39" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Password (obfuscated)" name="passwd" oils_obj:array_position="40" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Photo URL" name="photo_url" oils_obj:array_position="41" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Prefix" name="prefix" oils_obj:array_position="42" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Main (Profile) Permission Group" name="profile" oils_obj:array_position="43" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Middle Name" name="second_given_name" oils_obj:array_position="44" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Standing (unused)" name="standing" oils_obj:array_position="45" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Suffix/Title" name="suffix" oils_obj:array_position="46" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Is Super User" name="super_user" oils_obj:array_position="47" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Family Linkage or other Group" name="usrgroup" oils_obj:array_position="48" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field reporter:label="OPAC/Staff Client User Name" name="usrname" oils_obj:array_position="49" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Additional Permission Groups" name="groups" oils_obj:array_position="50" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Is Deleted" name="deleted" oils_obj:array_position="51" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="User Notes" name="notes" oils_obj:array_position="52" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Demographic Info" name="demographic" oils_obj:array_position="53" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Billable Transactions" name="billable_transactions" oils_obj:array_position="54" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Checkins" name="checkins" oils_obj:array_position="55" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Circulations Performed as Staff" name="performed_circulations" oils_obj:array_position="56" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="demographic" reltype="might_have" key="id" map="" class="rud"/>
-			<link field="net_access_level" reltype="has_a" key="id" map="" class="cnal"/>
-			<link field="profile" reltype="has_a" key="id" map="" class="pgt"/>
-			<link field="ident_type" reltype="has_a" key="id" map="" class="cit"/>
-			<link field="billing_address" reltype="has_a" key="id" map="" class="aua"/>
-			<link field="mailing_address" reltype="has_a" key="id" map="" class="aua"/>
-			<link field="home_ou" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="standing" reltype="has_a" key="id" map="" class="cst"/>
-			<link field="card" reltype="has_a" key="id" map="" class="ac"/>
-			<link field="ident_type2" reltype="has_a" key="id" map="" class="cit"/>
-			<link field="stat_cat_entries" reltype="has_many" key="target_usr" map="" class="actscecm"/>
-			<link field="groups" reltype="has_many" key="usr" map="grp" class="pugm"/>
-			<link field="usrgroup" reltype="has_many" key="usrgroup" map="" class="au"/>
-			<link field="checkouts" reltype="has_many" key="usr" map="" class="circ"/>
-			<link field="hold_requests" reltype="has_many" key="usr" map="" class="circ"/>
-			<link field="permissions" reltype="has_many" key="usr" map="perm" class="pupm"/>
-			<link field="settings" reltype="has_many" key="usr" map="" class="aus"/>
-			<link reporter:label="Billable Transactions" field="billable_transactions" reltype="has_many" key="usr" map="" class="mbt"/>
-			<link field="standing_penalties" reltype="has_many" key="usr" map="" class="ausp"/>
-			<link field="addresses" reltype="has_many" key="usr" map="" class="aua"/>
-			<link field="survey_responses" reltype="has_many" key="usr" map="" class="asvr"/>
-			<link field="notes" reltype="has_many" key="usr" map="" class="aun"/>
-			<link reporter:label="Check-ins Performed as Staff" field="checkins" reltype="has_many" key="checkin_staff" map="" class="circ"/>
-			<link field="cards" reltype="has_many" key="usr" map="" class="ac"/>
-			<link reporter:label="Circulations Performed as Staff" field="performed_circulations" reltype="has_many" key="circ_staff" map="" class="circ"/>
-		</links>
-	</class>
-	<class id="aous" controller="open-ils.cstore" oils_obj:fieldmapper="actor::org_unit_setting" oils_persist:tablename="actor.org_unit_setting">
-		<fields oils_persist:primary="id" oils_persist:sequence="actor.org_unit_setting_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="id" oils_obj:array_position="3" oils_persist:virtual="false" />
-			<field name="name" oils_obj:array_position="4" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field name="org_unit" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field name="value" oils_obj:array_position="6" oils_persist:virtual="false"  reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="org_unit" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-	</class>
-	<class id="acpn" controller="open-ils.cstore" oils_obj:fieldmapper="asset::copy_note" oils_persist:tablename="asset.copy_note" reporter:label="Copy Note">
-		<fields oils_persist:primary="id" oils_persist:sequence="asset.copy_note_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Note Creation Date/Time" name="create_date" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Note Creator" name="creator" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Note ID" name="id" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Copy" name="owning_copy" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Is OPAC Visible?" name="pub" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Note Title" name="title" oils_obj:array_position="8" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Note Content" name="value" oils_obj:array_position="9" oils_persist:virtual="false"  reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="owning_copy" reltype="has_a" key="id" map="" class="acp"/>
-			<link field="creator" reltype="has_a" key="id" map="" class="au"/>
-		</links>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_COPY_NOTE">
-                    <context link="owning_copy" field="circ_lib"/>
-                </create>
-                <retrieve permission="VIEW_COPY_NOTES">
-                    <context link="owning_copy" field="circ_lib"/>
-                </retrieve>
-                <update permission="UPDATE_COPY_NOTE">
-                    <context link="owning_copy" field="circ_lib"/>
-                </update>
-                <delete permission="DELETE_COPY_NOTE">
-                    <context link="owning_copy" field="circ_lib"/>
-                </delete>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="mfr" controller="open-ils.cstore" oils_obj:fieldmapper="metabib::full_rec" oils_persist:tablename="metabib.full_rec" reporter:label="Flattened MARC Fields">
-		<fields oils_persist:primary="id" oils_persist:sequence="metabib.full_rec_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Field ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Indicator 1" name="ind1" oils_obj:array_position="4" oils_persist:virtual="false" oils_persist:primitive="string"  reporter:datatype="text"/>
-			<field reporter:label="Indicator 2" name="ind2" oils_obj:array_position="5" oils_persist:virtual="false" oils_persist:primitive="string"  reporter:datatype="text"/>
-			<field reporter:label="Bib Record Entry" name="record" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Subfield" name="subfield" oils_obj:array_position="7" oils_persist:virtual="false" oils_persist:primitive="string"  reporter:datatype="text"/>
-			<field reporter:label="Tag" name="tag" oils_obj:array_position="8" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Normalized Value" name="value" oils_obj:array_position="9" oils_persist:virtual="false"  reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="record" reltype="has_a" key="id" map="" class="bre"/>
-		</links>
-	</class>
-	<class id="mmr" controller="open-ils.cstore" oils_obj:fieldmapper="metabib::metarecord" oils_persist:tablename="metabib.metarecord">
-		<fields oils_persist:primary="id" oils_persist:sequence="metabib.metarecord_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="fingerprint" oils_obj:array_position="3" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="master_record" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="mods" oils_obj:array_position="6" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field name="source_records" oils_obj:array_position="7" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="master_record" reltype="has_a" key="id" map="" class="bre"/>
-			<link field="source_records" reltype="has_many" key="metarecord" map="source" class="mmrsm"/>
-		</links>
-	</class>
-	<class id="cnal" controller="open-ils.cstore" oils_obj:fieldmapper="config::net_access_level" oils_persist:tablename="config.net_access_level">
-		<fields oils_persist:primary="id" oils_persist:sequence="config.net_access_level_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:selector="name" reporter:datatype="id"/>
-			<field name="name" oils_obj:array_position="4" oils_persist:virtual="false"  reporter:datatype="text"/>
-		</fields>
-		<links/>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_NET_ACCESS_LEVEL" global_required="true"/>
-                <retrieve/>
-                <update permission="UPDATE_NET_ACCESS_LEVEL" global_required="true"/>
-                <delete permission="DELETE_NET_ACCESS_LEVEL" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="ppl" controller="open-ils.cstore" oils_obj:fieldmapper="permission::perm_list" oils_persist:tablename="permission.perm_list">
-		<fields oils_persist:primary="id" oils_persist:sequence="permission.perm_list_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="code" oils_obj:array_position="3" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field name="description" oils_obj:array_position="4" oils_persist:virtual="false"  reporter:datatype="text" oils_persist:i18n="true"/>
-			<field name="id" oils_obj:array_position="5" oils_persist:virtual="false" reporter:selector="code" reporter:datatype="id"/>
-		</fields>
-		<links/>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_PERM" global_required="true"/>
-                <retrieve permission="CREATE_PERM|UPDATE_PERM|DELETE_PERM" global_required="true"/>
-                <update permission="UPDATE_PERM" global_required="true"/>
-                <delete permission="DELETE_PERM" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="mmrsm" controller="open-ils.cstore" oils_obj:fieldmapper="metabib::metarecord_source_map" oils_persist:tablename="metabib.metarecord_source_map" oils_persist:field_safe="true">
-		<fields oils_persist:primary="id" oils_persist:sequence="metabib.metarecord_source_map_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="metarecord" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="source" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="source" reltype="has_a" key="id" map="" class="bre"/>
-			<link field="metarecord" reltype="has_a" key="id" map="" class="mmr"/>
-		</links>
-	</class>
-	<class id="mkfe" controller="open-ils.cstore" oils_obj:fieldmapper="metabib::keyword_field_entry" oils_persist:tablename="metabib.keyword_field_entry">
-		<fields oils_persist:primary="id" oils_persist:sequence="metabib.keyword_field_entry_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="field" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="source" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="value" oils_obj:array_position="6" oils_persist:virtual="false"  reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="source" reltype="has_a" key="id" map="" class="bre"/>
-			<link field="field" reltype="has_a" key="id" map="" class="cmf"/>
-		</links>
-	</class>
-	<class id="mcp" controller="open-ils.cstore" oils_obj:fieldmapper="money::cash_payment" oils_persist:tablename="money.cash_payment">
-		<fields oils_persist:primary="id" oils_persist:sequence="money.payment_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="accepting_usr" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="amount" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="amount_collected" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="cash_drawer" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="id" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="note" oils_obj:array_position="8" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field name="payment_ts" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="xact" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="payment_type" oils_obj:array_position="11" oils_persist:virtual="true"  reporter:datatype="text"/>
-			<field name="payment" oils_obj:array_position="12" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="payment" reltype="might_have" key="id" map="" class="mp"/>
-			<link field="accepting_usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="cash_drawer" reltype="has_a" key="id" map="" class="aws"/>
-			<link field="xact" reltype="has_a" key="id" map="" class="mbt"/>
-		</links>
-	</class>
-	<class id="mfp" controller="open-ils.cstore" oils_obj:fieldmapper="money::forgive_payment" oils_persist:tablename="money.forgive_payment">
-		<fields oils_persist:primary="id" oils_persist:sequence="money.payment_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="accepting_usr" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="amount" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="amount_collected" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="id" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="note" oils_obj:array_position="7" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field name="payment_ts" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="xact" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="payment_type" oils_obj:array_position="10" oils_persist:virtual="true"  reporter:datatype="text"/>
-			<field name="payment" oils_obj:array_position="11" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="payment" reltype="might_have" key="id" map="" class="mp"/>
-			<link field="accepting_usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="xact" reltype="has_a" key="id" map="" class="mbt"/>
-		</links>
-	</class>
-	<class id="mrd" controller="open-ils.cstore" oils_obj:fieldmapper="metabib::record_descriptor" oils_persist:tablename="metabib.rec_descriptor" reporter:label="Basic Record Descriptor">
-		<fields oils_persist:primary="id" oils_persist:sequence="metabib.rec_descriptor_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Audn" name="audience" oils_obj:array_position="3" oils_persist:virtual="false" oils_persist:primitive="string"  reporter:datatype="text"/>
-			<field reporter:label="BLvl" name="bib_level" oils_obj:array_position="4" oils_persist:virtual="false" oils_persist:primitive="string"  reporter:datatype="text"/>
-			<field reporter:label="Cat Form" name="cat_form" oils_obj:array_position="5" oils_persist:virtual="false" oils_persist:primitive="string"  reporter:datatype="text"/>
-			<field reporter:label="Character Encoding" name="char_encoding" oils_obj:array_position="6" oils_persist:virtual="false" oils_persist:primitive="string"  reporter:datatype="text"/>
-			<field reporter:label="Ctrl" name="control_type" oils_obj:array_position="7" oils_persist:virtual="false" oils_persist:primitive="string"  reporter:datatype="text"/>
-			<field reporter:label="ELvl" name="enc_level" oils_obj:array_position="8" oils_persist:virtual="false" oils_persist:primitive="string"  reporter:datatype="text"/>
-			<field reporter:label="Descriptor ID" name="id" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Form" name="item_form" oils_obj:array_position="10" oils_persist:virtual="false" oils_persist:primitive="string"  reporter:datatype="text"/>
-			<field reporter:label="Lang" name="item_lang" oils_obj:array_position="11" oils_persist:virtual="false" oils_persist:primitive="string"  reporter:datatype="text"/>
-			<field reporter:label="Type" name="item_type" oils_obj:array_position="12" oils_persist:virtual="false" oils_persist:primitive="string"  reporter:datatype="text"/>
-			<field reporter:label="LitF" name="lit_form" oils_obj:array_position="13" oils_persist:virtual="false" oils_persist:primitive="string"  reporter:datatype="text"/>
-			<field reporter:label="Pub Status" name="pub_status" oils_obj:array_position="14" oils_persist:virtual="false" oils_persist:primitive="string"  reporter:datatype="text"/>
-			<field reporter:label="Bib Record Entry" name="record" oils_obj:array_position="15" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="TMat" name="type_mat" oils_obj:array_position="16" oils_persist:virtual="false" oils_persist:primitive="string"  reporter:datatype="text"/>
-			<field reporter:label="Video Recording Format" name="vr_format" oils_obj:array_position="17" oils_persist:virtual="false" oils_persist:primitive="string"  reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="record" reltype="has_a" key="id" map="" class="bre"/>
-			<link field="item_lang" reltype="has_a" key="code" map="" class="clm"/>
-			<link field="item_type" reltype="has_a" key="code" map="" class="citm"/>
-			<link field="bib_level" reltype="has_a" key="code" map="" class="cblvl"/>
-			<link field="item_form" reltype="has_a" key="code" map="" class="cifm"/>
-			<link field="audience" reltype="has_a" key="code" map="" class="cam"/>
-			<link field="lit_form" reltype="has_a" key="code" map="" class="clfm"/>
-		</links>
-	</class>
-	<class id="ccs" controller="open-ils.cstore" oils_obj:fieldmapper="config::copy_status" oils_persist:tablename="config.copy_status">
-		<fields oils_persist:primary="id" oils_persist:sequence="config.copy_status_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="holdable" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:selector="name" reporter:datatype="id"/>
-			<field name="name" oils_obj:array_position="5" oils_persist:virtual="false"  reporter:datatype="text" oils_persist:i18n="true"/>
-			<field name="opac_visible" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="bool"/>
-		</fields>
-		<links/>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_COPY_STATUS" global_required="true"/>
-                <retrieve permission="CREATE_COPY_STATUS|UPDATE_COPY_STATUS|DELETE_COPY_STATUS" global_required="true"/>
-                <update permission="UPDATE_COPY_STATUS" global_required="true"/>
-                <delete permission="DELETE_COPY_STATUS" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="ausp" controller="open-ils.cstore" oils_obj:fieldmapper="actor::user_standing_penalty" oils_persist:tablename="actor.usr_standing_penalty">
-		<fields oils_persist:primary="id" oils_persist:sequence="actor.usr_standing_penalty_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="penalty_type" oils_obj:array_position="4" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field name="usr" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-		</links>
-	</class>
-	<class id="aua" controller="open-ils.cstore" oils_obj:fieldmapper="actor::user_address" oils_persist:tablename="actor.usr_address" reporter:label="User Address">
-		<fields oils_persist:primary="id" oils_persist:sequence="actor.usr_address_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Type" name="address_type" oils_obj:array_position="3" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="City" name="city" oils_obj:array_position="4" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Country" name="country" oils_obj:array_position="5" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="County" name="county" oils_obj:array_position="6" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Address ID" name="id" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Postal Code" name="post_code" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="State" name="state" oils_obj:array_position="9" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Street (1)" name="street1" oils_obj:array_position="10" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Street (2)" name="street2" oils_obj:array_position="11" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="User" name="usr" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Valid Address?" name="valid" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Within City Limits?" name="within_city_limits" oils_obj:array_position="14" oils_persist:virtual="false" reporter:datatype="bool"/>
-		</fields>
-		<links>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-		</links>
-	</class>
-	<class id="acnn" controller="open-ils.cstore" oils_obj:fieldmapper="asset::call_number_note" oils_persist:tablename="asset.call_number_note">
-		<fields oils_persist:primary="id" oils_persist:sequence="asset.call_number_note_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="call_number" oils_obj:array_position="3" oils_persist:virtual="false" />
-			<field name="create_date" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="creator" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="id" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="pub" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="title" oils_obj:array_position="8" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field name="value" oils_obj:array_position="9" oils_persist:virtual="false"  reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="call_number" reltype="has_a" key="id" map="" class="acn"/>
-		</links>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_VOLUME_NOTE">
-                    <context link="call_number" field="owning_lib"/>
-                </create>
-                <retrieve permission="VIEW_VOLUME_NOTES">
-                    <context link="call_number" field="owning_lib"/>
-                </retrieve>
-                <update permission="UPDATE_VOLUME_NOTE">
-                    <context link="call_number" field="owning_lib"/>
-                </update>
-                <delete permission="DELETE_VOLUME_NOTE">
-                    <context link="call_number" field="owning_lib"/>
-                </delete>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="arn" controller="open-ils.cstore" oils_obj:fieldmapper="authority::record_note" oils_persist:tablename="authority.record_note">
-		<fields oils_persist:primary="id" oils_persist:sequence="authority.record_note_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="create_date" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="creator" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="edit_date" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="editor" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="id" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="record" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="value" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="record" reltype="has_a" key="id" map="" class="are"/>
-		</links>
-	</class>
-	<class id="circ" controller="open-ils.cstore" oils_obj:fieldmapper="action::circulation" oils_persist:tablename="action.circulation" reporter:core="true" reporter:label="Circulation">
-		<fields oils_persist:primary="id" oils_persist:sequence="money.billable_xact_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Check In Library" name="checkin_lib" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field reporter:label="Check In Staff" name="checkin_staff" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Check In Date/Time" name="checkin_time" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Circulating Library" name="circ_lib" oils_obj:array_position="6" oils_persist:virtual="false"  reporter:datatype="org_unit"/>
-			<field reporter:label="Circulating Staff" name="circ_staff" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Desk Renewal" name="desk_renewal" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Due Date/Time" name="due_date" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Circulation Duration" name="duration" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="interval"/>
-			<field reporter:label="Circ Duration Rule" name="duration_rule" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Fine Interval" name="fine_interval" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="interval"/>
-			<field reporter:label="Circ ID" name="id" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Max Fine Amount" name="max_fine" oils_obj:array_position="14" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Max Fine Rule" name="max_fine_rule" oils_obj:array_position="15" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="OPAC Renewal" name="opac_renewal" oils_obj:array_position="16" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Phone Renewal" name="phone_renewal" oils_obj:array_position="17" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Recurring Fine Amount" name="recuring_fine" oils_obj:array_position="18" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Recurring Fine Rule" name="recuring_fine_rule" oils_obj:array_position="19" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Remaining Renewals" name="renewal_remaining" oils_obj:array_position="20" oils_persist:virtual="false" reporter:datatype="int" />
-			<field reporter:label="Fine Stop Reason" name="stop_fines" oils_obj:array_position="21" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Fine Stop Date/Time" name="stop_fines_time" oils_obj:array_position="22" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Circulating Item" name="target_copy" oils_obj:array_position="23" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Patron" name="usr" oils_obj:array_position="24" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Transaction Finish Date/Time" name="xact_finish" oils_obj:array_position="25" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field reporter:label="Check Out Date/Time" name="xact_start" oils_obj:array_position="26" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field reporter:label="Record Creation Date/Time" name="create_time" oils_obj:array_position="27" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field reporter:label="Transaction Billings" name="billings" oils_obj:array_position="28" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Transaction Payments" name="payments" oils_obj:array_position="29" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Base Transaction" name="billable_transaction" oils_obj:array_position="30" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Circulation Type" name="circ_type" oils_obj:array_position="31" oils_persist:virtual="true" reporter:datatype="text"/>
-			<field reporter:label="Billing Totals" name="billing_total" oils_obj:array_position="32" oils_persist:virtual="true" reporter:datatype="money"/>
-			<field reporter:label="Payment Totals" name="payment_total" oils_obj:array_position="33" oils_persist:virtual="true" reporter:datatype="money"/>
-		</fields>
-		<links>
-			<link field="billable_transaction" reltype="might_have" key="id" map="" class="mbt"/>
-			<link field="circ_staff" reltype="has_a" key="id" map="" class="au"/>
-			<link field="checkin_lib" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="target_copy" reltype="has_a" key="id" map="" class="acp"/>
-			<link field="checkin_staff" reltype="has_a" key="id" map="" class="au"/>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="circ_lib" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="payments" reltype="has_many" key="xact" map="" class="mp"/>
-			<link field="billings" reltype="has_many" key="xact" map="" class="mb"/>
-			<link field="duration_rule" reltype="has_a" key="name" map="" class="crcd"/>
-			<link field="max_fine_rule" reltype="has_a" key="name" map="" class="crmf"/>
-			<link field="recuring_fine_rule" reltype="has_a" key="name" map="" class="crrf"/>
-			<link field="circ_type" reltype="might_have" key="id" map="" class="rcirct"/>
-			<link field="billing_total" reltype="might_have" key="xact" map="" class="rxbt"/>
-			<link field="payment_total" reltype="might_have" key="xact" map="" class="rxpt"/>
-		</links>
-	</class>
-	<class id="combcirc" controller="open-ils.cstore" oils_obj:fieldmapper="action::all_circulation" oils_persist:tablename="action.all_circulation" reporter:core="true" reporter:label="Combined Aged and Active Circulations" oils_persist:readonly="true">
-		<fields oils_persist:primary="id" oils_persist:sequence="money.billable_xact_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Check In Library" name="checkin_lib" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field reporter:label="Check In Staff" name="checkin_staff" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Check In Date/Time" name="checkin_time" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Circulating Library" name="circ_lib" oils_obj:array_position="6" oils_persist:virtual="false"  reporter:datatype="org_unit"/>
-			<field reporter:label="Circulating Staff" name="circ_staff" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Desk Renewal" name="desk_renewal" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Due Date/Time" name="due_date" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Circulation Duration" name="duration" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="interval"/>
-			<field reporter:label="Circ Duration Rule" name="duration_rule" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Fine Interval" name="fine_interval" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="interval"/>
-			<field reporter:label="Circ ID" name="id" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Max Fine Amount" name="max_fine" oils_obj:array_position="14" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Max Fine Rule" name="max_fine_rule" oils_obj:array_position="15" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="OPAC Renewal" name="opac_renewal" oils_obj:array_position="16" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Phone Renewal" name="phone_renewal" oils_obj:array_position="17" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Recurring Fine Amount" name="recuring_fine" oils_obj:array_position="18" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Recurring Fine Rule" name="recuring_fine_rule" oils_obj:array_position="19" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Remaining Renewals" name="renewal_remaining" oils_obj:array_position="20" oils_persist:virtual="false" reporter:datatype="int" />
-			<field reporter:label="Fine Stop Reason" name="stop_fines" oils_obj:array_position="21" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Fine Stop Date/Time" name="stop_fines_time" oils_obj:array_position="22" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Circulating Item" name="target_copy" oils_obj:array_position="23" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Patron ZIP" name="usr_post_code" oils_obj:array_position="24" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Transaction Finish Date/Time" name="xact_finish" oils_obj:array_position="25" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field reporter:label="Check Out Date/Time" name="xact_start" oils_obj:array_position="26" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field reporter:label="Record Creation Date/Time" name="create_time" oils_obj:array_position="27" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field reporter:label="Transaction Billings" name="billings" oils_obj:array_position="28" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Transaction Payments" name="payments" oils_obj:array_position="29" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Base Transaction" name="billable_transaction" oils_obj:array_position="30" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Circulation Type" name="circ_type" oils_obj:array_position="31" oils_persist:virtual="true" reporter:datatype="text"/>
-			<field reporter:label="Billing Totals" name="billing_total" oils_obj:array_position="32" oils_persist:virtual="true" reporter:datatype="money"/>
-			<field reporter:label="Payment Totals" name="payment_total" oils_obj:array_position="33" oils_persist:virtual="true" reporter:datatype="money"/>
-			<field reporter:label="Patron Home Library" name="usr_home_ou" oils_obj:array_position="34" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Patron Profile Group" name="usr_profile" oils_obj:array_position="35" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Patron Birth Year" name="usr_birth_year" oils_obj:array_position="36" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field reporter:label="Call Number" name="copy_call_number" oils_obj:array_position="37" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Shelving Location" name="copy_location" oils_obj:array_position="38" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Copy Owning Library" name="copy_owning_lib" oils_obj:array_position="39" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Copy Circulating Library" name="copy_circ_lib" oils_obj:array_position="40" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Bib Record" name="copy_bib_record" oils_obj:array_position="41" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="billable_transaction" reltype="might_have" key="id" map="" class="mbt"/>
-			<link field="circ_staff" reltype="has_a" key="id" map="" class="au"/>
-			<link field="checkin_lib" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="target_copy" reltype="has_a" key="id" map="" class="acp"/>
-			<link field="checkin_staff" reltype="has_a" key="id" map="" class="au"/>
-			<link field="circ_lib" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="payments" reltype="has_many" key="xact" map="" class="mp"/>
-			<link field="billings" reltype="has_many" key="xact" map="" class="mb"/>
-			<link field="duration_rule" reltype="has_a" key="name" map="" class="crcd"/>
-			<link field="max_fine_rule" reltype="has_a" key="name" map="" class="crmf"/>
-			<link field="recuring_fine_rule" reltype="has_a" key="name" map="" class="crrf"/>
-			<link field="circ_type" reltype="might_have" key="id" map="" class="rcirct"/>
-			<link field="billing_total" reltype="might_have" key="xact" map="" class="rxbt"/>
-			<link field="payment_total" reltype="might_have" key="xact" map="" class="rxpt"/>
-			<link field="copy_call_number" reltype="has_a" key="id" map="" class="acn"/>
-			<link field="copy_location" reltype="has_a" key="id" map="" class="acl"/>
-			<link field="copy_owning_lib" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="copy_circ_lib" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="copy_bib_record" reltype="has_a" key="id" map="" class="bre"/>
-		</links>
-	</class>
-	<class id="acirc" controller="open-ils.cstore" oils_obj:fieldmapper="action::aged_circulation" oils_persist:tablename="action.aged_circulation" reporter:core="true" reporter:label="Aged (patronless) Circulation">
-		<fields oils_persist:primary="id" oils_persist:sequence="money.billable_xact_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Check In Library" name="checkin_lib" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field reporter:label="Check In Staff" name="checkin_staff" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Check In Date/Time" name="checkin_time" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Circulating Library" name="circ_lib" oils_obj:array_position="6" oils_persist:virtual="false"  reporter:datatype="org_unit"/>
-			<field reporter:label="Circulating Staff" name="circ_staff" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Desk Renewal" name="desk_renewal" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Due Date/Time" name="due_date" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Circulation Duration" name="duration" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="interval"/>
-			<field reporter:label="Circ Duration Rule" name="duration_rule" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Fine Interval" name="fine_interval" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="interval"/>
-			<field reporter:label="Circ ID" name="id" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Max Fine Amount" name="max_fine" oils_obj:array_position="14" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Max Fine Rule" name="max_fine_rule" oils_obj:array_position="15" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="OPAC Renewal" name="opac_renewal" oils_obj:array_position="16" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Phone Renewal" name="phone_renewal" oils_obj:array_position="17" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Recurring Fine Amount" name="recuring_fine" oils_obj:array_position="18" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Recurring Fine Rule" name="recuring_fine_rule" oils_obj:array_position="19" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Remaining Renewals" name="renewal_remaining" oils_obj:array_position="20" oils_persist:virtual="false" reporter:datatype="int" />
-			<field reporter:label="Fine Stop Reason" name="stop_fines" oils_obj:array_position="21" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Fine Stop Date/Time" name="stop_fines_time" oils_obj:array_position="22" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Circulating Item" name="target_copy" oils_obj:array_position="23" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Patron ZIP" name="usr_post_code" oils_obj:array_position="24" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Transaction Finish Date/Time" name="xact_finish" oils_obj:array_position="25" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field reporter:label="Check Out Date/Time" name="xact_start" oils_obj:array_position="26" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field reporter:label="Record Creation Date/Time" name="create_time" oils_obj:array_position="27" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field reporter:label="Transaction Billings" name="billings" oils_obj:array_position="28" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Transaction Payments" name="payments" oils_obj:array_position="29" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Base Transaction" name="billable_transaction" oils_obj:array_position="30" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Circulation Type" name="circ_type" oils_obj:array_position="31" oils_persist:virtual="true" reporter:datatype="text"/>
-			<field reporter:label="Billing Totals" name="billing_total" oils_obj:array_position="32" oils_persist:virtual="true" reporter:datatype="money"/>
-			<field reporter:label="Payment Totals" name="payment_total" oils_obj:array_position="33" oils_persist:virtual="true" reporter:datatype="money"/>
-			<field reporter:label="Patron Home Library" name="usr_home_ou" oils_obj:array_position="34" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Patron Profile Group" name="usr_profile" oils_obj:array_position="35" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Patron Birth Year" name="usr_birth_year" oils_obj:array_position="36" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field reporter:label="Call Number" name="copy_call_number" oils_obj:array_position="37" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Shelving Location" name="copy_location" oils_obj:array_position="38" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Copy Owning Library" name="copy_owning_lib" oils_obj:array_position="39" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Copy Circulating Library" name="copy_circ_lib" oils_obj:array_position="40" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Bib Record" name="copy_bib_record" oils_obj:array_position="41" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="billable_transaction" reltype="might_have" key="id" map="" class="mbt"/>
-			<link field="circ_staff" reltype="has_a" key="id" map="" class="au"/>
-			<link field="checkin_lib" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="target_copy" reltype="has_a" key="id" map="" class="acp"/>
-			<link field="checkin_staff" reltype="has_a" key="id" map="" class="au"/>
-			<link field="circ_lib" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="payments" reltype="has_many" key="xact" map="" class="mp"/>
-			<link field="billings" reltype="has_many" key="xact" map="" class="mb"/>
-			<link field="duration_rule" reltype="has_a" key="name" map="" class="crcd"/>
-			<link field="max_fine_rule" reltype="has_a" key="name" map="" class="crmf"/>
-			<link field="recuring_fine_rule" reltype="has_a" key="name" map="" class="crrf"/>
-			<link field="circ_type" reltype="might_have" key="id" map="" class="rcirct"/>
-			<link field="billing_total" reltype="might_have" key="xact" map="" class="rxbt"/>
-			<link field="payment_total" reltype="might_have" key="xact" map="" class="rxpt"/>
-			<link field="copy_call_number" reltype="has_a" key="id" map="" class="acn"/>
-			<link field="copy_location" reltype="has_a" key="id" map="" class="acl"/>
-			<link field="copy_owning_lib" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="copy_circ_lib" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="copy_bib_record" reltype="has_a" key="id" map="" class="bre"/>
-		</links>
-	</class>
-	<class id="ccnbi" controller="open-ils.cstore" oils_obj:fieldmapper="container::call_number_bucket_item" oils_persist:tablename="container.call_number_bucket_item">
-		<fields oils_persist:primary="id" oils_persist:sequence="container.call_number_bucket_item_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="bucket" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="target_call_number" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link" />
-			<field name="create_time" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="timestamp" />
-		</fields>
-		<links>
-			<link field="target_call_number" reltype="has_a" key="id" map="" class="acn"/>
-			<link field="bucket" reltype="has_a" key="id" map="" class="ccnb"/>
-		</links>
-	</class>
-	<class id="cbreb" controller="open-ils.cstore" oils_obj:fieldmapper="container::biblio_record_entry_bucket" oils_persist:tablename="container.biblio_record_entry_bucket">
-		<fields oils_persist:primary="id" oils_persist:sequence="container.biblio_record_entry_bucket_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="items" oils_obj:array_position="3" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field name="btype" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="id" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="name" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="owner" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="pub" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="create_time" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="timestamp" />
-		</fields>
-		<links>
-			<link field="owner" reltype="has_a" key="id" map="" class="au"/>
-			<link field="items" reltype="has_many" key="bucket" map="" class="cbrebi"/>
-		</links>
-	</class>
-	<class id="ahcm" controller="open-ils.cstore" oils_obj:fieldmapper="action::hold_copy_map" oils_persist:tablename="action.hold_copy_map">
-		<fields oils_persist:primary="id" oils_persist:sequence="action.hold_copy_map_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="hold" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="target_copy" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="hold" reltype="has_a" key="id" map="" class="ahr"/>
-			<link field="target_copy" reltype="has_a" key="id" map="" class="acp"/>
-		</links>
-	</class>
-	<class id="ahn" controller="open-ils.cstore" oils_obj:fieldmapper="action::hold_notification" oils_persist:tablename="action.hold_notification" reporter:label="Hold Notification">
-		<fields oils_persist:primary="id" oils_persist:sequence="action.hold_notification_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Hold" name="hold" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Notification ID" name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Notification Method" name="method" oils_obj:array_position="5" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Notification Note" name="note" oils_obj:array_position="6" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Notifying Staff" name="notify_staff" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Notification Date/Time" name="notify_time" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-		</fields>
-		<links>
-			<link field="hold" reltype="has_a" key="id" map="" class="ahr"/>
-			<link field="notify_staff" reltype="has_a" key="id" map="" class="au"/>
-		</links>
-	</class>
-	<class id="acpl" controller="open-ils.cstore" oils_obj:fieldmapper="asset::copy_location" oils_persist:tablename="asset.copy_location" reporter:label="Copy/Shelving Location">
-		<fields oils_persist:primary="id" oils_persist:sequence="asset.copy_location_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Can Circulate?" name="circulate" oils_obj:array_position="3" oils_persist:virtual="false"  reporter:datatype="bool"/>
-			<field reporter:label="Is Holdable?" name="holdable" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Location ID" name="id" oils_obj:array_position="5" oils_persist:virtual="false" reporter:selector="name" reporter:datatype="id"/>
-			<field reporter:label="Name" name="name" oils_obj:array_position="6" oils_persist:virtual="false"  reporter:datatype="text" oils_persist:i18n="true"/>
-			<field reporter:label="Is OPAC Visible?" name="opac_visible" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Owning Org Unit" name="owning_lib" oils_obj:array_position="8" oils_persist:virtual="false"  reporter:datatype="org_unit"/>
-		</fields>
-		<links>
-			<link field="owning_lib" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_COPY_LOCATION" context_field="owning_lib"/>
-                <retrieve/>
-                <update permission="UPDATE_COPY_LOCATION" context_field="owning_lib"/>
-                <delete permission="DELETE_COPY_LOCATION" context_field="owning_lib"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="ascecm" controller="open-ils.cstore" oils_obj:fieldmapper="asset::stat_cat_entry_copy_map" oils_persist:tablename="asset.stat_cat_entry_copy_map">
-		<fields oils_persist:primary="id" oils_persist:sequence="asset.stat_cat_entry_copy_map_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="owning_copy" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="stat_cat" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="stat_cat_entry" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="owning_copy" reltype="has_a" key="id" map="" class="acp"/>
-			<link field="stat_cat_entry" reltype="has_a" key="id" map="" class="asce"/>
-			<link field="stat_cat" reltype="has_a" key="id" map="" class="asc"/>
-		</links>
-	</class>
-	<class id="citm" controller="open-ils.cstore" oils_obj:fieldmapper="config::item_type_map" oils_persist:tablename="config.item_type_map" reporter:label="Item Type Map" oils_persist:field_safe="true">
-		<fields oils_persist:primary="code">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Item Type Code" name="code" oils_obj:array_position="3" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Item Type" name="value" oils_obj:array_position="4" oils_persist:virtual="false"  reporter:datatype="text" oils_persist:i18n="true"/>
-		</fields>
-		<links/>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_MARC_CODE" global_required="true"/>
-                <retrieve permission="CREATE_MARC_CODE|UPDATE_MARC_CODE|DELETE_MARC_CODE" global_required="true"/>
-                <update permission="UPDATE_MARC_CODE" global_required="true"/>
-                <delete permission="DELETE_MARC_CODE" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="cblvl" controller="open-ils.cstore" oils_obj:fieldmapper="config::bib_level_map" oils_persist:tablename="config.bib_level_map" reporter:label="Bib Level Map" oils_persist:field_safe="true">
-		<fields oils_persist:primary="code">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Bib Level Code" name="code" oils_obj:array_position="3" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Bib Level" name="value" oils_obj:array_position="4" oils_persist:virtual="false"  reporter:datatype="text" oils_persist:i18n="true"/>
-		</fields>
-		<links/>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_MARC_CODE" global_required="true"/>
-                <retrieve permission="CREATE_MARC_CODE|UPDATE_MARC_CODE|DELETE_MARC_CODE" global_required="true"/>
-                <update permission="UPDATE_MARC_CODE" global_required="true"/>
-                <delete permission="DELETE_MARC_CODE" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="sra" controller="open-ils.cstore" oils_obj:fieldmapper="search::relevance_adjustment" oils_persist:tablename="search.relevance_adjustment" reporter:label="Relevance Adjustment">
-		<fields oils_persist:primary="id" oils_persist:sequence="search.relevance_adjustment_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false"  reporter:datatype="id"/>
-			<field reporter:label="Active" name="active" oils_obj:array_position="4" oils_persist:virtual="false"  reporter:datatype="bool"/>
-			<field reporter:label="Index Field" name="field" oils_obj:array_position="5" oils_persist:virtual="false"  reporter:datatype="link"/>
-			<field reporter:label="Bump Type" name="bump" oils_obj:array_position="6" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Multiplier" name="multiplier" oils_obj:array_position="7" oils_persist:virtual="false"  reporter:datatype="number"/>
-		</fields>
-		<links>
-            <link field="field" reltype="has_a" key="id" map="" class="cmf"/>
-        </links>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_RELEVANCE_ADJUSTMENT" global_required="true"/>
-                <retrieve permission="CREATE_RELEVANCE_ADJUSTMENT|UPDATE_RELEVANCE_ADJUSTMENT|DELETE_RELEVANCE_ADJUSTMENT" global_required="true"/>
-                <update permission="UPDATE_RELEVANCE_ADJUSTMENT" global_required="true"/>
-                <delete permission="DELETE_RELEVANCE_ADJUSTMENT" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="lasso" controller="open-ils.cstore" oils_obj:fieldmapper="actor::org_lasso" oils_persist:tablename="actor.org_lasso">
-		<fields oils_persist:primary="id" oils_persist:sequence="actor.org_lasso_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="name" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links/>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_LASSO" global_required="true"/>
-                <retrieve permission="CREATE_LASSO|UPDATE_LASSO|DELETE_LASSO" global_required="true"/>
-                <update permission="UPDATE_LASSO" global_required="true"/>
-                <delete permission="DELETE_LASSO" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="lmap" controller="open-ils.cstore" oils_obj:fieldmapper="actor::org_lasso_map" oils_persist:tablename="actor.org_lasso_map">
-		<fields oils_persist:primary="id" oils_persist:sequence="actor.org_lasso_map_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="lasso" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="org_unit" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-		</fields>
-		<links>
-			<link field="lasso" reltype="has_a" key="id" map="" class="lasso"/>
-			<link field="org_unit" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_LASSO_MAP" global_required="true"/>
-                <retrieve permission="CREATE_LASSO_MAP|UPDATE_LASSO_MAP|DELETE_LASSO_MAP" global_required="true"/>
-                <update permission="UPDATE_LASSO_MAP" global_required="true"/>
-                <delete permission="DELETE_LASSO_MAP" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="aoup" controller="open-ils.cstore" oils_obj:fieldmapper="actor::org_unit_proximity" oils_persist:tablename="actor.org_unit_proximity">
-		<fields oils_persist:primary="id" oils_persist:sequence="actor.org_unit_proximity_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="from_org" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field name="to_org" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field name="prox" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="int" />
-		</fields>
-		<links>
-			<link field="from_org" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="to_org" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-	</class>
-	<class id="ssr" controller="open-ils.cstore" oils_obj:fieldmapper="search::search_result" oils_persist:tablename="search.search_result" oils_persist:readonly="true">
-		<fields oils_persist:primary="id" oils_persist:sequence="actor.org_unit_proximity_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Relevance" name="rel" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="float"/>
-			<field reporter:label="Record" name="record" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Total Results" name="total" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="int" />
-			<field reporter:label="Checked" name="checked" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field reporter:label="Visible" name="visible" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field reporter:label="Deleted" name="deleted" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field reporter:label="Excluded" name="excluded" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="int"/>
-		</fields>
-		<links/>
-	</class>
-	<class id="asv" controller="open-ils.cstore" oils_obj:fieldmapper="action::survey" oils_persist:tablename="action.survey" reporter:label="Survey">
-		<fields oils_persist:primary="id" oils_persist:sequence="action.survey_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Questions" name="questions" oils_obj:array_position="3" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Responses" name="responses" oils_obj:array_position="4" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Description" name="description" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Survey End Date/Time" name="end_date" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Survey ID" name="id" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Name" name="name" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="OPAC Surevey?" name="opac" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Owning Library" name="owner" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field reporter:label="Poll Style?" name="poll" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Is Required?" name="required" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Survey Start Date/Time" name="start_date" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Display in User Summary" name="usr_summary" oils_obj:array_position="14" oils_persist:virtual="false" reporter:datatype="bool"/>
-		</fields>
-		<links>
-			<link field="owner" reltype="has_a" key="survey" map="" class="aou"/>
-			<link field="responses" reltype="has_many" key="survey" map="" class="asvr"/>
-			<link field="questions" reltype="has_many" key="survey" map="" class="asvq"/>
-		</links>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_SURVEY" context_field="owner"/>
-                <retrieve/>
-                <update permission="UPDATE_SURVEY" context_field="owner"/>
-                <delete permission="DELETE_SURVEY" context_field="owner"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="aoa" controller="open-ils.cstore" oils_obj:fieldmapper="actor::org_address" oils_persist:tablename="actor.org_address">
-		<fields oils_persist:primary="id" oils_persist:sequence="actor.org_address_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="address_type" oils_obj:array_position="3" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field name="city" oils_obj:array_position="4" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field name="country" oils_obj:array_position="5" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field name="county" oils_obj:array_position="6" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field name="id" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="org_unit" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field name="post_code" oils_obj:array_position="9" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field name="state" oils_obj:array_position="10" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field name="street1" oils_obj:array_position="11" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field name="street2" oils_obj:array_position="12" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field name="valid" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="bool"/>
-		</fields>
-		<links>
-			<link field="org_unit" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_ORG_ADDRESS" context_field="org_unit"/>
-                <retrieve/>
-                <update permission="UPDATE_ORG_ADDRESS" context_field="org_unit"/>
-                <delete permission="DELETE_ORG_ADDRESS" context_field="org_unit"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="ahr" controller="open-ils.cstore" oils_obj:fieldmapper="action::hold_request" oils_persist:tablename="action.hold_request" reporter:core="true" reporter:label="Hold Request">
-		<fields oils_persist:primary="id" oils_persist:sequence="action.hold_request_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="status" oils_obj:array_position="3" oils_persist:virtual="true" />
-			<field reporter:label="Transit" name="transit" oils_obj:array_position="4" oils_persist:virtual="true" />
-			<field reporter:label="Capture Date/Time" name="capture_time" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Currently Targeted Copy" name="current_copy" oils_obj:array_position="6" oils_persist:virtual="false" />
-			<field reporter:label="Notify by Email?" name="email_notify" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Hold Expire Date/Time" name="expire_time" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Fulfilling Library" name="fulfillment_lib" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field reporter:label="Fulfilling Staff" name="fulfillment_staff" oils_obj:array_position="10" oils_persist:virtual="false" />
-			<field reporter:label="Fulfillment Date/Time" name="fulfillment_time" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Hold Type" name="hold_type" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Holdable Formats (for M-type hold)" name="holdable_formats" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Hold ID" name="id" oils_obj:array_position="14" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Notifications Phone Number" name="phone_notify" oils_obj:array_position="15" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Pickup Library" name="pickup_lib" oils_obj:array_position="16" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field reporter:label="Last Targeting Date/Time" name="prev_check_time" oils_obj:array_position="17" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Requesting Library" name="request_lib" oils_obj:array_position="18" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field reporter:label="Request Date/Time" name="request_time" oils_obj:array_position="19" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Requesting User" name="requestor" oils_obj:array_position="20" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Item Selection Depth" name="selection_depth" oils_obj:array_position="21" oils_persist:virtual="false" />
-			<field reporter:label="Selection Locus" name="selection_ou" oils_obj:array_position="22" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field reporter:label="Target Object ID" name="target" oils_obj:array_position="23" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Hold User" name="usr" oils_obj:array_position="24" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Hold Cancel Date/Time" name="cancel_time" oils_obj:array_position="25" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="notify_time" oils_obj:array_position="26" oils_persist:virtual="true" reporter:datatype="timestamp"/>
-			<field name="notify_count" oils_obj:array_position="27" oils_persist:virtual="true" reporter:datatype="int" />
-			<field reporter:label="Notifications" name="notifications" oils_obj:array_position="28" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Bib Record link" name="bib_rec" oils_obj:array_position="29" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Eligible Copies" name="eligible_copies" oils_obj:array_position="30" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Currently Frozen" name="frozen" oils_obj:array_position="31" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Thaw Date (if frozen)" name="thaw_date" oils_obj:array_position="32" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-		</fields>
-		<links>
-			<link field="fulfillment_lib" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="fulfillment_staff" reltype="has_a" key="id" map="" class="au"/>
-			<link field="pickup_lib" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="selection_ou" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="requestor" reltype="has_a" key="id" map="" class="au"/>
-			<link field="current_copy" reltype="has_a" key="id" map="" class="acp"/>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="request_lib" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="transit" reltype="might_have" key="hold" map="" class="ahtc"/>
-			<link field="notifications" reltype="has_many" key="hold" map="" class="ahn"/>
-			<link field="eligible_copies" reltype="has_many" key="hold" map="target_copy" class="ahcm"/>
-			<link field="bib_rec" reltype="might_have" key="id" map="" class="rhrr"/>
-		</links>
-	</class>
-	<class id="aou" controller="open-ils.cstore" oils_obj:fieldmapper="actor::org_unit" oils_persist:tablename="actor.org_unit" reporter:label="Organizational Unit" oils_persist:field_safe="true">
-		<fields oils_persist:primary="id" oils_persist:sequence="actor.org_unit_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Subordinate Organizational Units" name="children" oils_obj:array_position="3" oils_persist:virtual="true" reporter:datatype="org_unit"/>
-			<field reporter:label="Billing Address" name="billing_address" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Holds Receiving Address" name="holds_address" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Organizational Unit ID" name="id" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field reporter:label="ILL Receiving Address" name="ill_address" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Mailing Address" name="mailing_address" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Name" name="name" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="text" oils_persist:i18n="true"/>
-			<field reporter:label="Organizational Unit Type" name="ou_type" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Parent Organizational Unit" name="parent_ou" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Short (Policy) Name" name="shortname" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Email Address" name="email" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Phone Number" name="phone" oils_obj:array_position="14" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="OPAC Visible" name="opac_visible" oils_obj:array_position="15" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Users" name="users" oils_obj:array_position="16" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Closed Dates" name="closed_dates" oils_obj:array_position="17" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Circulations" name="circulations" oils_obj:array_position="18" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Settings" name="settings" oils_obj:array_position="19" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Addresses" name="addresses" oils_obj:array_position="20" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Checkins" name="checkins" oils_obj:array_position="21" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Workstations" name="workstations" oils_obj:array_position="22" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="billing_address" reltype="has_a" key="id" map="" class="aoa"/>
-			<link field="holds_address" reltype="has_a" key="id" map="" class="aoa"/>
-			<link field="ou_type" reltype="has_a" key="id" map="" class="aout"/>
-			<link field="mailing_address" reltype="has_a" key="id" map="" class="aoa"/>
-			<link field="parent_ou" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="ill_address" reltype="has_a" key="id" map="" class="aoa"/>
-			<link field="users" reltype="has_many" key="home_ou" map="" class="au"/>
-			<link field="closed_dates" reltype="has_many" key="org_unit" map="" class="aoucd"/>
-			<link field="children" reltype="has_many" key="parent_ou" map="" class="aou"/>
-			<link field="circulations" reltype="has_many" key="circ_lib" map="" class="circ"/>
-			<link field="settings" reltype="has_many" key="org_unit" map="" class="aous"/>
-			<link field="addresses" reltype="has_many" key="org_unit" map="" class="aoa"/>
-			<link field="checkins" reltype="has_many" key="checkin_lib" map="" class="circ"/>
-			<link field="workstations" reltype="has_many" key="owning_lib" map="" class="aws"/>
-		</links>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_ORG_UNIT" context_field="parent_ou"/>
-                <retrieve permission="CREATE_ORG_UNIT|UPDATE_ORG_UNIT|DELETE_ORG_UNIT">
-                    <context field="id"/>
-                    <context field="parent_ou"/>
-				</retrieve>
-                <update permission="UPDATE_ORG_UNIT" context_field="id"/>
-                <delete permission="DELETE_ORG_UNIT" context_field="parent_ou"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="ccnb" controller="open-ils.cstore" oils_obj:fieldmapper="container::call_number_bucket" oils_persist:tablename="container.call_number_bucket">
-		<fields oils_persist:primary="id" oils_persist:sequence="container.call_number_bucket_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="items" oils_obj:array_position="3" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field name="btype" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="id" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="name" oils_obj:array_position="6" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field name="owner" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="pub" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="create_time" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="timestamp" />
-		</fields>
-		<links>
-			<link field="owner" reltype="has_a" key="id" map="" class="au"/>
-			<link field="items" reltype="has_many" key="bucket" map="" class="ccnbi"/>
-		</links>
-	</class>
-	<class id="asc" controller="open-ils.cstore" oils_obj:fieldmapper="asset::stat_cat" oils_persist:tablename="asset.stat_cat" reporter:label="Asset Statistical Category">
-		<fields oils_persist:primary="id" oils_persist:sequence="asset.stat_cat_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Entries" name="entries" oils_obj:array_position="3" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Stat Cat ID" name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" reporter:selector="name"/>
-			<field reporter:label="Name" name="name" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text" oils_persist:i18n="true"/>
-			<field reporter:label="OPAC Visible" name="opac_visible" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Owning Library" name="owner" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-		</fields>
-		<links>
-			<link field="owner" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="entries" reltype="has_many" key="stat_cat" map="" class="asce"/>
-		</links>
-	</class>
-	<class id="ac" controller="open-ils.cstore" oils_obj:fieldmapper="actor::card" oils_persist:tablename="actor.card" reporter:label="Library Card">
-		<fields oils_persist:primary="id" oils_persist:sequence="actor.card_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="IsActive?" name="active" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Barcode" name="barcode" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Card ID" name="id" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="User" name="usr" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-		</links>
-	</class>
-	<class id="actsc" controller="open-ils.cstore" oils_obj:fieldmapper="actor::stat_cat" oils_persist:tablename="actor.stat_cat" reporter:label="User Statistical Category">
-		<fields oils_persist:primary="id" oils_persist:sequence="actor.stat_cat_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Entries" name="entries" oils_obj:array_position="3" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Stat Cat ID" name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" reporter:selector="name"/>
-			<field reporter:label="Name" name="name" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text" oils_persist:i18n="true"/>
-			<field reporter:label="OPAC Visible" name="opac_visible" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Owning Library" name="owner" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-		</fields>
-		<links>
-			<link field="owner" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="entries" reltype="has_many" key="stat_cat" map="" class="actsce"/>
-		</links>
-	</class>
-	<class id="msefe" controller="open-ils.cstore" oils_obj:fieldmapper="metabib::series_field_entry" oils_persist:tablename="metabib.series_field_entry">
-		<fields oils_persist:primary="id" oils_persist:sequence="metabib.series_field_entry_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="field" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="source" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="value" oils_obj:array_position="6" oils_persist:virtual="false"  reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="source" reltype="has_a" key="id" map="" class="bre"/>
-			<link field="field" reltype="has_a" key="id" map="" class="cmf"/>
-		</links>
-	</class>
-	<class id="cub" controller="open-ils.cstore" oils_obj:fieldmapper="container::user_bucket" oils_persist:tablename="container.user_bucket">
-		<fields oils_persist:primary="id" oils_persist:sequence="container.user_bucket_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="items" oils_obj:array_position="3" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field name="btype" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="id" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="name" oils_obj:array_position="6" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field name="owner" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="pub" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="create_time" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="timestamp" />
-		</fields>
-		<links>
-			<link field="owner" reltype="has_a" key="id" map="" class="au"/>
-			<link field="items" reltype="has_many" key="bucket" map="" class="cubi"/>
-		</links>
-	</class>
-	<class id="mcrp" controller="open-ils.cstore" oils_obj:fieldmapper="money::credit_payment" oils_persist:tablename="money.credit_payment" reporter:label="House Credit Payment">
-		<fields oils_persist:primary="id" oils_persist:sequence="money.payment_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Accepting Staff Member" name="accepting_usr" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Amount" name="amount" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Amount Collected" name="amount_collected" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Pyament ID" name="id" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Payment Note" name="note" oils_obj:array_position="7" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="Payment Timestamp" name="payment_ts" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Transaction" name="xact" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Payment Type" name="payment_type" oils_obj:array_position="10" oils_persist:virtual="true"  reporter:datatype="text"/>
-			<field reporter:label="Payment link" name="payment" oils_obj:array_position="11" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="payment" reltype="might_have" key="id" map="" class="mp"/>
-			<link field="accepting_usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="xact" reltype="has_a" key="id" map="" class="mbt"/>
-		</links>
-	</class>
-	<class id="afr" controller="open-ils.cstore" oils_obj:fieldmapper="authority::full_rec" oils_persist:tablename="authority.full_rec">
-		<fields oils_persist:primary="id" oils_persist:sequence="authority.full_rec_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="ind1" oils_obj:array_position="4" oils_persist:virtual="false" />
-			<field name="ind2" oils_obj:array_position="5" oils_persist:virtual="false" />
-			<field name="record" oils_obj:array_position="6" oils_persist:virtual="false" />
-			<field name="subfield" oils_obj:array_position="7" oils_persist:virtual="false" />
-			<field name="tag" oils_obj:array_position="8" oils_persist:virtual="false" />
-			<field name="value" oils_obj:array_position="9" oils_persist:virtual="false" />
-		</fields>
-		<links>
-			<link field="record" reltype="has_a" key="id" map="" class="are"/>
-		</links>
-	</class>
-	<class id="cnct" controller="open-ils.cstore" oils_obj:fieldmapper="config::non_cataloged_type" oils_persist:tablename="config.non_cataloged_type" reporter:label="Non-cataloged Type">
-		<fields oils_persist:primary="id" oils_persist:sequence="config.non_cataloged_type_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Circulation Duration" name="circ_duration" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="interval"/>
-			<field reporter:label="Non-cat Type ID" name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:selector="name" reporter:datatype="id"/>
-			<field reporter:label="In House?" name="in_house" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Name" name="name" oils_obj:array_position="6" oils_persist:virtual="false"  reporter:datatype="text" oils_persist:i18n="true"/>
-			<field reporter:label="Owning Library" name="owning_lib" oils_obj:array_position="7" oils_persist:virtual="false"  reporter:datatype="org_unit"/>
-		</fields>
-		<links>
-			<link field="owning_lib" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-	</class>
-	<class id="aout" controller="open-ils.cstore" oils_obj:fieldmapper="actor::org_unit_type" oils_persist:tablename="actor.org_unit_type" reporter:label="Organizational Unit Type">
-		<fields oils_persist:primary="id" oils_persist:sequence="actor.org_unit_type_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Subordinate Types" name="children" oils_obj:array_position="3" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Can Have Users?" name="can_have_users" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Can Have Volumes?" name="can_have_vols" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Type Depth" name="depth" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="int" />
-			<field reporter:label="Type ID" name="id" oils_obj:array_position="7" oils_persist:virtual="false" reporter:selector="name" reporter:datatype="id"/>
-			<field reporter:label="Type Name" name="name" oils_obj:array_position="8" oils_persist:virtual="false"  reporter:datatype="text" oils_persist:i18n="true"/>
-			<field reporter:label="OPAC Label" name="opac_label" oils_obj:array_position="9" oils_persist:virtual="false"  reporter:datatype="text" oils_persist:i18n="true"/>
-			<field reporter:label="Parent Type" name="parent" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Org Units" name="org_units" oils_obj:array_position="11" oils_persist:virtual="true"  reporter:datatype="org_unit"/>
-		</fields>
-		<links>
-			<link field="parent" reltype="has_a" key="id" map="" class="aout"/>
-			<link field="children" reltype="has_many" key="parent" map="" class="aout"/>
-			<link field="org_units" reltype="has_many" key="ou_type" map="" class="aou"/>
-		</links>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_ORG_TYPE" global_required="true"/>
-                <retrieve permission="CREATE_ORG_UNIT|UPDATE_ORG_UNIT|DELETE_ORG_UNIT" global_required="true"/>
-                <update permission="UPDATE_ORG_TYPE" global_required="true"/>
-                <delete permission="DELETE_ORG_TYPE" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="bren" controller="open-ils.cstore" oils_obj:fieldmapper="biblio::record_note" oils_persist:tablename="biblio.record_note">
-		<fields oils_persist:primary="id" oils_persist:sequence="biblio.record_note_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="create_date" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="creator" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="edit_date" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="editor" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="id" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="pub" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="record" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="value" oils_obj:array_position="10" oils_persist:virtual="false"  reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="creator" reltype="has_a" key="id" map="" class="au"/>
-			<link field="editor" reltype="has_a" key="id" map="" class="au"/>
-			<link field="record" reltype="has_a" key="id" map="" class="bre"/>
-		</links>
-	</class>
-	<class id="mucs" controller="open-ils.cstore" oils_obj:fieldmapper="money::user_circulation_summary" oils_persist:tablename="money.usr_circulation_summary">
-		<fields oils_persist:primary="usr" oils_persist:sequence="">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="balance_owed" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="total_owed" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="total_paid" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="usr" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-		</links>
-	</class>
-	<class id="mg" controller="open-ils.cstore" oils_obj:fieldmapper="money::grocery" oils_persist:tablename="money.grocery" reporter:label="Grocery Transaction">
-		<fields oils_persist:primary="id" oils_persist:sequence="money.billable_xact_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Billing Location" name="billing_location" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Transaction ID" name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Note" name="note" oils_obj:array_position="5" oils_persist:virtual="false"  reporter:datatype="text"/>
-			<field reporter:label="User" name="usr" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Transaction Finish Timestamp" name="xact_finish" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field reporter:label="Transaction Start Timestamp" name="xact_start" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field reporter:label="Billings" name="billings" oils_obj:array_position="9" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Payments" name="payments" oils_obj:array_position="10" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Billable Transaction link" name="billable_transaction" oils_obj:array_position="11" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Billing Totals" name="billing_total" oils_obj:array_position="12" oils_persist:virtual="true" reporter:datatype="money"/>
-			<field reporter:label="Payment Totals" name="payment_total" oils_obj:array_position="13" oils_persist:virtual="true" reporter:datatype="money"/>
-		</fields>
-		<links>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="billable_transaction" reltype="might_have" key="id" map="" class="mbt"/>
-			<link field="payments" reltype="has_many" key="xact" map="" class="mp"/>
-			<link field="billings" reltype="has_many" key="xact" map="" class="mb"/>
-			<link field="billing_location" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="billing_total" reltype="might_have" key="xact" map="" class="rxbt"/>
-			<link field="payment_total" reltype="might_have" key="xact" map="" class="rxpt"/>
-		</links>
-	</class>
-	<class id="cbs" controller="open-ils.cstore" oils_obj:fieldmapper="config::bib_source" oils_persist:tablename="config.bib_source">
-		<fields oils_persist:primary="id" oils_persist:sequence="config.bib_source_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:selector="source" reporter:datatype="id"/>
-			<field name="quality" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="int" />
-			<field name="source" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="transcendant" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="bool"/>
-		</fields>
-		<links/>
-	</class>
-	<class id="mbt" controller="open-ils.cstore" oils_obj:fieldmapper="money::billable_transaction" oils_persist:tablename="money.billable_xact" reporter:label="Billable Transaction">
-		<fields oils_persist:primary="id" oils_persist:sequence="money.billable_xact_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Transaction ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="User" name="usr" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Transaction Finish Date/Time" name="xact_finish" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Transaction Start Date/Time" name="xact_start" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Grocery Billing link" name="grocery" oils_obj:array_position="7" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Circulation Billing link" name="circulation" oils_obj:array_position="8" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Billing Line Items" name="billings" oils_obj:array_position="9" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Payment Line Items" name="payments" oils_obj:array_position="10" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Billing Totals" name="billing_total" oils_obj:array_position="11" oils_persist:virtual="true" reporter:datatype="money"/>
-			<field reporter:label="Payment Totals" name="payment_total" oils_obj:array_position="12" oils_persist:virtual="true" reporter:datatype="money"/>
-		</fields>
-		<links>
-			<link field="grocery" reltype="might_have" key="id" map="" class="mg"/>
-			<link field="circulation" reltype="might_have" key="id" map="" class="circ"/>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="payments" reltype="has_many" key="xact" map="" class="mp"/>
-			<link field="billings" reltype="has_many" key="xact" map="" class="mb"/>
-			<link field="billing_total" reltype="might_have" key="xact" map="" class="rxbt"/>
-			<link field="payment_total" reltype="might_have" key="xact" map="" class="rxpt"/>
-		</links>
-	</class>
-	<class id="actsce" controller="open-ils.cstore" oils_obj:fieldmapper="actor::stat_cat_entry" oils_persist:tablename="actor.stat_cat_entry" reporter:label="User Stat Cat Entry">
-		<fields oils_persist:primary="id" oils_persist:sequence="actor.stat_cat_entry_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Entry ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Entry Owner" name="owner" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Stat Cat" name="stat_cat" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Entry Value" name="value" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="stat_cat" reltype="has_a" key="id" map="" class="actsc"/>
-			<link field="owner" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-	</class>
-	<class id="cubi" controller="open-ils.cstore" oils_obj:fieldmapper="container::user_bucket_item" oils_persist:tablename="container.user_bucket_item">
-		<fields oils_persist:primary="id" oils_persist:sequence="container.user_bucket_item_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="bucket" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="target_user" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="create_time" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="timestamp" />
-		</fields>
-		<links>
-			<link field="target_user" reltype="has_a" key="id" map="" class="au"/>
-			<link field="bucket" reltype="has_a" key="id" map="" class="cub"/>
-		</links>
-	</class>
-	<class id="mus" controller="open-ils.cstore" oils_obj:fieldmapper="money::user_summary" oils_persist:tablename="money.usr_summary">
-		<fields oils_persist:primary="usr" oils_persist:sequence="">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="balance_owed" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="total_owed" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="total_paid" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="usr" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-		</links>
-	</class>
-	<class id="clfm" controller="open-ils.cstore" oils_obj:fieldmapper="config::lit_form_map" oils_persist:tablename="config.lit_form_map" reporter:label="Literary Form" oils_persist:field_safe="true">
-		<fields oils_persist:primary="code" oils_persist:sequence="">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="LitF Code" name="code" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="LitF Description" name="description" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text" oils_persist:i18n="true"/>
-			<field reporter:label="LitF Name" name="value" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text" oils_persist:i18n="true"/>
-		</fields>
-		<links/>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_MARC_CODE" global_required="true"/>
-                <retrieve permission="CREATE_MARC_CODE|UPDATE_MARC_CODE|DELETE_MARC_CODE" global_required="true"/>
-                <update permission="UPDATE_MARC_CODE" global_required="true"/>
-                <delete permission="DELETE_MARC_CODE" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="mwp" controller="open-ils.cstore" oils_obj:fieldmapper="money::work_payment" oils_persist:tablename="money.work_payment" reporter:label="Work Payment">
-		<fields oils_persist:primary="id" oils_persist:sequence="money.payment_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Accepting Staff Member" name="accepting_usr" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Amount" name="amount" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Amount Collected" name="amount_collected" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Payment ID" name="id" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Note" name="note" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Payment Timestamp" name="payment_ts" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Transaction ID" name="xact" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Payment link" name="payment" oils_obj:array_position="10" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Payment Type" name="payment_type" oils_obj:array_position="11" oils_persist:virtual="true" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="payment" reltype="might_have" key="id" map="" class="mp"/>
-			<link field="accepting_usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="xact" reltype="has_a" key="id" map="" class="mbt"/>
-		</links>
-	</class>
-	<class id="mgp" controller="open-ils.cstore" oils_obj:fieldmapper="money::goods_payment" oils_persist:tablename="money.goods_payment" reporter:label="Goods Payment">
-		<fields oils_persist:primary="id" oils_persist:sequence="money.payment_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Accepting Staff Member" name="accepting_usr" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Amount" name="amount" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Amount Collected" name="amount_collected" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Payment ID" name="id" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Note" name="note" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Payment Timestamp" name="payment_ts" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Transaction ID" name="xact" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Payment link" name="payment" oils_obj:array_position="10" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Payment Type" name="payment_type" oils_obj:array_position="11" oils_persist:virtual="true" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="payment" reltype="might_have" key="id" map="" class="mp"/>
-			<link field="accepting_usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="xact" reltype="has_a" key="id" map="" class="mbt"/>
-		</links>
-	</class>
-	<class id="aoc" controller="open-ils.cstore" oils_obj:fieldmapper="action::open_circulation" oils_persist:tablename="action.open_circulation">
-		<fields oils_persist:primary="id" oils_persist:sequence="">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="checkin_lib" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="checkin_staff" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="checkin_time" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="circ_lib" oils_obj:array_position="6" oils_persist:virtual="false"  reporter:datatype="org_unit"/>
-			<field name="circ_staff" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="desk_renewal" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="due_date" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="duration" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="interval"/>
-			<field name="duration_rule" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="fine_interval" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="interval"/>
-			<field name="id" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="max_fine" oils_obj:array_position="14" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="max_fine_rule" oils_obj:array_position="15" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="opac_renewal" oils_obj:array_position="16" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="phone_renewal" oils_obj:array_position="17" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="recuring_fine" oils_obj:array_position="18" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="recuring_fine_rule" oils_obj:array_position="19" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="renewal_remaining" oils_obj:array_position="20" oils_persist:virtual="false" reporter:datatype="int" />
-			<field name="stop_fines" oils_obj:array_position="21" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="stop_fines_time" oils_obj:array_position="22" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="target_copy" oils_obj:array_position="23" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="usr" oils_obj:array_position="24" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="xact_finish" oils_obj:array_position="25" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field name="xact_start" oils_obj:array_position="26" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field name="circulation" oils_obj:array_position="27" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="circulation" reltype="might_have" key="id" map="" class="circ"/>
-			<link field="duration_rule" reltype="has_a" key="name" map="" class="crcd"/>
-			<link field="max_fine_rule" reltype="has_a" key="name" map="" class="crmf"/>
-			<link field="recuring_fine_rule" reltype="has_a" key="name" map="" class="crrf"/>
-		</links>
-	</class>
-	<class id="msfe" controller="open-ils.cstore" oils_obj:fieldmapper="metabib::subject_field_entry" oils_persist:tablename="metabib.subject_field_entry">
-		<fields oils_persist:primary="id" oils_persist:sequence="metabib.subject_field_entry_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="field" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="source" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="value" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="source" reltype="has_a" key="id" map="" class="bre"/>
-			<link field="field" reltype="has_a" key="id" map="" class="cmf"/>
-		</links>
-	</class>
-	<class id="crrf" controller="open-ils.cstore" oils_obj:fieldmapper="config::rules::recuring_fine" oils_persist:tablename="config.rule_recuring_fine">
-		<fields oils_persist:primary="id" oils_persist:sequence="config.rule_recuring_fine_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="high" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:selector="name" reporter:datatype="id"/>
-			<field name="low" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="name" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="normal" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="recurance_interval" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="interval"/>
-		</fields>
-		<links/>
-	</class>
-	<class id="mckp" controller="open-ils.cstore" oils_obj:fieldmapper="money::check_payment" oils_persist:tablename="money.check_payment" reporter:label="Check Payment">
-		<fields oils_persist:primary="id" oils_persist:sequence="money.payment_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Accepting Staff Member" name="accepting_usr" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Amount" name="amount" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Amount Collected" name="amount_collected" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Workstation link" name="cash_drawer" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Check Number" name="check_number" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="int" />
-			<field reporter:label="Payment ID" name="id" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Note" name="note" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Payment Timestamp" name="payment_ts" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Transaction link" name="xact" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Payment link" name="payment" oils_obj:array_position="12" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Payment Type" name="payment_type" oils_obj:array_position="13" oils_persist:virtual="true" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="payment" reltype="might_have" key="id" map="" class="mp"/>
-			<link field="accepting_usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="cash_drawer" reltype="has_a" key="id" map="" class="aws"/>
-			<link field="xact" reltype="has_a" key="id" map="" class="mbt"/>
-		</links>
-	</class>
-	<class id="acp" controller="open-ils.cstore" oils_obj:fieldmapper="asset::copy" oils_persist:tablename="asset.copy" reporter:core="true" reporter:label="Item">
-		<fields oils_persist:primary="id" oils_persist:sequence="asset.copy_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Statistical Catagory Entries" name="stat_cat_entries" oils_obj:array_position="3" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Age Hold Protection" name="age_protect" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Alert Message" name="alert_message" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Barcode" name="barcode" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Call Number/Volume" name="call_number" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Circulation Type (MARC)" name="circ_as_type" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Circulating Library" name="circ_lib" oils_obj:array_position="9" oils_persist:virtual="false"  reporter:datatype="org_unit"/>
-			<field reporter:label="Circulation Modifier" name="circ_modifier" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Can Circulate" name="circulate" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Copy Number on Volume" name="copy_number" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Creation Date/Time" name="create_date" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Creating User" name="creator" oils_obj:array_position="14" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Is Deleted" name="deleted" oils_obj:array_position="15" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Is Deposit Required" name="deposit" oils_obj:array_position="16" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Deposit Amount" name="deposit_amount" oils_obj:array_position="17" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Precat Dummy Author" name="dummy_author" oils_obj:array_position="18" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Precat Dummy Title" name="dummy_title" oils_obj:array_position="19" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Last Edit Date/Time" name="edit_date" oils_obj:array_position="20" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Last Editing User" name="editor" oils_obj:array_position="21" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Fine Level" name="fine_level" oils_obj:array_position="22" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field reporter:label="Is Holdable" name="holdable" oils_obj:array_position="23" oils_persist:virtual="false" reporter:datatype="bool" />
-			<field reporter:label="Copy ID" name="id" oils_obj:array_position="24" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Loan Duration" name="loan_duration" oils_obj:array_position="25" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field reporter:label="Shelving Location" name="location" oils_obj:array_position="26" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="OPAC Visible" name="opac_visible" oils_obj:array_position="27" oils_persist:virtual="false" reporter:datatype="bool" />
-			<field reporter:label="Price" name="price" oils_obj:array_position="28" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Is Reference" name="ref" oils_obj:array_position="29" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Copy Status" name="status" oils_obj:array_position="30" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Copy Notes" name="notes" oils_obj:array_position="31" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Stat-Cat entry maps" name="stat_cat_entry_copy_maps" oils_obj:array_position="32" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Circulations" name="circulations" oils_obj:array_position="33" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Total Circulations" name="total_circ_count" oils_obj:array_position="34" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Holds" name="holds" oils_obj:array_position="35" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="age_protect" reltype="has_a" key="id" map="" class="crahp"/>
-			<link field="call_number" reltype="has_a" key="id" map="" class="acn"/>
-			<link field="location" reltype="has_a" key="id" map="" class="acpl"/>
-			<link field="editor" reltype="has_a" key="id" map="" class="au"/>
-			<link field="creator" reltype="has_a" key="id" map="" class="au"/>
-			<link field="status" reltype="has_a" key="id" map="" class="ccs"/>
-			<link field="circ_lib" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="holds" reltype="has_many" key="target_copy" map="hold" class="ahcm"/>
-			<link field="stat_cat_entry_copy_maps" reltype="has_many" key="owning_copy" map="" class="ascecm"/>
-			<link field="notes" reltype="has_many" key="owning_copy" map="" class="acpn"/>
-			<link field="stat_cat_entries" reltype="has_many" key="owning_copy" map="stat_cat_entry" class="ascecm"/>
-			<link field="circulations" reltype="has_many" key="target_copy" map="" class="circ"/>
-			<link field="total_circ_count" reltype="might_have" key="id" map="" class="erfcc"/>
-		</links>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_COPY">
-                    <context link="call_number" field="owning_lib"/>
-                </create>
-                <retrieve/>
-                <update permission="UPDATE_COPY">
-                    <context link="call_number" field="owning_lib"/>
-                </update>
-                <delete permission="DELETE_COPY">
-                    <context link="call_number" field="owning_lib"/>
-                </delete>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="crahp" controller="open-ils.cstore" oils_obj:fieldmapper="config::rules::age_hold_protect" oils_persist:tablename="config.rule_age_hold_protect" reporter:label="Age Hold Protection Rule">
-		<fields oils_persist:primary="id" oils_persist:sequence="config.rule_age_hold_protect_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Item Age" name="age" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="interval"/>
-			<field reporter:label="Rule ID" name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:selector="name" reporter:datatype="id"/>
-			<field reporter:label="Rule Name" name="name" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Allowed Proximity" name="prox" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="int" />
-		</fields>
-		<links/>
-	</class>
-	<class id="crmf" controller="open-ils.cstore" oils_obj:fieldmapper="config::rules::max_fine" oils_persist:tablename="config.rule_max_fine" reporter:label="Max Fine Rule">
-		<fields oils_persist:primary="id" oils_persist:sequence="config.rule_max_fine_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Max Fine Amount" name="amount" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Rule ID" name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:selector="name" reporter:datatype="id"/>
-			<field reporter:label="Rule Name" name="name" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links/>
-	</class>
-	<class id="pgt" controller="open-ils.cstore" oils_obj:fieldmapper="permission::grp_tree" oils_persist:tablename="permission.grp_tree" reporter:label="Permission Group">
-		<fields oils_persist:primary="id" oils_persist:sequence="permission.grp_tree_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Child Groups" name="children" oils_obj:array_position="3" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Description" name="description" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text" oils_persist:i18n="true"/>
-			<field reporter:label="Group ID" name="id" oils_obj:array_position="5" oils_persist:virtual="false" reporter:selector="name" reporter:datatype="id"/>
-			<field reporter:label="Group Name" name="name" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text" oils_persist:i18n="true"/>
-			<field reporter:label="Parent Group" name="parent" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="User Expiration Interval" name="perm_interval" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="interval"/>
-			<field reporter:label="Required Permission" name="application_perm" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Is User Group" name="usergroup" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="bool"/>
-		</fields>
-		<links>
-			<link field="parent" reltype="has_a" key="id" map="" class="pgt"/>
-			<link field="children" reltype="has_many" key="parent" map="" class="pgt"/>
-		</links>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_PERM" global_required="true"/>
-                <retrieve permission="CREATE_PERM|UPDATE_PERM|DELETE_PERM" global_required="true"/>
-                <update permission="UPDATE_PERM" global_required="true"/>
-                <delete permission="DELETE_PERM" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="asva" controller="open-ils.cstore" oils_obj:fieldmapper="action::survey_answer" oils_persist:tablename="action.survey_answer" reporter:label="Survey Answer">
-		<fields oils_persist:primary="id" oils_persist:sequence="action.survey_answer_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Responses using this Answer" name="responses" oils_obj:array_position="3" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Answer Text" name="answer" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Answer ID" name="id" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Question" name="question" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="question" reltype="has_a" key="id" map="" class="asvq"/>
-			<link field="responses" reltype="has_many" key="answer" map="" class="asvr"/>
-		</links>
-	</class>
-	<class id="ancc" controller="open-ils.cstore" oils_obj:fieldmapper="action::non_cataloged_circulation" oils_persist:tablename="action.non_cataloged_circulation" reporter:core="true" reporter:label="Non-cataloged Circulation">
-		<fields oils_persist:primary="id" oils_persist:sequence="action.non_cataloged_circulation_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Circulating Library" name="circ_lib" oils_obj:array_position="3" oils_persist:virtual="false"  reporter:datatype="org_unit"/>
-			<field reporter:label="Circulation Date/Time" name="circ_time" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Non-cat Circulation ID" name="id" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Non-cat Item Type" name="item_type" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Patron" name="patron" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Circulating Staff" name="staff" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="item_type" reltype="has_a" key="id" map="" class="cnct"/>
-			<link field="staff" reltype="has_a" key="id" map="" class="au"/>
-			<link field="patron" reltype="has_a" key="id" map="" class="au"/>
-			<link field="circ_lib" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-	</class>
-	<class id="moucs" controller="open-ils.cstore" oils_obj:fieldmapper="money::open_user_circulation_summary" oils_persist:tablename="money.open_usr_circulation_summary">
-		<fields oils_persist:primary="usr" oils_persist:sequence="">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="balance_owed" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="total_owed" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="total_paid" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="money" />
-			<field name="usr" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-		</links>
-	</class>
-	<class id="aufh" controller="open-ils.cstore" oils_obj:fieldmapper="action::unfulfilled_hold_list" oils_persist:tablename="action.unfulfilled_hold_list" reporter:label="Unfulfilled Hold Targets">
-		<fields oils_persist:primary="id" oils_persist:sequence="action.unfulfilled_hold_list_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Non-fulfilling Library" name="circ_lib" oils_obj:array_position="3" oils_persist:virtual="false"  reporter:datatype="org_unit"/>
-			<field reporter:label="Non-fulfilling Copy" name="current_copy" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Retargeting Date/Time" name="fail_time" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Hold" name="hold" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Record ID" name="id" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="id" />
-		</fields>
-		<links>
-			<link field="hold" reltype="has_a" key="id" map="" class="ahr"/>
-			<link field="current_copy" reltype="has_a" key="id" map="" class="acp"/>
-			<link field="circ_lib" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-	</class>
-	<class id="mtfe" controller="open-ils.cstore" oils_obj:fieldmapper="metabib::title_field_entry" oils_persist:tablename="metabib.title_field_entry">
-		<fields oils_persist:primary="id" oils_persist:sequence="metabib.title_field_entry_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="field" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="source" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="value" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="source" reltype="has_a" key="id" map="" class="bre"/>
-			<link field="field" reltype="has_a" key="id" map="" class="cmf"/>
-		</links>
-	</class>
-	<class id="actscecm" controller="open-ils.cstore" oils_obj:fieldmapper="actor::stat_cat_entry_user_map" oils_persist:tablename="actor.stat_cat_entry_usr_map"  reporter:label="User Statistical Category Entry">
-		<fields oils_persist:primary="id" oils_persist:sequence="actor.stat_cat_entry_usr_map_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Entry ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Statistical Category" name="stat_cat" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Entry Text" name="stat_cat_entry" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="User" name="target_usr" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="target_usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="stat_cat" reltype="has_a" key="id" map="" class="actsc"/>
-		</links>
-	</class>
-	<class id="pgpm" controller="open-ils.cstore" oils_obj:fieldmapper="permission::grp_perm_map" oils_persist:tablename="permission.grp_perm_map">
-		<fields oils_persist:primary="id" oils_persist:sequence="permission.grp_perm_map_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="depth" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="int" />
-			<field name="grantable" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="grp" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="id" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="perm" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="grp" reltype="has_a" key="id" map="" class="pgt"/>
-			<link field="perm" reltype="has_a" key="id" map="" class="ppl"/>
-		</links>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="ASSIGN_GROUP_PERM" global_required="true"/>
-                <retrieve permission="ASSIGN_GROUP_PERM|UPDATE_GROUP_PERM|REMOVE_GROUP_PERM" global_required="true"/>
-                <update permission="UPDATE_GROUP_PERM" global_required="true"/>
-                <delete permission="REMOVE_GROUP_PERM" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="ccb" controller="open-ils.cstore" oils_obj:fieldmapper="container::copy_bucket" oils_persist:tablename="container.copy_bucket">
-		<fields oils_persist:primary="id" oils_persist:sequence="container.copy_bucket_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="items" oils_obj:array_position="3" oils_persist:virtual="true" />
-			<field name="btype" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="id" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="name" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="owner" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="pub" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="create_time" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="timestamp" />
-		</fields>
-		<links>
-			<link field="owner" reltype="has_a" key="id" map="" class="au"/>
-			<link field="items" reltype="has_many" key="bucket" map="" class="ccbi"/>
-		</links>
-	</class>
-	<class id="puwoum" controller="open-ils.cstore" oils_obj:fieldmapper="permission::usr_work_ou_map" oils_persist:tablename="permission.usr_work_ou_map">
-		<fields oils_persist:primary="id" oils_persist:sequence="permission.usr_work_ou_map_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="int" />
-			<field name="usr" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="work_ou" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="work_ou" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-	</class>
-	<class id="pupm" controller="open-ils.cstore" oils_obj:fieldmapper="permission::usr_perm_map" oils_persist:tablename="permission.usr_perm_map">
-		<fields oils_persist:primary="id" oils_persist:sequence="permission.usr_perm_map_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="depth" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field name="grantable" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="id" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="perm" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="usr" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="perm" reltype="has_a" key="id" map="" class="ppl"/>
-		</links>
-	</class>
-	<class id="puopm" controller="open-ils.cstore" oils_obj:fieldmapper="permission::usr_object_perm_map" oils_persist:tablename="permission.usr_object_perm_map">
-		<fields oils_persist:primary="id" oils_persist:sequence="permission.usr_object_perm_map_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="object_id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="grantable" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="id" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="perm" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="usr" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="object_type" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="perm" reltype="has_a" key="id" map="" class="ppl"/>
-		</links>
-	</class>
-	<class id="mp" controller="open-ils.cstore" oils_obj:fieldmapper="money::payment" oils_persist:tablename="money.payment_view" reporter:core="true" reporter:label="Payments: All">
-		<fields oils_persist:primary="id" oils_persist:sequence="">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Amount" name="amount" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Payment ID" name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Note" name="note" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Payment Date/Time" name="payment_ts" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Payment Type" name="payment_type" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Billable Transaction" name="xact" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Voided?" name="voided" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Cash Payment Detail" name="cash_payment" oils_obj:array_position="10" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Credit Card Payment Detail" name="credit_card_payment" oils_obj:array_position="11" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Credit Payment Detail" name="credit_payment" oils_obj:array_position="12" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Check Payment Detail" name="check_payment" oils_obj:array_position="13" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Work Payment Detail" name="work_payment" oils_obj:array_position="14" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Forgive Payment Detail" name="forgive_payment" oils_obj:array_position="15" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Goods Payment Detail" name="goods_payment" oils_obj:array_position="16" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="cash_payment" reltype="might_have" key="id" map="" class="mcp"/>
-			<link field="credit_card_payment" reltype="might_have" key="id" map="" class="mccp"/>
-			<link field="credit_payment" reltype="might_have" key="id" map="" class="mcrp"/>
-			<link field="check_payment" reltype="might_have" key="id" map="" class="mckp"/>
-			<link field="work_payment" reltype="might_have" key="id" map="" class="mwp"/>
-			<link field="forgive_payment" reltype="might_have" key="id" map="" class="mfp"/>
-			<link field="goods_payment" reltype="might_have" key="id" map="" class="mgp"/>
-			<link field="xact" reltype="has_a" key="id" map="" class="mbt"/>
-		</links>
-	</class>
-	<class id="mbp" controller="open-ils.cstore" oils_obj:fieldmapper="money::bnm_payment" oils_persist:tablename="money.bnm_payment_view" reporter:core="true" reporter:label="Payments: Brick-and-mortar">
-		<fields oils_persist:primary="id" oils_persist:sequence="">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Amount" name="amount" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Payment ID" name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Note" name="note" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Payment Date/Time" name="payment_ts" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Payment Type" name="payment_type" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Billable Transaction" name="xact" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Voided?" name="voided" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Cash Payment Detail" name="cash_payment" oils_obj:array_position="10" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Credit Card Payment Detail" name="credit_card_payment" oils_obj:array_position="11" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Credit Payment Detail" name="credit_payment" oils_obj:array_position="12" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Check Payment Detail" name="check_payment" oils_obj:array_position="13" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Work Payment Detail" name="work_payment" oils_obj:array_position="14" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Forgive Payment Detail" name="forgive_payment" oils_obj:array_position="15" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Goods Payment Detail" name="goods_payment" oils_obj:array_position="16" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="cash_payment" reltype="might_have" key="id" map="" class="mcp"/>
-			<link field="credit_card_payment" reltype="might_have" key="id" map="" class="mccp"/>
-			<link field="credit_payment" reltype="might_have" key="id" map="" class="mcrp"/>
-			<link field="check_payment" reltype="might_have" key="id" map="" class="mckp"/>
-			<link field="work_payment" reltype="might_have" key="id" map="" class="mwp"/>
-			<link field="forgive_payment" reltype="might_have" key="id" map="" class="mfp"/>
-			<link field="goods_payment" reltype="might_have" key="id" map="" class="mgp"/>
-			<link field="xact" reltype="has_a" key="id" map="" class="mbt"/>
-		</links>
-	</class>
-	<class id="mndp" controller="open-ils.reporter" oils_obj:fieldmapper="money::non_drawer_payment" oils_persist:tablename="money.non_drawer_payment_view" reporter:core="true" reporter:label="Payments: Non-drawer Staff">
-		<fields oils_persist:primary="id" oils_persist:sequence="">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Amount" name="amount" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Payment ID" name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Note" name="note" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Payment Date/Time" name="payment_ts" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Payment Type" name="payment_type" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Billable Transaction" name="xact" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Voided?" name="voided" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Work Payment Detail" name="work_payment" oils_obj:array_position="10" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Forgive Payment Detail" name="forgive_payment" oils_obj:array_position="11" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Goods Payment Detail" name="goods_payment" oils_obj:array_position="12" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="work_payment" reltype="might_have" key="id" map="" class="mwp"/>
-			<link field="forgive_payment" reltype="might_have" key="id" map="" class="mfp"/>
-			<link field="goods_payment" reltype="might_have" key="id" map="" class="mgp"/>
-			<link field="xact" reltype="has_a" key="id" map="" class="mbt"/>
-		</links>
-	</class>
-	<class id="mdp" controller="open-ils.cstore" oils_obj:fieldmapper="money::desk_payment" oils_persist:tablename="money.desk_payment_view" reporter:core="true" reporter:label="Payments: Desk">
-		<fields oils_persist:primary="id" oils_persist:sequence="">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Amount" name="amount" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Payment ID" name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Note" name="note" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Payment Date/Time" name="payment_ts" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Payment Type" name="payment_type" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Billable Transaction" name="xact" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Accepting User" name="accepting_usr" oils_obj:array_position="9" oils_persist:virtual="false" />
-			<field reporter:label="Cash Drawer" name="cash_drawer" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Voided?" name="voided" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Cash Payment" name="cash_payment" oils_obj:array_position="12" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Credit Card Payment" name="credit_card_payment" oils_obj:array_position="13" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Check Payment" name="check_payment" oils_obj:array_position="14" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="cash_payment" reltype="might_have" key="id" map="" class="mcp"/>
-			<link field="credit_card_payment" reltype="might_have" key="id" map="" class="mccp"/>
-			<link field="check_payment" reltype="might_have" key="id" map="" class="mckp"/>
-			<link field="xact" reltype="has_a" key="id" map="" class="mbt"/>
-			<link field="accepting_usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="cash_drawer" reltype="has_a" key="id" map="" class="aws"/>
-		</links>
-	</class>
-	<class id="cbrebi" controller="open-ils.cstore" oils_obj:fieldmapper="container::biblio_record_entry_bucket_item" oils_persist:tablename="container.biblio_record_entry_bucket_item">
-		<fields oils_persist:primary="id" oils_persist:sequence="container.biblio_record_entry_bucket_item_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="bucket" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="target_biblio_record_entry" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="create_time" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="timestamp" />
-		</fields>
-		<links>
-			<link field="target_biblio_record_entry" reltype="has_a" key="id" map="" class="bre"/>
-			<link field="bucket" reltype="has_a" key="id" map="" class="cbreb"/>
-		</links>
-	</class>
-	<class id="asce" controller="open-ils.cstore" oils_obj:fieldmapper="asset::stat_cat_entry" oils_persist:tablename="asset.stat_cat_entry" reporter:label="Item Stat Cat Entry">
-		<fields oils_persist:primary="id" oils_persist:sequence="asset.stat_cat_entry_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Entry ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="int" />
-			<field reporter:label="Entry Owner" name="owner" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Stat Cat" name="stat_cat" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Value" name="value" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text" oils_persist:i18n="true"/>
-		</fields>
-		<links>
-			<link field="stat_cat" reltype="has_a" key="id" map="" class="asc"/>
-			<link field="owner" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-	</class>
-	<class id="ahtc" controller="open-ils.cstore" oils_obj:fieldmapper="action::hold_transit_copy" oils_persist:tablename="action.hold_transit_copy" reporter:core="true" reporter:label="Hold Transit">
-		<fields oils_persist:primary="id" oils_persist:sequence="action.transit_copy_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Copy Status at Transit" name="copy_status" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Destination Library" name="dest" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field reporter:label="Receive Date/Time" name="dest_recv_time" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Hold requiring Transit" name="hold" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Transit ID" name="id" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Is Persistent?" name="persistant_transfer" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Previous Stop" name="prev_hop" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Sending Library" name="source" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field reporter:label="Send Date/Time" name="source_send_time" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Transited Copy" name="target_copy" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Base Transit" name="transit_copy" oils_obj:array_position="13" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="transit_copy" reltype="might_have" key="id" map="" class="atc"/>
-			<link field="target_copy" reltype="has_a" key="id" map="" class="acp"/>
-			<link field="source" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="copy_status" reltype="has_a" key="id" map="" class="ccs"/>
-			<link field="dest" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="hold" reltype="has_a" key="id" map="" class="ahr"/>
-		</links>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="TRANSIT_COPY" context_field="owner">
-                    <context link="target_copy" field="circ_lib"/>
-                </create>
-                <retrieve/>
-                <update permission="UPDATE_TRANSIT" context_field="dest|source"/>
-                <delete permission="DELETE_TRANSIT" context_field="dest|source"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="mb" controller="open-ils.cstore" oils_obj:fieldmapper="money::billing" oils_persist:tablename="money.billing" reporter:label="Billing Line Item">
-		<fields oils_persist:primary="id" oils_persist:sequence="money.billing_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Amount" name="amount" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Billing Timestamp" name="billing_ts" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Billing Type" name="billing_type" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Billing ID" name="id" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Note" name="note" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Void Timestamp" name="void_time" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Voided?" name="voided" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Voiding Staff Member" name="voider" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Transaction" name="xact" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="xact" reltype="has_a" key="id" map="" class="mbt"/>
-			<link field="voider" reltype="has_a" key="id" map="" class="au"/>
-		</links>
-	</class>
-	<class id="pugm" controller="open-ils.cstore" oils_obj:fieldmapper="permission::usr_grp_map" oils_persist:tablename="permission.usr_grp_map">
-		<fields oils_persist:primary="id" oils_persist:sequence="permission.usr_grp_map_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="grp" oils_obj:array_position="3" oils_persist:virtual="false" />
-			<field name="id" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="usr" oils_obj:array_position="5" oils_persist:virtual="false" />
-		</fields>
-		<links>
-			<link field="grp" reltype="has_a" key="id" map="" class="pgt"/>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-		</links>
-	</class>
-	<class id="i18n" controller="open-ils.cstore" oils_obj:fieldmapper="config::i18n_core" oils_persist:tablename="config.i18n_core" oils_persist:field_safe="true">
-		<fields oils_persist:primary="id" oils_persist:sequence="config.i18n_core_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="fq_field" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="identity_value" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="translation" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="string" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links/>
-        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
-            <actions>
-                <create permission="CREATE_TRANSLATION" global_required="true"/>
-                <retrieve permission="CREATE_TRANSLATION|UPDATE_TRANSLATION|DELETE_TRANSLATION" global_required="true"/>
-                <update permission="UPDATE_TRANSLATION" global_required="true"/>
-                <delete permission="DELETE_TRANSLATION" global_required="true"/>
-            </actions>
-        </permacrud>
-	</class>
-	<class id="rof" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::output_folder" oils_persist:tablename="reporter.output_folder">
-		<fields oils_persist:primary="id" oils_persist:sequence="reporter.output_folder_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="parent" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="owner" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="create_time" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="name" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="shared" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="share_with" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="children" oils_obj:array_position="10" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field name="outputs" oils_obj:array_position="11" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="owner" reltype="has_a" key="id" map="" class="au"/>
-			<link field="parent" reltype="has_a" key="id" map="" class="rof"/>
-			<link field="children" reltype="has_many" key="parent" map="" class="rof"/>
-			<link field="share_with" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="outputs" reltype="has_many" key="folder" map="" class="rs"/>
-		</links>
-	</class>
-	<class id="rtf" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::template_folder" oils_persist:tablename="reporter.template_folder">
-		<fields oils_persist:primary="id" oils_persist:sequence="reporter.template_folder_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="parent" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="owner" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="create_time" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="name" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="shared" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="share_with" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="children" oils_obj:array_position="10" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field name="templates" oils_obj:array_position="11" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="owner" reltype="has_a" key="id" map="" class="au"/>
-			<link field="parent" reltype="has_a" key="id" map="" class="rtf"/>
-			<link field="children" reltype="has_many" key="parent" map="" class="rtf"/>
-			<link field="share_with" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="templates" reltype="has_many" key="folder" map="" class="rt"/>
-		</links>
-	</class>
-	<class id="rrf" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::report_folder" oils_persist:tablename="reporter.report_folder">
-		<fields oils_persist:primary="id" oils_persist:sequence="reporter.report_folder_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="parent" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="owner" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="create_time" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="name" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="shared" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="share_with" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="children" oils_obj:array_position="10" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field name="reports" oils_obj:array_position="11" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="owner" reltype="has_a" key="id" map="" class="au"/>
-			<link field="parent" reltype="has_a" key="id" map="" class="rrf"/>
-			<link field="children" reltype="has_many" key="parent" map="" class="rrf"/>
-			<link field="share_with" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="reports" reltype="has_many" key="folder" map="" class="rr"/>
-		</links>
-	</class>
-	<class id="rt" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::template" oils_persist:tablename="reporter.template">
-		<fields oils_persist:primary="id" oils_persist:sequence="reporter.template_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="owner" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="create_time" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="name" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="data" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="folder" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="description" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="reports" oils_obj:array_position="10" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="owner" reltype="has_a" key="id" map="" class="au"/>
-			<link field="folder" reltype="has_a" key="id" map="" class="rtf"/>
-			<link field="reports" reltype="has_many" key="template" map="" class="rr"/>
-		</links>
-	</class>
-	<class id="rr" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::report" oils_persist:tablename="reporter.report">
-		<fields oils_persist:primary="id" oils_persist:sequence="reporter.report_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="owner" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="create_time" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="template" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="data" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="folder" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="recur" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="recurance" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="interval"/>
-			<field name="name" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="description" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="runs" oils_obj:array_position="13" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="owner" reltype="has_a" key="id" map="" class="au"/>
-			<link field="template" reltype="has_a" key="id" map="" class="rt"/>
-			<link field="folder" reltype="has_a" key="id" map="" class="rrf"/>
-			<link field="runs" reltype="has_many" key="report" map="" class="rs"/>
-		</links>
-	</class>
-	<class id="rs" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::schedule" oils_persist:tablename="reporter.schedule">
-		<fields oils_persist:primary="id" oils_persist:sequence="reporter.schedule_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field name="runner" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="start_time" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="complete_time" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="run_time" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field name="email" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="excel_format" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="csv_format" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="html_format" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="error_code" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field name="error_text" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field name="report" oils_obj:array_position="14" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="folder" oils_obj:array_position="15" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field name="chart_pie" oils_obj:array_position="16" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="chart_bar" oils_obj:array_position="17" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field name="chart_line" oils_obj:array_position="18" oils_persist:virtual="false" reporter:datatype="bool"/>
-		</fields>
-		<links>
-			<link field="runner" reltype="has_a" key="id" map="" class="au"/>
-			<link field="report" reltype="has_a" key="id" map="" class="rr"/>
-			<link field="folder" reltype="has_a" key="id" map="" class="rof"/>
-		</links>
-	</class>
-	<class id="rmsr" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::materialized_simple_record" oils_persist:tablename="reporter.materialized_simple_record" reporter:label="Fast Simple Record Extracts">
-		<fields oils_persist:primary="id">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Record ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Fingerprint" name="fingerprint" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Overall Record Quality" name="quality" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field reporter:label="TCN Source" name="tcn_source" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="TCN Value" name="tcn_value" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Title Proper (normalized)" name="title" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Author (normalized)" name="author" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Publisher (normalized)" name="publisher" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Publication Year (normalized)" name="pubdate" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field reporter:label="ISBN" name="isbn" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="ISSN" name="issn" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Full Bibliographic record" name="biblio_record" oils_obj:array_position="14" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="biblio_record" reltype="might_have" key="id" map="" class="bre"/>
-		</links>
-	</class>
-	<class id="rssr" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::super_simple_record" oils_persist:tablename="reporter.super_simple_record" reporter:label="Simple Record Extracts">
-		<fields oils_persist:primary="id">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Record ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Fingerprint" name="fingerprint" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Overall Record Quality" name="quality" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field reporter:label="TCN Source" name="tcn_source" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="TCN Value" name="tcn_value" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Title Proper (normalized)" name="title" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Author (normalized)" name="author" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Publisher (normalized)" name="publisher" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Publication Year (normalized)" name="pubdate" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field reporter:label="ISBN" name="isbn" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="ISSN" name="issn" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Full Bibliographic record" name="biblio_record" oils_obj:array_position="14" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="biblio_record" reltype="might_have" key="id" map="" class="bre"/>
-		</links>
-	</class>
-	<class id="rsr" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::simple_record" oils_persist:tablename="reporter.simple_record">
-		<fields oils_persist:primary="id">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Record ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Metarecord" name="metarecord" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Fingerprint" name="fingerprint" oils_obj:array_position="5" oils_persist:virtual="false" />
-			<field reporter:label="Overall Record Quality" name="quality" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field reporter:label="TCN Source" name="tcn_source" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="TCN Value" name="tcn_value" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Title Proper (normalized)" name="title" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Uniform Title (normalized)" name="uniform_title" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Author (normalized)" name="author" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Publisher (normalized)" name="publisher" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Publication Year (normalized)" name="pubdate" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="int"/>
-			<field reporter:label="Series Title (normalized)" name="series_title" oils_obj:array_position="14" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Series Statement (normalized)" name="series_statement" oils_obj:array_position="15" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Summary (normalized)" name="summary" oils_obj:array_position="16" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="ISBN" name="isbn" oils_obj:array_position="17" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="ISSN" name="issn" oils_obj:array_position="18" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Topic Subjects (normalized)" name="topic_subject" oils_obj:array_position="19" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Geographic Subjects (normalized)" name="geographic_subject" oils_obj:array_position="20" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Genres (normalized)" name="genre" oils_obj:array_position="21" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Personal Name Subjects (normalized)" name="name_subject" oils_obj:array_position="22" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Corporate Name Subjects (normalized)" name="corporate_subject" oils_obj:array_position="23" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="External URI List (normalized)" name="external_uri" oils_obj:array_position="24" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Full Bibliographic record" name="biblio_record" oils_obj:array_position="25" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="metarecord" reltype="has_a" key="id" map="" class="mmr"/>
-			<link field="biblio_record" reltype="might_have" key="id" map="" class="bre"/>
-		</links>
-	</class>
-	<class id="rud" controller="open-ils.reporter-store open-ils.cstore" oils_obj:fieldmapper="reporter::user_demographic" oils_persist:tablename="reporter.demographic" reporter:label="User Demographics">
-		<fields oils_persist:primary="id">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="User ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Date of Birth" name="dob" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="General Demographic Division" name="general_division" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="id" reltype="might_have" key="id" map="" class="au"/>
-		</links>
-	</class>
-	<class id="rcirct" controller="open-ils.reporter-store open-ils.cstore" oils_obj:fieldmapper="reporter::circulation_type" oils_persist:tablename="reporter.circ_type" reporter:label="Circulation Type">
-		<fields oils_persist:primary="id">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Circulation ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Circulation Type" name="type" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="id" reltype="might_have" key="id" map="" class="circ"/>
-		</links>
-	</class>
-	<class id="rhrr" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::hold_request_record" oils_persist:tablename="reporter.hold_request_record">
-		<fields oils_persist:primary="id">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Hold ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Hold Target" name="target" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="int" />
-			<field reporter:label="Hold Request Type" name="hold_type" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Target Bib Record" name="bib_record" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="id" reltype="might_have" key="id" map="" class="ahr"/>
-			<link field="bib_record" reltype="has_a" key="id" map="" class="bre"/>
-		</links>
-	</class>
-	<class id="rxbt" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::xact_billing_totals" oils_persist:tablename="reporter.xact_billing_totals">
-		<fields oils_persist:primary="xact">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Transaction ID" name="xact" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="int" />
-			<field reporter:label="Unvoided Billing Amount" name="unvoided" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="int" />
-			<field reporter:label="Voided Billing Amount" name="voided" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="money"/>
-			<field reporter:label="Total Billing Amount" name="total" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="money"/>
-		</fields>
-		<links>
-			<link field="xact" reltype="might_have" key="id" map="" class="mbt"/>
-		</links>
-	</class>
-	<class id="rxpt" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::xact_paid_totals" oils_persist:tablename="reporter.xact_paid_totals">
-		<fields oils_persist:primary="xact">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Transaction ID" name="xact" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="int" />
-			<field reporter:label="Unvoided Paid Amount" name="unvoided" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="int" />
-			<field reporter:label="Voided (Returned) Paid Amount" name="voided" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="money"/>
-			<field reporter:label="Total Paid Amount" name="total" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="money"/>
-		</fields>
-		<links>
-			<link field="xact" reltype="might_have" key="id" map="" class="mbt"/>
-		</links>
-	</class>
-
-    <class id="erfcc" controller="open-ils.reporter-store" oils_obj:fieldmapper="extend_reporter::full_circ_count" oils_persist:tablename="extend_reporter.full_circ_count" reporter:label="Total Circulation Count, Including Legacy">
-        <fields oils_persist:primary="id">
-            <field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-            <field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-            <field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-            <field reporter:label="Copy ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="int" />
-            <field reporter:label="Total Circulation Count" name="circ_count" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="int" />
-        </fields>
-        <links>
-            <link field="id" reltype="has_a" key="id" map="" class="acp"/>
-        </links>
-    </class>
-
-	<!-- ********************************************************************************************************************* -->
-	<!-- What follows is a set of example extensions that are useful for PINES.  Comment out or remove if you don't want them. -->
-	<!-- ********************************************************************************************************************* -->
-	<class id="rccc" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::classic_current_circ" oils_persist:tablename="reporter.classic_current_circ" reporter:core="true" reporter:label="Classic Circulation View">
-		<fields oils_persist:primary="id">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Circulation" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Library Circulation Location Short (Policy) Name" name="circ_lib" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Library Circulation Location Link" name="circ_lib_id" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field reporter:label="Circulation Date/Time" name="xact_start" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Circulation Type" name="circ_type" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Copy Link" name="copy_id" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Circ Modifier" name="circ_modifier" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Owning Library Short (Policy) Name" name="owning_lib_name" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Item Language" name="language" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Literary Form" name="lit_form" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="MARC Form" name="item_form" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="MARC Type" name="item_type" oils_obj:array_position="14" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Shelving Location" name="shelving_location" oils_obj:array_position="15" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Patron Profile Group" name="profile_group" oils_obj:array_position="16" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Patron Age Demographic" name="demographic_general_division" oils_obj:array_position="17" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Call Number Link" name="call_number" oils_obj:array_position="18" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Call Number Label" name="call_number_label" oils_obj:array_position="19" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Call Number Dewey/Prefix" name="dewey" oils_obj:array_position="20" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Patron Link" name="patron_id" oils_obj:array_position="21" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Patron Home Library Link" name="patron_home_lib" oils_obj:array_position="22" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Patron Home Library Short (Policy) Name" name="patron_home_lib_shortname" oils_obj:array_position="23" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Patron County" name="patron_county" oils_obj:array_position="24" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Patron City" name="patron_city" oils_obj:array_position="25" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Patron ZIP Code" name="patron_zip" oils_obj:array_position="26" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Legacy CAT1 Link" name="stat_cat_1" oils_obj:array_position="27" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Legacy CAT2 Link" name="stat_cat_2" oils_obj:array_position="28" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Dewey Range -- Tens" name="dewey_range_tens" oils_obj:array_position="29" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Dewey Range -- Hundreds" name="dewey_range_hundreds" oils_obj:array_position="30" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Dewey Block -- Tens" name="dewey_block_tens" oils_obj:array_position="31" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Dewey Block -- Hundreds" name="dewey_block_hundreds" oils_obj:array_position="32" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Legacy CAT1 Value" name="stat_cat_1_value" oils_obj:array_position="33" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Legacy CAT2 Value" name="stat_cat_2_value" oils_obj:array_position="34" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="id" reltype="has_a" key="id" map="" class="circ"/>
-			<link field="copy_id" reltype="has_a" key="id" map="" class="acp"/>
-			<link field="patron_id" reltype="has_a" key="id" map="" class="au"/>
-			<link field="circ_lib_id" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="call_number" reltype="has_a" key="id" map="" class="acn"/>
-			<link field="patron_home_lib" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="stat_cat_1" reltype="has_a" key="id" map="" class="rsce1"/>
-			<link field="stat_cat_2" reltype="has_a" key="id" map="" class="rsce2"/>
-		</links>
-	</class>
-
-	<class id="rsce1" controller="open-ils.reporter-store open-ils.cstore" oils_obj:fieldmapper="reporter::legacy_cat1" oils_persist:tablename="reporter.legacy_cat1" reporter:label="CAT1 Entry">
-		<fields oils_persist:primary="id">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Entry ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:selector="value" reporter:datatype="id" />
-			<field reporter:label="Entry Owner" name="owner" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Entry Value" name="value" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="owner" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-	</class>
-
-	<class id="rsce2" controller="open-ils.reporter-store open-ils.cstore" oils_obj:fieldmapper="reporter::legacy_cat2" oils_persist:tablename="reporter.legacy_cat2" reporter:label="CAT2 Entry">
-		<fields oils_persist:primary="id">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Entry ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:selector="value" reporter:datatype="id" />
-			<field reporter:label="Entry Owner" name="owner" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Entry Value" name="value" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-		</fields>
-		<links>
-			<link field="owner" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-	</class>
-
-	<class id="rccbs" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::classic_current_billing_summary" oils_persist:tablename="reporter.classic_current_billing_summary" reporter:core="true" reporter:label="Classic Open Transaction Summary">
-		<fields oils_persist:primary="id">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Transaction ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="id" />
-
-			<field reporter:label="Billing Location Short (Policy) Name" name="billing_location_shortname" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Billing Location Name" name="billing_location_name" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Billing Location Link" name="billing_location" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-
-			<field reporter:label="User Home Library Short (Policy) Name" name="usr_home_ou_shortname" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="User Home Library Name" name="usr_home_ou_name" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="User Home Library Link" name="usr_home_ou" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-
-			<field reporter:label="User Barcode" name="barcode" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="User Link" name="usr" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="link"/>
-
-			<field reporter:label="Transaction Start Date/Time" name="xact_start" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Transaction End Date/Time" name="xact_finish" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Transaction Type" name="xact_type" oils_obj:array_position="14" oils_persist:virtual="false" reporter:datatype="text"/>
-
-			<field reporter:label="Total Paid" name="total_paid" oils_obj:array_position="15" oils_persist:virtual="false" reporter:datatype="money"/>
-			<field reporter:label="Total Billed" name="total_owed" oils_obj:array_position="16" oils_persist:virtual="false" reporter:datatype="money"/>
-
-			<field reporter:label="Last Payment Date/Time" name="last_payment_ts" oils_obj:array_position="17" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Last Payment Note" name="last_payment_note" oils_obj:array_position="18" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Last Payment Type" name="last_payment_type" oils_obj:array_position="19" oils_persist:virtual="false" reporter:datatype="text"/>
-
-			<field reporter:label="Last Billing Date/Time" name="last_billing_ts" oils_obj:array_position="20" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Last Billing Note" name="last_billing_note" oils_obj:array_position="21" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Last Billing Type" name="last_billing_type" oils_obj:array_position="22" oils_persist:virtual="false" reporter:datatype="text"/>
-
-			<field reporter:label="User Age Demographic" name="demographic_general_division" oils_obj:array_position="23" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="User County" name="patron_county" oils_obj:array_position="24" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="User City" name="patron_city" oils_obj:array_position="25" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="User ZIP Code" name="patron_zip" oils_obj:array_position="26" oils_persist:virtual="false" reporter:datatype="text"/>
-
-			<field reporter:label="Balance Owed" name="balance_owed" oils_obj:array_position="27" oils_persist:virtual="false" reporter:datatype="money"/>
-			<field reporter:label="User Profile Group" name="profile_group" oils_obj:array_position="28" oils_persist:virtual="false" reporter:datatype="text"/>
-
-		</fields>
-		<links>
-			<link field="id" reltype="has_a" key="id" map="" class="mbt"/>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="billing_location" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="usr_home_ou" reltype="has_a" key="id" map="" class="aou"/>
-		</links>
-	</class>
-
-	<class id="iatc" controller="open-ils.reporter-store" oils_obj:fieldmapper="action::intersystem_transit_copy" oils_persist:readonly="true" reporter:core="true" reporter:label="Inter-system Copy Transit">
-		<oils_persist:source_definition>
-
-			SELECT	t.*
-			  FROM	action.transit_copy t
-				JOIN actor.org_unit AS s ON (t.source = s.id)
-				JOIN actor.org_unit AS d ON (t.dest = d.id)
-			  WHERE	s.parent_ou &lt;&gt; d.parent_ou
-
-		</oils_persist:source_definition>
-		<fields oils_persist:primary="id" oils_persist:sequence="action.transit_copy_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Pretransit Copy Status" name="copy_status" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Destination" name="dest" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Receive Date/Time" name="dest_recv_time" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Transit ID" name="id" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="id"/>
-			<field reporter:label="Is Persistent? (unused)" name="persistant_transfer" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Previous Hop (unused)" name="prev_hop" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Source" name="source" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Send Date/Time" name="source_send_time" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Transited Copy" name="target_copy" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Hold Transit" name="hold_transit_copy" oils_obj:array_position="12" oils_persist:virtual="true" reporter:datatype="link"/>
-		</fields>
-		<links>
-			<link field="hold_transit_copy" reltype="might_have" key="id" map="" class="ahtc"/>
-			<link field="source" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="copy_status" reltype="has_a" key="id" map="" class="ccs"/>
-			<link field="dest" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="target_copy" reltype="has_a" key="id" map="" class="acp"/>
-		</links>
-	</class>
-
-	<class id="rodcirc" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::overdue_circs" oils_persist:tablename="reporter.overdue_circs" reporter:core="true" reporter:label="Overdue Circulation">
-		<fields oils_persist:primary="id" oils_persist:sequence="money.billable_xact_id_seq">
-			<field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-			<field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-			<field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-			<field reporter:label="Check In Library" name="checkin_lib" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-			<field reporter:label="Check In Staff" name="checkin_staff" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Check In Date/Time" name="checkin_time" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Circulating Library" name="circ_lib" oils_obj:array_position="6" oils_persist:virtual="false"  reporter:datatype="org_unit"/>
-			<field reporter:label="Circulating Staff" name="circ_staff" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Desk Renewal" name="desk_renewal" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Due Date/Time" name="due_date" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Circulation Duration" name="duration" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="interval"/>
-			<field reporter:label="Circ Duration Rule" name="duration_rule" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Fine Interval" name="fine_interval" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="interval"/>
-			<field reporter:label="Circ ID" name="id" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="id" />
-			<field reporter:label="Max Fine Amount" name="max_fine" oils_obj:array_position="14" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Max Fine Rule" name="max_fine_rule" oils_obj:array_position="15" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="OPAC Renewal" name="opac_renewal" oils_obj:array_position="16" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Phone Renewal" name="phone_renewal" oils_obj:array_position="17" oils_persist:virtual="false" reporter:datatype="bool"/>
-			<field reporter:label="Recurring Fine Amount" name="recuring_fine" oils_obj:array_position="18" oils_persist:virtual="false" reporter:datatype="money" />
-			<field reporter:label="Recurring Fine Rule" name="recuring_fine_rule" oils_obj:array_position="19" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Remaining Renewals" name="renewal_remaining" oils_obj:array_position="20" oils_persist:virtual="false" reporter:datatype="int" />
-			<field reporter:label="Fine Stop Reason" name="stop_fines" oils_obj:array_position="21" oils_persist:virtual="false" reporter:datatype="text"/>
-			<field reporter:label="Fine Stop Date/Time" name="stop_fines_time" oils_obj:array_position="22" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-			<field reporter:label="Circulating Item" name="target_copy" oils_obj:array_position="23" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Patron" name="usr" oils_obj:array_position="24" oils_persist:virtual="false" reporter:datatype="link"/>
-			<field reporter:label="Transaction Finish Date/Time" name="xact_finish" oils_obj:array_position="25" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field reporter:label="Check Out Date/Time" name="xact_start" oils_obj:array_position="26" oils_persist:virtual="false" reporter:datatype="timestamp" />
-			<field reporter:label="Transaction Billings" name="billings" oils_obj:array_position="27" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Transaction Payments" name="payments" oils_obj:array_position="28" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Base Transaction" name="billable_transaction" oils_obj:array_position="29" oils_persist:virtual="true" reporter:datatype="link"/>
-			<field reporter:label="Circulation Type" name="circ_type" oils_obj:array_position="30" oils_persist:virtual="true" reporter:datatype="text"/>
-			<field reporter:label="Billing Totals" name="billing_total" oils_obj:array_position="31" oils_persist:virtual="true" reporter:datatype="money"/>
-			<field reporter:label="Payment Totals" name="payment_total" oils_obj:array_position="32" oils_persist:virtual="true" reporter:datatype="money"/>
-		</fields>
-		<links>
-			<link field="billable_transaction" reltype="might_have" key="id" map="" class="mbt"/>
-			<link field="circ_staff" reltype="has_a" key="id" map="" class="au"/>
-			<link field="checkin_lib" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="target_copy" reltype="has_a" key="id" map="" class="acp"/>
-			<link field="checkin_staff" reltype="has_a" key="id" map="" class="au"/>
-			<link field="usr" reltype="has_a" key="id" map="" class="au"/>
-			<link field="circ_lib" reltype="has_a" key="id" map="" class="aou"/>
-			<link field="payments" reltype="has_many" key="xact" map="" class="mp"/>
-			<link field="billings" reltype="has_many" key="xact" map="" class="mb"/>
-			<link field="duration_rule" reltype="has_a" key="name" map="" class="crcd"/>
-			<link field="max_fine_rule" reltype="has_a" key="name" map="" class="crmf"/>
-			<link field="recuring_fine_rule" reltype="has_a" key="name" map="" class="crrf"/>
-			<link field="circ_type" reltype="might_have" key="id" map="" class="rcirct"/>
-			<link field="billing_total" reltype="might_have" key="xact" map="" class="rxbt"/>
-			<link field="payment_total" reltype="might_have" key="xact" map="" class="rxpt"/>
-		</links>
-	</class>
-
-    <class id="rocit" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::classic_item_list" oils_persist:tablename="reporter.classic_item_list" reporter:core="true" reporter:label="Classic Item List">
-        <fields oils_persist:primary="id">
-            <field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-            <field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-            <field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-            <field reporter:label="Title" name="title" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Author" name="author" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Pubdate" name="pubdate" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Copy ID" name="id" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="id"/>
-            <field reporter:label="Price" name="price" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="money"/>
-            <field reporter:label="Barcode" name="barcode" oils_obj:array_position="8" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Callnumber Label" name="call_number_label" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Dewy Tens" name="dewey_block_tens" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Dewy Hundreds" name="dewey_block_hundreds" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Use Count" name="use_count" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="int"/>
-            <field reporter:label="Circ Modifier" name="circ_modifier" oils_obj:array_position="13" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Shelving Location Name" name="shelving_location" oils_obj:array_position="14" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Legacy Stat Cat 1" name="stat_cat_1" oils_obj:array_position="15" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Legacy Stat Cat 2" name="stat_cat_2" oils_obj:array_position="16" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Legacy Stat Cat 1 Value" name="stat_cat_1_value" oils_obj:array_position="17" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Legacy Stat Cat 2 Value" name="stat_cat_2_value" oils_obj:array_position="18" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Edit Date" name="edit_date" oils_obj:array_position="19" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-            <field reporter:label="Create Date" name="create_date" oils_obj:array_position="20" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-            <field reporter:label="Owning Lib Name" name="owning_lib_name" oils_obj:array_position="21" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Circ Lib Name" name="circ_lib_name" oils_obj:array_position="22" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Owning Lib" name="owning_lib" oils_obj:array_position="23" oils_persist:virtual="false" reporter:datatype="link"/>
-            <field reporter:label="Circ Lib" name="circ_lib" oils_obj:array_position="24" oils_persist:virtual="false" reporter:datatype="link"/>
-            <field reporter:label="Creator" name="creator" oils_obj:array_position="25" oils_persist:virtual="false" reporter:datatype="link"/>
-            <field reporter:label="Age Protection" name="age_protect" oils_obj:array_position="26" oils_persist:virtual="false" reporter:datatype="link"/>
-            <field reporter:label="OPAC Visible" name="opac_visible" oils_obj:array_position="27" oils_persist:virtual="false" reporter:datatype="bool"/>
-            <field reporter:label="Reference" name="ref" oils_obj:array_position="28" oils_persist:virtual="false" reporter:datatype="bool"/>
-            <field reporter:label="Deposit Amount" name="deposit_amount" oils_obj:array_position="29" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Deleted" name="deleted" oils_obj:array_position="30" oils_persist:virtual="false" reporter:datatype="bool"/>
-            <field reporter:label="TCN" name="tcn_value" oils_obj:array_position="31" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Status" name="status" oils_obj:array_position="32" oils_persist:virtual="false" reporter:datatype="link"/>
-            <field reporter:label="Stop Fines Reason" name="stop_fines" oils_obj:array_position="33" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Due Date" name="due_date" oils_obj:array_position="34" oils_persist:virtual="false" reporter:datatype="timestamp"/>
-            <field reporter:label="Patron Barcode" name="patron_barcode" oils_obj:array_position="35" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Patron Name" name="patron_name" oils_obj:array_position="36" oils_persist:virtual="false" reporter:datatype="text"/>
-        </fields>
-        <links>
-            <link field="owning_lib" reltype="has_a" key="id" map="" class="aou"/>
-            <link field="circ_lib" reltype="has_a" key="id" map="" class="aou"/>
-            <link field="creator" reltype="has_a" key="id" map="" class="au"/>
-            <link field="age_protect" reltype="has_a" key="id" map="" class="crahp"/>
-            <link field="status" reltype="has_a" key="id" map="" class="ccs"/>
-        </links>
-    </class>
-
-    <class id="rmocbbol" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::money::open_circ_balance_by_owning_lib" oils_persist:tablename="money.open_circ_balance_by_owning_lib" reporter:core="true" reporter:label="Open Circulation Billing by Owning Library">
-        <fields oils_persist:primary="id">
-            <field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-            <field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-            <field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-            <field reporter:label="Circulation ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-            <field reporter:label="Owning Library" name="owning_lib" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-            <field reporter:label="Billing Type" name="billing_type" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Total Billed" name="billed" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="money"/>
-        </fields>
-        <links>
-            <link field="id" reltype="has_a" key="id" map="" class="circ"/>
-            <link field="owning_lib" reltype="has_a" key="id" map="" class="aou"/>
-        </links>
-    </class>
-
-    <class id="rmobbol" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::money::open_balance_by_owning_lib" oils_persist:tablename="money.open_balance_by_owning_lib" reporter:core="true" reporter:label="Open Circulation Balance by Owning Library">
-        <fields oils_persist:primary="owning_lib">
-            <field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-            <field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-            <field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-            <field reporter:label="Owning Library" name="owning_lib" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-            <field reporter:label="Billing Types" name="billing_types" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Balance" name="balance" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="money"/>
-        </fields>
-        <links>
-            <link field="owning_lib" reltype="has_a" key="id" map="" class="aou"/>
-        </links>
-    </class>
-
-    <class id="rmocbbcol" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::money::open_circ_balance_by_circ_and_owning_lib" oils_persist:tablename="money.open_circ_balance_by_circ_and_owning_lib" reporter:core="true" reporter:label="Open Circulation Billing by Circulating Library and Owning Library">
-        <fields oils_persist:primary="id">
-            <field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-            <field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-            <field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-            <field reporter:label="Circulation ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-            <field reporter:label="Circulating Library" name="circ_lib" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-            <field reporter:label="Owning Library" name="owning_lib" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-            <field reporter:label="Billing Type" name="billing_type" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Total Billed" name="billed" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="money"/>
-        </fields>
-        <links>
-            <link field="id" reltype="has_a" key="id" map="" class="circ"/>
-            <link field="owning_lib" reltype="has_a" key="id" map="" class="aou"/>
-            <link field="circ_lib" reltype="has_a" key="id" map="" class="aou"/>
-        </links>
-    </class>
-
-    <class id="rmobbcol" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::money::open_balance_by_circ_and_owning_lib" oils_persist:tablename="money.open_balance_by_circ_and_owning_lib" reporter:core="true" reporter:label="Open Circulation Balance by Circulating Library and Owning Library">
-        <fields oils_persist:primary="circ_lib">
-            <field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-            <field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-            <field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-            <field reporter:label="Circulating Library" name="circ_lib" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-            <field reporter:label="Owning Library" name="owning_lib" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-            <field reporter:label="Billing Types" name="billing_types" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Balance" name="balance" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="money"/>
-        </fields>
-        <links>
-            <link field="owning_lib" reltype="has_a" key="id" map="" class="aou"/>
-            <link field="circ_lib" reltype="has_a" key="id" map="" class="aou"/>
-        </links>
-    </class>
-
-    <class id="rmocbbhol" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::money::open_circ_balance_by_usr_home_and_owning_lib" oils_persist:tablename="money.open_circ_balance_by_usr_home_and_owning_lib" reporter:core="true" reporter:label="Open Circulation Billing by User Home Library and Owning Library">
-        <fields oils_persist:primary="id">
-            <field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-            <field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-            <field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-            <field reporter:label="Circulation ID" name="id" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="link"/>
-            <field reporter:label="User Home Library" name="home_ou" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-            <field reporter:label="Owning Library" name="owning_lib" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-            <field reporter:label="Billing Type" name="billing_type" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Total Billed" name="billed" oils_obj:array_position="7" oils_persist:virtual="false" reporter:datatype="money"/>
-        </fields>
-        <links>
-            <link field="id" reltype="has_a" key="id" map="" class="circ"/>
-            <link field="owning_lib" reltype="has_a" key="id" map="" class="aou"/>
-            <link field="home_ou" reltype="has_a" key="id" map="" class="aou"/>
-        </links>
-    </class>
-
-    <class id="rmobbhol" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::money::open_balance_by_usr_home_and_owning_lib" oils_persist:tablename="money.open_balance_by_usr_home_and_owning_lib" reporter:core="true" reporter:label="Open Circulation Balance by User Home Library and Owning Library">
-        <fields oils_persist:primary="home_ou">
-            <field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
-            <field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
-            <field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
-            <field reporter:label="User Home Library" name="home_ou" oils_obj:array_position="3" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-            <field reporter:label="Owning Library" name="owning_lib" oils_obj:array_position="4" oils_persist:virtual="false" reporter:datatype="org_unit"/>
-            <field reporter:label="Billing Types" name="billing_types" oils_obj:array_position="5" oils_persist:virtual="false" reporter:datatype="text"/>
-            <field reporter:label="Balance" name="balance" oils_obj:array_position="6" oils_persist:virtual="false" reporter:datatype="money"/>
-        </fields>
-        <links>
-            <link field="owning_lib" reltype="has_a" key="id" map="" class="aou"/>
-            <link field="home_ou" reltype="has_a" key="id" map="" class="aou"/>
-        </links>
-    </class>
-
-
-	<!-- ********************************************************************************************************************* -->
-
-</IDL>
+HTTP/1.1 200 OK
+Date: Tue, 13 Jul 2010 20:42:08 GMT
+Server: Apache/2.2.9 (Debian) mod_ssl/2.2.9 OpenSSL/0.9.8g mod_perl/2.0.4 Perl/v5.10.0
+Accept-Ranges: bytes
+Cache-Control: max-age=2592000
+Expires: Thu, 12 Aug 2010 20:42:08 GMT
+Content-Type: text/xml; charset=utf-8
+

Modified: servres/trunk/conifer/libsystems/evergreen/item_status.py
===================================================================
--- servres/trunk/conifer/libsystems/evergreen/item_status.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/libsystems/evergreen/item_status.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -32,4 +32,8 @@
 
 if __name__ == '__main__':
     support.initialize('http://www.concat.ca/')
-    print url_to_marcxml('http://www.concat.ca/opac/en-US/skin/default/xml/rdetail.xml?r=1082665&t=dylan%20thomas%20ralph&tp=keyword&d=0&hc=14&rt=keyword')
+    #print url_to_marcxml('http://www.concat.ca/opac/en-US/skin/default/xml/rdetail.xml?r=1082665&t=dylan%20thomas%20ralph&tp=keyword&d=0&hc=14&rt=keyword')
+    from xml.etree import ElementTree as ET
+    for t in ET.fromstring(bib_id_to_marcxml('2081089')).getiterator():
+        print t.text
+

Modified: servres/trunk/conifer/libsystems/evergreen/support.py
===================================================================
--- servres/trunk/conifer/libsystems/evergreen/support.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/libsystems/evergreen/support.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -22,6 +22,7 @@
         fields_for_class.update(dict(_fields()))
 
 def _fields():
+    return
     fm_IDL_location = BASE + 'reports/fm_IDL.xml'
     tree = ElementTree.parse(urllib2.urlopen(fm_IDL_location))
     NS = '{http://opensrf.org/spec/IDL/base/v1}'

Modified: servres/trunk/conifer/libsystems/z3950/marcxml.py
===================================================================
--- servres/trunk/conifer/libsystems/z3950/marcxml.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/libsystems/z3950/marcxml.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -65,8 +65,9 @@
     extract some Dublin Core elements from it. Fixme, I'm sure this
     could be way improved."""
     out = {}
-    meta = [('245a', 'dc:title'), ('100a', 'dc:creator'),
-            ('260c', 'dc:date'), ('700a', 'dc:contributor')]
+    meta = [('245a', 'dc:title'),
+            ('260c', 'dc:date'), 
+            ('700a', 'dc:contributor')]
     for marc, dc in meta:
         value = dct.get(marc)
         if value:
@@ -79,12 +80,18 @@
     title = [v.strip() for k,v in sorted(dct.items()) if k in ('245a', '245b')]
     if title:
         out['dc:title'] = strip_punct(' '.join(title))
+
+    for k in ('100a', '110a', '700a', '710a'):
+        if dct.get(k):
+            out['dc:creator'] = strip_punct(dct[k])
+            break
+
     return out
 
     
 def strip_punct(s):
     # strip whitespace and trailing single punctuation characters
     s = s.strip()
-    if s and s[-1] in ',.;:/':
+    if s and (s[-1] in ',.;:/'):
         s = s[:-1]
     return s.strip()

Modified: servres/trunk/conifer/libsystems/z3950/pyz3950_search.py
===================================================================
--- servres/trunk/conifer/libsystems/z3950/pyz3950_search.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/libsystems/z3950/pyz3950_search.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -76,6 +76,8 @@
         # TODO: fix this ascii/replace, once our z3950/marc encoding
         # issues are sorted out.
         rec = unicode(rec, 'ascii', 'replace')
+        # replace multiple 'unknown' characters with a single one.
+        rec = re.sub(u'\ufffd+', u'\ufffd', rec)
 
         assert isinstance(rec, unicode) # this must be true.
         parsed.append(ET.fromstring(rec.encode('utf-8')))

Deleted: servres/trunk/conifer/middleware/__init__.py
===================================================================

Deleted: servres/trunk/conifer/middleware/genshi_locals.py
===================================================================
--- servres/trunk/conifer/middleware/genshi_locals.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/middleware/genshi_locals.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,20 +0,0 @@
-# see http://code.djangoproject.com/wiki/CookBookThreadlocalsAndUser
-
-# threadlocals middleware
-
-try:
-    from threading import local
-except ImportError:
-    from django.utils._threading_local import local
-
-_thread_locals = local()
-
-class ThreadLocals(object):
-    """Middleware that gets various objects from the
-    request object and saves them in thread local storage."""
-    def process_request(self, request):
-        _thread_locals.request = request
-
-def get_request():
-    return getattr(_thread_locals, 'request', None)
-

Copied: servres/trunk/conifer/plumbing/__init__.py (from rev 918, servres/trunk/conifer/middleware/__init__.py)
===================================================================

Added: servres/trunk/conifer/plumbing/genshi_support.py
===================================================================
--- servres/trunk/conifer/plumbing/genshi_support.py	                        (rev 0)
+++ servres/trunk/conifer/plumbing/genshi_support.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -0,0 +1,84 @@
+import os
+from django.http import HttpResponse, HttpRequest
+from genshi.template import TemplateLoader
+from genshi.template import NewTextTemplate
+from genshi.builder import tag
+import genshi.output
+from django.conf import settings
+from warnings import warn
+
+try:
+    from threading import local
+except ImportError:
+    from django.utils._threading_local import local
+
+#---------------------------------------------------------------------------
+# Middleware
+
+_THREAD_LOCALS = local()
+
+class GenshiMiddleware(object):
+
+    def process_request(self, request):
+        _THREAD_LOCALS.request = request
+
+def get_request():
+    return getattr(_THREAD_LOCALS, 'request')
+
+
+#---------------------------------------------------------------------------
+# Templating support
+
+class TemplateSet(object):
+
+    def __init__(self, basedir, namespace_module=None):
+        self.basedir = basedir
+        self.dirs = [self.basedir]
+        self.loader = TemplateLoader(self.dirs,
+                                     auto_reload=True,
+                                     callback=self.template_loaded)
+        self.namespace_module = namespace_module
+
+    def file(self, name):
+        fn = os.path.join(self.basedir, name)
+        assert os.path.dirname(fn) == self.basedir
+        return file(fn)
+
+    def template_loaded(self, template):
+        pass
+
+    def template(self, tname):
+        return self.loader.load(tname)
+
+    def text_template(self, tname):
+        return self.loader.load(tname, cls=NewTextTemplate)
+
+    #------------------------------------------------------------
+
+    def _inject_django_things_into_namespace(self, request, ns):
+        ns['request'] = request
+        ns['user'] = getattr(request, 'user', None)
+        ns['ROOT'] = request and request.META['SCRIPT_NAME']
+        if not 'errors' in ns:
+            ns['errors'] = None
+        if self.namespace_module is not None:
+            ns.update(self.namespace_module.__dict__)
+
+    def render(self, tname, **kwargs):
+        request = get_request()
+        self._inject_django_things_into_namespace(request, kwargs)
+        return HttpResponse(self.template(tname).generate(**kwargs).render('xhtml'))
+
+    def render_xml(self, tname, **kwargs):
+        request = get_request()
+        self._inject_django_things_into_namespace(request, kwargs)
+        content_type = kwargs.get('content_type', 'application/xml')
+        return HttpResponse(self.template(tname).generate(**kwargs).render('xml'),
+                            content_type=content_type)
+
+    def plaintext(self, tname, **kwargs):
+        request = get_request()
+        content_type = kwargs.get('content_type', 'text/plain')
+        self._inject_django_things_into_namespace(request, kwargs)
+        txt = self.text_template(tname).generate(**kwargs).render('text')
+        return txt

Copied: servres/trunk/conifer/plumbing/hooksystem.py (from rev 918, servres/trunk/conifer/integration/_hooksystem.py)
===================================================================
--- servres/trunk/conifer/plumbing/hooksystem.py	                        (rev 0)
+++ servres/trunk/conifer/plumbing/hooksystem.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -0,0 +1,21 @@
+# TODO: decide whether or not to use this!
+
+import warnings
+import conifer.syrup.integration as HOOKS
+
+__all__ = ['callhook', 'callhook_required', 'gethook']
+
+def gethook(name, default=None):
+    print dir(HOOKS)
+    print (name, getattr(HOOKS, name))
+    return getattr(HOOKS, name) or default
+
+def callhook_required(name, *args, **kwargs):
+    f = getattr(HOOKS, name)
+    assert f, 'implementation for hook %r required but not found' % name
+    return f(*args, **kwargs)
+
+def callhook(name, *args, **kwargs):
+    f = getattr(HOOKS, name)
+    if f:
+        return f(*args, **kwargs)

Modified: servres/trunk/conifer/settings.py
===================================================================
--- servres/trunk/conifer/settings.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/settings.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -67,7 +67,7 @@
     'django.middleware.common.CommonMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
-    'conifer.middleware.genshi_locals.ThreadLocals',
+    'conifer.plumbing.genshi_support.GenshiMiddleware',
     'django.middleware.locale.LocaleMiddleware',
     'babeldjango.middleware.LocaleMiddleware',
     'django.middleware.transaction.TransactionMiddleware',
@@ -120,7 +120,7 @@
 
 if EVERGREEN_AUTHENTICATION:
     AUTHENTICATION_BACKENDS.append(
-        'conifer.custom.auth_evergreen.EvergreenAuthBackend')
+        'conifer.integration.auth_evergreen.django.EvergreenAuthBackend')
 
 #----------
 

Modified: servres/trunk/conifer/static/main.css
===================================================================
--- servres/trunk/conifer/static/main.css	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/static/main.css	2010-07-15 00:55:37 UTC (rev 919)
@@ -21,8 +21,9 @@
 
 /* remember to define focus styles! */
 :focus {
-	outline: 0;
+	outline: gray 1px solid;
 }
+
 body {
 	line-height: 1;
 	color: black;
@@ -178,9 +179,11 @@
 
 .itemtree li { padding-left: 0; margin-left: 0; } 
 
-.itemtree li { margin: 12px 8px; }
+.itemtree li { margin: 12px 8px; line-height: 115%; }
 .itemtree li .mainline { padding-left: 8px; }
 
+.itemtree li .author_pub { padding-left: 8px; font-size: 90%; margin: 4px 0 16px 0; color: #111; }
+
 .itemtree .metalink { padding-left: 8px; color: gray; }
 .itemtree .metalink a {
     color: gray; 
@@ -281,8 +284,10 @@
     font-size: 80%; color: navy;
 }
 
-.menublockopener { margin-left: 0.25em; color: #bbb !important; font-weight: normal !important; }
-.menublock { background-color: #f2e4cc; font-size: 95%; padding: 1px 4px; }
+.menublockopener { margin-left: 0.25em; color: #d44 !important; font-weight: normal !important; }
+.menublock { color: gray; background-color: #844; font-size: 85%; padding: 4px 4px; margin-top: 2px; display: inline-block; }
+.menublock a { color: white; padding: 8px;  }
+.menublock a:hover { color: yellow; }
 
 #sitebanner { background-color: #f2e4cc; margin: -12px -12px 12px -12px; padding: 8px; }
 #sitesearch { float: right; }

Modified: servres/trunk/conifer/syrup/admin.py
===================================================================
--- servres/trunk/conifer/syrup/admin.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/syrup/admin.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,6 +1,3 @@
-# to run standalone: From conifer directory:
-# DJANGO_SETTINGS_MODULE=conifer.settings PYTHONPATH=.. python syrup/admin.py
-
 from django.contrib import admin
 import django.db.models
 from conifer.syrup.models import *

Deleted: servres/trunk/conifer/syrup/fuzzy_match.py
===================================================================
--- servres/trunk/conifer/syrup/fuzzy_match.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/syrup/fuzzy_match.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,53 +0,0 @@
-from conifer.syrup import models
-from django.db.models import Q
-
-#http://www.poromenos.org/node/87. Credit to Poromenos. It's under BSD.
-def levenshtein_distance(first, second):
-    """Find the Levenshtein distance between two strings."""
-    if len(first) > len(second):
-        first, second = second, first
-    if len(second) == 0:
-        return len(first)
-    first_length = len(first) + 1
-    second_length = len(second) + 1
-    distance_matrix = [range(second_length) for x in range(first_length)]
-    for i in xrange(1, first_length):
-        for j in range(1, second_length):
-            deletion = distance_matrix[i-1][j] + 1
-            insertion = distance_matrix[i][j-1] + 1
-            substitution = distance_matrix[i-1][j-1]
-            if first[i-1] != second[j-1]:
-                substitution += 1
-            distance_matrix[i][j] = min(insertion, deletion, substitution)
-
-    return distance_matrix[first_length-1][second_length-1]
-
-def rank_pending_items(dct):
-    title = dct.get('dc:title','')
-    author = dct.get('dc:creator','')
-    publisher = dct.get('dc:publisher','')
-    pubdate  = dct.get('dc:pubdate','')
-
-    # not right... also, prefetch metadata
-    all_items = models.Item.objects.select_related('metadata')
-    all_pending_items = all_items.filter(Q(item_type='PHYS'), 
-                                         ~Q(metadata__name='syrup:barcode'))
-    all_pending_items = all_items.filter(Q(item_type='PHYS'), 
-                                         ~Q(metadata__name='syrup:barcode',
-                                            metadata__value__in=[p.barcode for p in models.PhysicalObject.live_objects()]))
-    results = []
-    # not sure I like these weights, but let's play a bit.
-    METRICS = (('dc:title', 1), ('dc:creator', 1), ('dc:publisher', 0.5), ('dc:pubdate', 0.25))
-    for item in all_pending_items:
-        scores = []
-        for heading, weight in METRICS:
-            try:
-                ival = item.metadata_set.get(name=heading).value or ''
-            except:
-                ival = ''
-            dist = levenshtein_distance(dct.get(heading) or '', ival)
-            scores.append(dist/weight)
-        score = sum(scores)
-        results.append((score, item))
-    results.sort()
-    return results

Modified: servres/trunk/conifer/syrup/integration.py
===================================================================
--- servres/trunk/conifer/syrup/integration.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/syrup/integration.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -15,7 +15,6 @@
     allowed to create new course-reserve sites. Note that users marked
     as 'staff' are always allowed to create new sites.
     """
-    pass
 
 
 @disable
@@ -25,7 +24,6 @@
     the departments to which they belong. Each row should be a tuple
     in the form: ('Department name', 'course-code', 'Course name').
     """
-    pass
 
 
 @disable
@@ -36,7 +34,6 @@
     'start-date', 'end-date'), where the dates are instances of the
     datetime.date class.
     """
-    pass
 
 
 @disable
@@ -69,3 +66,37 @@
     the item. The ServiceDesk object has an 'external_id' attribute
     which should represent the desk in the ILS.
     """
+
+
+ at disable
+def bib_id_to_marcxml(bib_id):
+    """
+    Given a bib_id, return a MARC record in MARCXML format. Return
+    None if the bib_id does not exist.
+    """
+
+    
+ at disable
+def get_better_copy_of_marc(marc_string):
+    """
+    This function takes a MARCXML record and returns either the same
+    record, or another instance of the same record from a different
+    source. 
+
+    This is a hack. There is currently at least one Z39.50 server that
+    returns a MARCXML record with broken character encoding. This
+    function declares a point at which we can work around that server.
+    """
+
+
+ at disable
+def marcxml_to_url(marc_string):
+    """
+    Given a MARC record, return either a URL (representing the
+    electronic resource) or None.
+
+    Typically this will be the 856$u value; but in Conifer, 856$9 and
+    856$u form an associative array, where $9 holds the institution
+    codes and $u holds the URLs.
+    """
+

Modified: servres/trunk/conifer/syrup/models.py
===================================================================
--- servres/trunk/conifer/syrup/models.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/syrup/models.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -7,9 +7,9 @@
 import re
 import random
 from django.utils import simplejson
-from conifer.middleware import genshi_locals
+from conifer.plumbing.genshi_support import get_request
 # campus and library integration
-from conifer.integration._hooksystem import *
+from conifer.plumbing.hooksystem import *
 from django.conf import settings
 campus = settings.CAMPUS_INTEGRATION
 # TODO: fixme, not sure if conifer.custom is a good parent.
@@ -183,13 +183,10 @@
         return u'%s: %s (%s, %s)' % (
             self.course.code, self.course.name,
             self.owner.last_name or self.owner.username,
-            self.term)
+            self.term.name)
 
     def list_display(self):
-        if self.code:
-            return '%s: %s [%s]' % (self.term, self.title, self.code)
-        else:
-            return '%s: %s' % (self.term, self.title)
+            return '%s [%s, %s]' % (self.course.name, self.course.code, self.term.name)
 
     def items(self):
         return self.item_set.all()
@@ -232,7 +229,7 @@
     def site_url(self, suffix=''):
         # I'm not fond of this being here. I think I'll leave this and
         # item_url non-implemented, and monkey-patch them in views.py.
-        req = genshi_locals.get_request()
+        req = get_request()
         prefix = req.META['SCRIPT_NAME']
         return '%s/site/%d/%s' % (prefix, self.id, suffix)
 
@@ -292,6 +289,12 @@
             user.id == self.owner_id \
                 or bool(self.members().filter(user=user)))
 
+    def is_open_to(self, user):
+        return self.access == 'ANON' \
+            or (self.access == 'LOGIN' and user.is_authenticated()) \
+            or user.is_staff \
+            or self.is_member(user)
+            
 #------------------------------------------------------------
 # User membership in sites
 
@@ -499,7 +502,7 @@
     def item_url(self, suffix='', force_local_url=False):
         # I'm not fond of this being here. I think I'll leave this and
         # site_url non-implemented, and monkey-patch them in views.py.
-        req = genshi_locals.get_request()
+        req = get_request()
         prefix = req.META['SCRIPT_NAME']
         if self.item_type == 'ELEC' and suffix == '':
             return '%s/site/%d/item/%d/dl/%s' % (
@@ -542,7 +545,7 @@
         return hl_title
 
     def author_hl(self, terms):
-        hl_author = self.author()
+        hl_author = self.author
 
         for term in terms:
             hl_author = highlight(hl_author,term)

Modified: servres/trunk/conifer/syrup/urls.py
===================================================================
--- servres/trunk/conifer/syrup/urls.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/syrup/urls.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -52,11 +52,11 @@
     (r'^admin/update_depts_courses/$', 'admin_update_depts_courses'),
     (r'^admin/update_terms/$', 'admin_update_terms'),
 
-    (r'^phys/$', 'phys_index'),
-    (r'^phys/checkout/$', 'phys_checkout'),
-    (r'^phys/mark_arrived/$', 'phys_mark_arrived'),
-    (r'^phys/mark_arrived/match/$', 'phys_mark_arrived_match'),
-    (r'^phys/circlist/$', 'phys_circlist'),
+    # (r'^phys/$', 'phys_index'),
+    # (r'^phys/checkout/$', 'phys_checkout'),
+    # (r'^phys/mark_arrived/$', 'phys_mark_arrived'),
+    # (r'^phys/mark_arrived/match/$', 'phys_mark_arrived_match'),
+    # (r'^phys/circlist/$', 'phys_circlist'),
 
     (r'^site/(?P<site_id>\d+)/reseq$', 'site_reseq'),
     (ITEM_PREFIX + r'reseq', 'item_heading_reseq'),

Deleted: servres/trunk/conifer/syrup/user_lookup.py
===================================================================
--- servres/trunk/conifer/syrup/user_lookup.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/syrup/user_lookup.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,32 +0,0 @@
-from django.contrib.auth.models import User
-from django.contrib.auth import get_backends
-
-#----------------------------------------------------------------------
-# Initializing an external user account
-
-# TODO: does it make sense to put maybe_initialize_user on the
-# authentication backends, or does it belong somewhere else?
-
-# For usernames that come from external authentication sources (LDAP,
-# Evergreen, etc.) we need a general way to look up a user who may not
-# yet have a Django account.  For example, you might want to add user
-# 'xsmith' as the instructor for a course. If 'xsmith' is in LDAP but
-# not yet in Django, it would be nice if a Django record were lazily
-# created for him upon lookup. 
-
-# That's what 'maybe_initialize_user' is for: participating backends
-# provide a 'maybe_initialize_user' method which creates a new User
-# record if one doesn't exist. Otherwise, 'maybe_initialize_user' is
-# equivalent to 'User.objects.get(username=username)'.
-
-_backends_that_can_initialize_users = [
-    be for be in get_backends() if hasattr(be, 'maybe_initialize_user')]
-
-def maybe_initialize_user(username):
-    try:
-        return User.objects.get(username=username)
-    except User.DoesNotExist:
-        for be in _backends_that_can_initialize_users:
-            user = be.maybe_initialize_user(username, look_local=False)
-            if user:
-                return user

Modified: servres/trunk/conifer/syrup/views/__init__.py
===================================================================
--- servres/trunk/conifer/syrup/views/__init__.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/syrup/views/__init__.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -4,3 +4,4 @@
 from search import *
 from admin import *
 from feeds import *
+from auth import *

Modified: servres/trunk/conifer/syrup/views/_common.py
===================================================================
--- servres/trunk/conifer/syrup/views/_common.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/syrup/views/_common.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,129 +1,49 @@
-import warnings
-from conifer.syrup import models
-from datetime import datetime
+#----------------------------------------------------------------------
+# Initialize the Genshi templating system. 'g' is the 'templating
+# system object' used to render Genshi templates. 'genshi_namespace'
+# is a module which acts as a global namespace when expanding a Genshi
+# template.
+
+from conifer.here                    import HERE
+from conifer.plumbing.genshi_support import TemplateSet
+from .                               import genshi_namespace
+
+g = TemplateSet(HERE('templates'), genshi_namespace)
+
+#----------------------------------------------------------------------
+# Common imports shared by all view functions.
+
 import django.conf
-from django.contrib.auth import authenticate, login, logout
-from django.contrib.auth.decorators import login_required
-from django.contrib.auth.models import User, SiteProfileNotAvailable
-from django.core.paginator import Paginator
-from django.db.models import Q
-from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotFound
-from django.http import HttpResponseForbidden
-from django.shortcuts import get_object_or_404
-from django.utils import simplejson
-from generics import *
-#from gettext import gettext as _ # fixme, is this the right function to import?
-from django.utils.translation import ugettext as _
-import conifer.genshi_support as g
 import django.forms
 import re
 import sys
-from django.forms.models import modelformset_factory
-from conifer.libsystems.z3950.marcxml import (marcxml_to_dictionary,
-                                              marcxml_dictionary_to_dc)
-from conifer.syrup.fuzzy_match import rank_pending_items
-from django.core.urlresolvers import reverse
-from conifer.here import HERE
+import warnings
 import pdb
 
-#-----------------------------------------------------------------------------
-# Z39.50 Support
-#
-# This is experimental at this time, and requires some tricky Python
-# imports as far as I can tell. For that reason, let's keep the Z39.50
-# support optional for now. If you have Ply and PyZ3950, we'll load
-# and use it; if not, no worries, everything else will workk.
+from conifer.syrup                  import models
+from datetime                       import datetime
+from django.contrib.auth            import authenticate, login, logout
+from django.contrib.auth.decorators import login_required
+from django.contrib.auth.models     import User, SiteProfileNotAvailable
+from django.core.paginator          import Paginator
+from django.core.urlresolvers       import reverse
+from django.db.models               import Q
+from django.forms.models            import modelformset_factory
+from django.http                    import (HttpResponse, HttpResponseRedirect,
+                                            HttpResponseNotFound,
+                                            HttpResponseForbidden)
+from django.shortcuts               import get_object_or_404
+from django.utils                   import simplejson
+from django.utils.translation       import ugettext as _
+from _generics                      import * # TODO: should not import-star
 
-try:
-    # Graham needs this import hackery to get PyZ3950 working. Presumably
-    # Art can 'import profile; import lex', so this hack won't run for
-    # him.
-    try:
-        import profile
-        import lex
-        import yacc
-    except ImportError:
-        sys.modules['profile'] = sys # just get something called 'profile';
-                                     # it's not actually used.
-        import ply.lex
-        import ply.yacc             # pyz3950 thinks these are toplevel modules.
-        sys.modules['lex'] = ply.lex
-        sys.modules['yacc'] = ply.yacc
+from conifer.libsystems.z3950.marcxml import (marcxml_to_dictionary,
+                                              marcxml_dictionary_to_dc)
 
-    # for Z39.50 support, not sure whether this is the way to go yet but
-    # as generic as it gets
-    from PyZ3950 import zoom, zmarc
-except:
-    warnings.warn('Could not load Z39.50 support.')
 
 #-----------------------------------------------------------------------------
-# poor-man's logging. Not sure we need more yet.
-
-def log(level, msg):
-    print >> sys.stderr, '[%s] %s: %s' % (datetime.now(), level.upper(), msg)
-
-#-----------------------------------------------------------------------------
-# Authentication
-
-def auth_handler(request, path):
-    default_url = request.META['SCRIPT_NAME'] + '/'
-    if path == 'login/':
-        if request.method == 'GET':
-            next=request.GET.get('next', default_url)
-            if request.user.is_authenticated():
-                return HttpResponseRedirect(next)
-            else:
-                return g.render('auth/login.xhtml',
-                                next=request.GET.get('next'))
-        else:
-            userid, password = request.POST['userid'], request.POST['password']
-            next = request.POST['next']
-            user = authenticate(username=userid, password=password)
-            def _error_page(msg):
-                return g.render('auth/login.xhtml', err=msg, next=next)
-            if user is None:
-                return _error_page(
-                    _('Invalid username or password. Please try again.'))
-            elif not user.is_active:
-                return _error_age(
-                    _('Sorry, this account has been disabled.'))
-            else:
-                login(request, user)
-                # initialize the profile if it doesn't exist.
-                try:
-                    user.get_profile()
-                except models.UserProfile.DoesNotExist:
-                    profile = models.UserProfile.objects.create(user=user)
-                    profile.save()
-                return HttpResponseRedirect(
-                    request.POST.get('next', default_url))
-    elif path == 'logout':
-        logout(request)
-        return HttpResponseRedirect(default_url)
-    else:
-        return HttpResponse('auth_handler: ' + path)
-
-#-----------------------------------------------------------------------------
 # Authorization
 
-# TODO: this _fast_user_membership_query is broken.
-
-def _fast_user_membership_query(user_id, site_id, where=None):
-    # I use a raw SQL query here because I want the lookup to be as
-    # fast as possible. Caching would help too, but let's try this
-    # first. (todo, review later.)
-    return True               #  TODO: fixme!!!!
-    query = ('select count(*) from syrup_member '
-             'where user_id=%s and site_id=%s ')
-    if where:
-        query += (' and ' + where)
-    cursor = django.db.connection.cursor()
-    cursor.execute(query, [user_id, int(site_id)])
-    res = cursor.fetchall()
-    cursor.close()
-    allowed = bool(res[0][0])
-    return allowed
-
 def _access_denied(request, message):
     if request.user.is_anonymous():
         # then take them to login screen....
@@ -139,10 +59,8 @@
 # decorator
 def instructors_only(handler):
     def hdlr(request, site_id, *args, **kwargs):
-        allowed = request.user.is_superuser
-        if not allowed:
-            allowed = _fast_user_membership_query(
-                request.user.id, site_id, "role in ('INSTR','ASSIST')")
+        site = get_object_or_404(models.Site, pk=site_id)
+        allowed = site.can_edit(request.user)
         if allowed:
             return handler(request, site_id, *args, **kwargs)
         else:
@@ -154,13 +72,8 @@
 def members_only(handler):
     def hdlr(request, site_id, *args, **kwargs):
         user = request.user
-        allowed = user.is_superuser
-        if not allowed:
-            site = models.Site.objects.get(pk=site_id)
-            allowed = site.access=='ANON' or \
-                (user.is_authenticated() and site.access=='LOGIN')
-        if not allowed:
-            allowed = _fast_user_membership_query(user.id, site_id)
+        site = get_object_or_404(models.Site, pk=site_id)
+        allowed = site.is_open_to(request.user)
         if allowed:
             return handler(request, site_id, *args, **kwargs)
         else:
@@ -190,6 +103,7 @@
     # that are supposed to be public.
     return handler
 
+
 #-----------------------------------------------------------------------------
 # Simple Message: just a quick title-and-message web page.
 
@@ -230,8 +144,8 @@
         # have explicit Member-ship.
         filters = {
             'items': (Q(site__access__in=('LOGIN','ANON')) \
-                          | Q(site__member__user=user)),
-            'sites': (Q(access__in=('LOGIN','ANON')) | Q(member__user=user)),
+                          | Q(site__group__membership__user=user)),
+            'sites': (Q(access__in=('LOGIN','ANON')) | Q(group__membership__user=user)),
             'instructors': Q(), # TODO: do we really need a filter here?
             }
     return filters

Copied: servres/trunk/conifer/syrup/views/_generics.py (from rev 918, servres/trunk/conifer/syrup/views/generics.py)
===================================================================
--- servres/trunk/conifer/syrup/views/_generics.py	                        (rev 0)
+++ servres/trunk/conifer/syrup/views/_generics.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -0,0 +1,55 @@
+from django.http import HttpResponse, HttpResponseRedirect
+from django.http import HttpResponseForbidden
+from django.shortcuts import get_object_or_404
+from django.forms import ModelForm, ValidationError
+
+from _common import g           # the Genshi templating system
+
+def generic_handler(form, decorator=lambda x: x):
+    def handler(request, obj_id=None, action=None):
+        if obj_id is None and action is None:
+            return generic_index(form)
+        elif action is None:
+            return generic_edit(form, request, obj_id)
+        elif action == 'delete':
+            return generic_delete(form, request, obj_id)
+    return decorator(handler)
+
+
+def generic_index(form):
+    assert hasattr(form, 'Index')
+    return g.render('generic/index.xhtml', form=form)
+
+def generic_edit(form, request, obj_id):
+    if obj_id == '0':
+        instance = None
+    else:
+        instance = get_object_or_404(form.Meta.model, pk=obj_id)
+    if request.method != 'POST':
+        form = form(instance=instance)
+        return g.render('generic/edit.xhtml', **locals())
+    else:
+        form = form(request.POST, instance=instance)
+        if not form.is_valid():
+            return g.render('generic/edit.xhtml', **locals())
+        else:
+            form.save()
+            return HttpResponseRedirect('../')
+
+def generic_delete(form, request, obj_id):
+    instance = get_object_or_404(form.Meta.model, pk=obj_id)
+    if request.method != 'POST':
+        form = form(instance=instance)
+        return g.render('generic/delete.xhtml', **locals())
+    else:
+        instance.delete()
+        return HttpResponseRedirect('../')
+
+
+def strip_and_nonblank(fieldname):
+    def clean(self):
+        v = self.cleaned_data.get(fieldname) or ''
+        if not v.strip():
+            raise ValidationError('Cannot be blank.')
+        return v.strip()
+    return clean

Modified: servres/trunk/conifer/syrup/views/admin.py
===================================================================
--- servres/trunk/conifer/syrup/views/admin.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/syrup/views/admin.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,6 +1,6 @@
 from _common import *
 from django.utils.translation import ugettext as _
-from conifer.integration._hooksystem import *
+from conifer.plumbing.hooksystem import *
 from datetime import date
 
 #-----------------------------------------------------------------------------

Added: servres/trunk/conifer/syrup/views/auth.py
===================================================================
--- servres/trunk/conifer/syrup/views/auth.py	                        (rev 0)
+++ servres/trunk/conifer/syrup/views/auth.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -0,0 +1,42 @@
+from _common import *
+
+#-----------------------------------------------------------------------------
+# Authentication
+
+def auth_handler(request, path):
+    default_url = request.META['SCRIPT_NAME'] + '/'
+    if path == 'login/':
+        if request.method == 'GET':
+            next=request.GET.get('next', default_url)
+            if request.user.is_authenticated():
+                return HttpResponseRedirect(next)
+            else:
+                return g.render('auth/login.xhtml',
+                                next=request.GET.get('next'))
+        else:
+            userid, password = request.POST['userid'], request.POST['password']
+            next = request.POST['next']
+            user = authenticate(username=userid, password=password)
+            def _error_page(msg):
+                return g.render('auth/login.xhtml', err=msg, next=next)
+            if user is None:
+                return _error_page(
+                    _('Invalid username or password. Please try again.'))
+            elif not user.is_active:
+                return _error_age(
+                    _('Sorry, this account has been disabled.'))
+            else:
+                login(request, user)
+                # initialize the profile if it doesn't exist.
+                try:
+                    user.get_profile()
+                except models.UserProfile.DoesNotExist:
+                    profile = models.UserProfile.objects.create(user=user)
+                    profile.save()
+                return HttpResponseRedirect(
+                    request.POST.get('next', default_url))
+    elif path == 'logout':
+        logout(request)
+        return HttpResponseRedirect(default_url)
+    else:
+        return HttpResponse('auth_handler: ' + path)

Modified: servres/trunk/conifer/syrup/views/feeds.py
===================================================================
--- servres/trunk/conifer/syrup/views/feeds.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/syrup/views/feeds.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -15,7 +15,7 @@
         def render_title(item):
             return item.title
         if feed_type == 'top-level':
-            items = items.filter(parent_heading=None).order_by('-sort_order')
+            items = items.filter(parent_heading=None).order_by('title')
         elif feed_type == 'recent-changes':
             items = items.order_by('-last_modified')
         elif feed_type == 'tree':

Deleted: servres/trunk/conifer/syrup/views/generics.py
===================================================================
--- servres/trunk/conifer/syrup/views/generics.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/syrup/views/generics.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,55 +0,0 @@
-import conifer.genshi_support as g
-from django.http import HttpResponse, HttpResponseRedirect
-from django.http import HttpResponseForbidden
-from django.shortcuts import get_object_or_404
-from django.forms import ModelForm, ValidationError
-
-
-def generic_handler(form, decorator=lambda x: x):
-    def handler(request, obj_id=None, action=None):
-        if obj_id is None and action is None:
-            return generic_index(form)
-        elif action is None:
-            return generic_edit(form, request, obj_id)
-        elif action == 'delete':
-            return generic_delete(form, request, obj_id)
-    return decorator(handler)
-
-
-def generic_index(form):
-    assert hasattr(form, 'Index')
-    return g.render('generic/index.xhtml', form=form)
-
-def generic_edit(form, request, obj_id):
-    if obj_id == '0':
-        instance = None
-    else:
-        instance = get_object_or_404(form.Meta.model, pk=obj_id)
-    if request.method != 'POST':
-        form = form(instance=instance)
-        return g.render('generic/edit.xhtml', **locals())
-    else:
-        form = form(request.POST, instance=instance)
-        if not form.is_valid():
-            return g.render('generic/edit.xhtml', **locals())
-        else:
-            form.save()
-            return HttpResponseRedirect('../')
-
-def generic_delete(form, request, obj_id):
-    instance = get_object_or_404(form.Meta.model, pk=obj_id)
-    if request.method != 'POST':
-        form = form(instance=instance)
-        return g.render('generic/delete.xhtml', **locals())
-    else:
-        instance.delete()
-        return HttpResponseRedirect('../')
-
-
-def strip_and_nonblank(fieldname):
-    def clean(self):
-        v = self.cleaned_data.get(fieldname) or ''
-        if not v.strip():
-            raise ValidationError('Cannot be blank.')
-        return v.strip()
-    return clean

Copied: servres/trunk/conifer/syrup/views/genshi_namespace.py (from rev 918, servres/trunk/conifer/genshi_namespace.py)
===================================================================
--- servres/trunk/conifer/syrup/views/genshi_namespace.py	                        (rev 0)
+++ servres/trunk/conifer/syrup/views/genshi_namespace.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -0,0 +1,38 @@
+# genshi_namespace
+
+# Toplevel definitions in this module will be available in when
+# rendering a Genshi template.
+
+from conifer.integration._hooksystem import gethook, callhook
+import itertools
+from itertools import cycle
+from conifer.syrup import models
+import django.forms
+from django.utils import translation
+
+_ = translation.ugettext
+
+# this probably ought to be a method on User, or another model class.
+def instructor_url(instructor, suffix=''):
+    return '/instructor/%d/%s' % (instructor.id, suffix)
+
+# added to make department browse
+def department_url(department, suffix=''):
+    return '/department/%d/%s' % (department.id, suffix)
+
+
+def call_or_value(obj, dflt=None):
+    # This is used by the generics templates.
+    if callable(obj):
+        return obj() or dflt
+    else:
+        return obj or dflt
+
+
+def instructs(user, site):
+    try:
+        mbr = models.Member.objects.get(user=user, site=site)
+        return mbr.role in ('INSTR', 'PROXY')
+    except:
+        return False
+    

Modified: servres/trunk/conifer/syrup/views/items.py
===================================================================
--- servres/trunk/conifer/syrup/views/items.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/syrup/views/items.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,7 +1,8 @@
 from _common import *
 from django.utils.translation import ugettext as _
-from xml.etree import ElementTree as E
+from xml.etree import ElementTree as ET
 from conifer.syrup import integration
+from conifer.plumbing.hooksystem import *
 
 
 @members_only
@@ -173,9 +174,13 @@
         if not site.can_edit(request.user):
             return _access_denied(_('You are not an editor.'))
 
-        pickitem = marcxml_to_dictionary(raw_pickitem)
+        if gethook('get_better_copy_of_marc'):
+            pickitem_xml = callhook('get_better_copy_of_marc', raw_pickitem)
+            raw_pickitem = unicode(ET.tostring(pickitem_xml))
+            pickitem = marcxml_to_dictionary(pickitem_xml)
+        else:
+            pickitem = marcxml_to_dictionary(raw_pickitem)
         dublin = marcxml_dictionary_to_dc(pickitem)
-
         assert dublin
 
         #TODO: this data munging does not belong here. 
@@ -183,8 +188,9 @@
         # one last thing. If this picked item has an 856$9 field, then
         # it's an electronic resource, not a physical item. In that
         # case, we add it as a URL, not a PHYS.
-        if '8569' in pickitem:
-            dct = dict(item_type='URL', url=pickitem.get('856u'))
+        url = callhook('marcxml_to_url', raw_pickitem)
+        if url:
+            dct = dict(item_type='URL', url=url)
         else:
             dct = dict(item_type='PHYS')
         

Modified: servres/trunk/conifer/syrup/views/search.py
===================================================================
--- servres/trunk/conifer/syrup/views/search.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/syrup/views/search.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,5 +1,5 @@
 from _common import *
-from django.utils.translation import ugettext as _
+from PyZ3950 import zoom, zmarc
 
 def normalize_query(query_string,
                     findterms=re.compile(r'"([^"]+)"|(\S+)').findall,
@@ -38,7 +38,6 @@
 
 #-----------------------------------------------------------------------------
 # Search and search support
-
 def search(request, in_site=None, with_instructor=None):
     ''' Need to work on this, the basic idea is
         - put an entry point for instructor and site listings
@@ -88,7 +87,7 @@
         else:
             if not with_instructor:
                 # Textual (non-numeric) queries.
-                item_query = get_query(query_string, ['title', 'metadata__value'])
+                item_query = get_query(query_string, ['title', 'author', 'publisher', 'marcxml'])
                 #need to think about sort order here, probably better by author (will make sortable at display level)
                 results_list = models.Item.objects.filter(item_query)
 
@@ -103,7 +102,7 @@
         else:
             results_list = results_list.filter(user_filter_for_items)
 
-        results_list = results_list.distinct().order_by('title')
+        results_list = results_list.distinct() #.order_by('title')
         results_len = len(results_list)
         paginator = Paginator(results_list, count)
 
@@ -112,10 +111,10 @@
             # then no site search is necessary.
             site_list = []; site_len = 0
         else:
-            site_query = get_query(query_string, ['title', 'department__name'])
+            site_query = get_query(query_string, ['course__name', 'course__department__name'])
             # apply the search-filter and the user-filter
             site_results = models.Site.objects.filter(site_query).filter(user_filter_for_sites)
-            site_list = site_results.order_by('title')
+            site_list = site_results.order_by('course__name')
             site_len = len(site_results)
 
         #instructor search
@@ -123,7 +122,7 @@
             instructor_list = []; instr_len = 0
         else:
             instr_query = get_query(query_string, ['user__last_name'])
-            instructor_results = models.Member.objects.filter(instr_query).filter(role='INSTR')
+            instructor_results = models.Membership.objects.filter(instr_query).filter(role='INSTR')
             if in_site:
                 instructor_results = instructor_results.filter(site=in_site)
             instructor_list = instructor_results.order_by('user__last_name')[0:5]
@@ -137,7 +136,7 @@
         paginator = Paginator( results_list,
             count)
         site_results = models.Site.objects.filter(active=True)
-        site_list = site_results.order_by('title')[0:5]
+        site_list = site_results.order_by('course__name')[0:5]
         site_len = len(site_results)
         instructor_results = models.Member.objects.filter(role='INSTR')
         instructor_list = instructor_results.order_by('user__last_name')[0:5]
@@ -180,7 +179,7 @@
             tquery = request.POST['ztitle']
         search_target= models.Z3950Target.objects.get(name=target)
         conn = zoom.Connection (search_target.host, search_target.port)
-        conn.databaseName = search_target.db
+        conn.databaseName = search_target.database
         conn.preferredRecordSyntax = search_target.syntax
         query = zoom.Query ('CCL', '%s="%s"' % ('ti',tquery))
         res = conn.search (query)
@@ -201,7 +200,7 @@
                 raw = r.data
 
                 # Convert to MARC
-                marcdata = zmarc.MARC(raw)
+                marcdata = zmarc.MARC(raw, strict=False)
                 #print marcdata
 
                 # Convert to MARCXML

Modified: servres/trunk/conifer/syrup/views/sites.py
===================================================================
--- servres/trunk/conifer/syrup/views/sites.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/syrup/views/sites.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -220,8 +220,6 @@
             # invitation failures? They should be captured somehow, I
             # think. Should we temporarily disable accounts after
             # multiple failures?
-            log('WARN', 'Invitation failure, user %r gave code %r' % \
-                (request.user.username, code))
             error = _('The code you provided is not valid.')
             return g.render('site_invitation.xhtml', **locals())
 

Modified: servres/trunk/conifer/templates/auth/login.xhtml
===================================================================
--- servres/trunk/conifer/templates/auth/login.xhtml	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/templates/auth/login.xhtml	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,5 +1,5 @@
 <?python
-title = _('Syrup E-Reserves: Please log in')
+title = _('Please log in')
 ?>
 <html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:xi="http://www.w3.org/2001/XInclude"
@@ -7,8 +7,8 @@
 <xi:include href="../master.xhtml"/>
 <head>
   <title>${title}</title>
-  <script>
-    $(function() {$('#userid').focus();});
+  <script type="text/javascript">
+    $(function() { $('#userid').focus(); });
   </script>
 </head>
 <body>
@@ -23,7 +23,7 @@
     </tr>
     <tr>
       <th>Password:</th>
-      <td><input type="password" name="password" style="width: 200px;"/></td>
+      <td><input type="password" id="pwd" name="password" style="width: 200px;"/></td>
     </tr>
     <tr><th style="background-color: white; border: none;"/>
     <td><input type="submit" value="Log in" style="width: 200px;"/></td></tr>

Modified: servres/trunk/conifer/templates/browse_index.xhtml
===================================================================
--- servres/trunk/conifer/templates/browse_index.xhtml	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/templates/browse_index.xhtml	2010-07-15 00:55:37 UTC (rev 919)
@@ -29,6 +29,7 @@
 
     <div style="background-color: #dcc; margin: 16px; padding: 8px;">
     <h2>Choose from one of the options below:</h2>
+    (currently broken)
     <div class="itemadd">
     <ul>
         <li><a href="courses">Browse by Course Name</a></li>

Modified: servres/trunk/conifer/templates/components/site.xhtml
===================================================================
--- servres/trunk/conifer/templates/components/site.xhtml	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/templates/components/site.xhtml	2010-07-15 00:55:37 UTC (rev 919)
@@ -55,9 +55,12 @@
 	  <!-- !I'm really sorry, this is ugly, but I want
 	       non-breaking spaces here, so that on long-named items,
 	       the links will stay togeter. A better way?  -->
-	  <span py:if="item.needs_meta_link()"><a href="${item.item_url('meta')}">about</a>&#160;</span><span py:if="edit">&bull;&#160;<a href="${item.item_url('edit/')}">edit</a></span><span py:if="edit">&#160;&bull;&#160;<a href="${item.item_url('relocate/')}">relocate</a></span>
+	  <span py:if="item.needs_meta_link()"><a href="${item.item_url('meta')}">about&#160;this&#160;item</a>&#160;</span><span py:if="edit"><a href="${item.item_url('edit/')}">edit</a></span><span py:if="edit">&#160;<a href="${item.item_url('relocate/')}">relocate</a>&#160;<a href="${item.item_url('delete/')}">delete</a></span>
 	</span>
       </div>
+      <div class="author_pub" py:if="item.author or item.publisher">
+	${item.author}. ${item.publisher}.
+      </div>
       <!-- !to show a full tree, uncomment the following: -->
       ${show_tree(subs, edit)}
     </li>

Modified: servres/trunk/conifer/templates/edit_site.xhtml
===================================================================
--- servres/trunk/conifer/templates/edit_site.xhtml	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/templates/edit_site.xhtml	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,6 +1,6 @@
 <?python
 if instance.id:
-    title = _('Edit site details')
+    title = _('Configure this site')
 else:
     title = _('Create a new site')
 ?>

Modified: servres/trunk/conifer/templates/feeds/site_atom.xml
===================================================================
--- servres/trunk/conifer/templates/feeds/site_atom.xml	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/templates/feeds/site_atom.xml	2010-07-15 00:55:37 UTC (rev 919)
@@ -2,7 +2,7 @@
 <feed xmlns="http://www.w3.org/2005/Atom"
       xmlns:xi="http://www.w3.org/2001/XInclude"
       xmlns:py="http://genshi.edgewall.org/">
-  <title>Reserves (${feed_type}) for ${site.list_display()}</title>
+  <title>Reserves (${feed_type}) for ${site}</title>
   <link href="${root}${site.site_url()}"
   rel="alternate"/>
   <link href="${root}${site.site_url('feeds/' + feed_type)}"

Modified: servres/trunk/conifer/templates/item/item_add_cat_search.xhtml
===================================================================
--- servres/trunk/conifer/templates/item/item_add_cat_search.xhtml	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/templates/item/item_add_cat_search.xhtml	2010-07-15 00:55:37 UTC (rev 919)
@@ -63,7 +63,7 @@
 	    ${dc.get('dc:title', '???')}
 	    <a href="javascript:$('#full_${resultnum}').toggle(); void(0);">details</a>
 	    <p py:if="dct.get('8569')" style="margin: 8px 0; font-size: 90%; color: darkred;">
-	      Electronic resource. <a href="${dct.get('856u')}">view</a>
+	      Electronic resource. <a href="${callhook('marcxml_to_url', res)}">view</a>
 	    </p>
 	  </td>
 	  <td py:for="k in dc_keys[1:]">${dc.get(k) or '&mdash;'}</td>

Modified: servres/trunk/conifer/templates/master.xhtml
===================================================================
--- servres/trunk/conifer/templates/master.xhtml	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/templates/master.xhtml	2010-07-15 00:55:37 UTC (rev 919)
@@ -21,9 +21,6 @@
     -->
     <script type="text/javascript" src="${ROOT}/static/jquery/js/jquery.js"/>
     <script type="text/javascript" src="${ROOT}/static/common.js"/>
-    <!--
-    <script type="text/javascript" src="${ROOT}/static/jquery/js/jquery-1.3.2.min.js"/>
-    -->
     <script type="text/javascript" src="${ROOT}/static/jquery/js/jquery-ui-1.7.1.custom.min.js"/>
     <script type="text/javascript" src="${ROOT}/static/jquery/js/jquery.tablesorter.min.js"/>
     ${select('*[local-name()!="title"]')}

Modified: servres/trunk/conifer/templates/search_results.xhtml
===================================================================
--- servres/trunk/conifer/templates/search_results.xhtml	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/templates/search_results.xhtml	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,7 +1,7 @@
 <?python
 title = _('Search Results')
 instructors = instructor_list
-courses = course_list
+sites = site_list
 ?>
 <html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:xi="http://www.w3.org/2001/XInclude"
@@ -24,48 +24,48 @@
 
     <!-- not sure if this is the best way to do this -->
     <!-- 
-        probably need a simple css option to hide instructors and course info
+        probably need a simple css option to hide instructors and site info
     -->
-    <table py:if="instructors or courses" width="100%">
-        <tr>
+    <table py:if="instructors or sites" width="100%">
+      <tr>
         <!-- instructors -->
         <td py:if="instructors" valign="top" class="topbox">
-        <table class="topheading">
-        <tr>
-        <!--
-        <th>Last Name</th><th>First Name</th>
-        -->
-        <th>Instructors</th>
-        </tr>
-        <tr py:for="instructor in instructors">
-            <td> ${Markup(instructor.instr_name_hl(norm_query))},
-            ${instructor.user.first_name}</td>
-        </tr>
-        <tr py:if="instr_len > count">
-        <!-- will tap into open list here -->
-        <td>(${instr_len - count} more...)</td>
-        </tr>
-        </table>
+	  <table class="topheading">
+	    <tr>
+	      <!--
+		  <th>Last Name</th><th>First Name</th>
+	      -->
+	      <th>Instructors</th>
+	    </tr>
+	    <tr py:for="instructor in instructors">
+	      <td> ${Markup(instructor.instr_name_hl(norm_query))},
+	      ${instructor.user.first_name}</td>
+	    </tr>
+	    <tr py:if="instr_len > count">
+	      <!-- will tap into open list here -->
+	      <td>(${instr_len - count} more...)</td>
+	    </tr>
+	  </table>
         </td>
-
-        <!-- courses -->
-        <td py:if="courses" valign="top" class="topbox">
-        <table class="topheading">
-	  <tr>
-	    <th align="left">Course</th>
-	  </tr>
-	  <tr py:for="course in courses">
-	    <!-- will highlight this, probably pull in dept info -->
-	    <td><a href="../course/${course.id}/">${course.title}</a></td>
-	  </tr>
-        <tr py:if="course_len > count">
-        <td></td>
-        <!-- will tap into open list here -->
-        <td>(${course_len - count} more...)</td>
-        </tr>
-        </table>
+	
+        <!-- sites -->
+        <td py:if="sites" valign="top" class="topbox">
+	  <table class="topheading">
+	    <tr>
+	      <th align="left">Site</th>
+	    </tr>
+	    <tr py:for="site in sites">
+	      <!-- will highlight this, probably pull in dept info -->
+	      <td><a href="../site/${site.id}/">${site}</a></td>
+	    </tr>
+	    <tr py:if="site_len > count">
+	      <td></td>
+	      <!-- will tap into open list here -->
+	      <td>(${site_len - count} more...)</td>
+	    </tr>
+	  </table>
         </td>
-        </tr>
+      </tr>
     </table>
   
     <tr py:if="results_len > 0" py:def="pageheader()">
@@ -75,7 +75,7 @@
     <span py:def="pagerow(item)">
         <td>${Markup(item.author_hl(norm_query))}</td>
         <td><a href="${item.item_url('meta')}">${Markup(item.title_hl(norm_query))}</a></td>
-	<td><a href="${item.site.site_url()}">${item.site.title}</a></td>
+	<td><a href="${item.site.site_url()}">${item.site}</a></td>
 	<td><span py:if="item.item_type=='PHYS'">${item.smallint()} &bull; ${item.barcode()}</span></td>
     </span>
     ${pagetable(paginator, count, pagerow, pageheader, query=query_string)}

Modified: servres/trunk/conifer/templates/site_detail.xhtml
===================================================================
--- servres/trunk/conifer/templates/site_detail.xhtml	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/templates/site_detail.xhtml	2010-07-15 00:55:37 UTC (rev 919)
@@ -15,21 +15,20 @@
   </head>
   <body>
     ${site_banner(site)}
-    <p py:if="not item_tree">
-      There are no items associated with this site yet.
-    </p>
     <div id="sidepanel">
       <div py:if="is_editor" id="edit_site" class="little_action_panel">
-	<a href="${site.site_url()}edit/">Edit site details</a>
+	<a href="${site.site_url()}edit/">Configure site</a>
       </div>
       <div py:if="is_joinable">
 	<a href="${site.site_url()}join/">Join this site</a>
       </div>
-      <div id="showtree_panel" class="little_action_panel">
-	<a href="javascript:doToggleItemTree();">Show/hide tree</a>
+      <div py:if="is_editor" id="feeds" class="little_action_panel">
+	<a href="${site.site_url()}feeds/">Feeds</a>
       </div>
-      <div py:if="is_editor">${item_resequence_panel()}</div>
     </div>
+    <p py:if="not item_tree">
+      There are no items associated with this site yet.
+    </p>
     <div id="treepanel">
       ${show_tree(item_tree, edit=is_editor)}
     </div>

Modified: servres/trunk/conifer/templates/tabbar.xhtml
===================================================================
--- servres/trunk/conifer/templates/tabbar.xhtml	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/templates/tabbar.xhtml	2010-07-15 00:55:37 UTC (rev 919)
@@ -7,13 +7,12 @@
     use one for now
 -->
 <ul id="tabbar">
-  <!-- <li><a href="${ROOT}/">Home</a></li> -->
+  <!-- !<li><a href="${ROOT}/">Home</a></li> -->
   <li><a href="${ROOT}/browse/">Browse</a></li>
   <li class="active"><a href="${ROOT}/site/">My Reserves</a></li>
   <div py:strip="True"
        py:if="request.user.is_staff">
     <li><a href="${ROOT}/admin/">Admin Options</a></li>
-    <li><a href="${ROOT}/phys/">Physical Items</a></li>
   </div>
 </ul>
 </html>

Modified: servres/trunk/conifer/templates/tabbar_anonymous.xhtml
===================================================================
--- servres/trunk/conifer/templates/tabbar_anonymous.xhtml	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/templates/tabbar_anonymous.xhtml	2010-07-15 00:55:37 UTC (rev 919)
@@ -7,7 +7,7 @@
     use one for now
 -->
 <ul id="tabbar">
-  <li><a href="${ROOT}/">Home</a></li>
+  <!-- !<li><a href="${ROOT}/">Home</a></li> -->
   <li><a href="${ROOT}/browse/">Browse</a></li>
 </ul>
 </html>

Modified: servres/trunk/conifer/templates/zsearch.xhtml
===================================================================
--- servres/trunk/conifer/templates/zsearch.xhtml	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/templates/zsearch.xhtml	2010-07-15 00:55:37 UTC (rev 919)
@@ -12,8 +12,8 @@
 <body>
     <h1>${title}</h1> 
     <form py:if="targets" action="." method="POST">
-    <select name="target" py:for="target in targets">
-            <option>${target.name}</option>
+    <select name="target">
+            <option  py:for="target in targets">${target.name}</option>
     </select>
     Title: <input id="ztitle" name="ztitle" maxlength="100" size="100" type="text"/>
     <p><input type="submit" value="Search target"/></p>

Modified: servres/trunk/conifer/urls.py
===================================================================
--- servres/trunk/conifer/urls.py	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/conifer/urls.py	2010-07-15 00:55:37 UTC (rev 919)
@@ -3,8 +3,8 @@
 import django
 import os
 
-# I know it's not recommended, but this lets us mount django-admin's
-# media through Django, through mod_python.
+# I know it's not recommended, but this lets us serve django-admin's
+# media through Django.
 
 ADMIN_MEDIA_ROOT = os.path.join(os.path.dirname(django.__file__), 'contrib/admin/media/')
 

Deleted: servres/trunk/rfc_sql/reserves.sql
===================================================================
--- servres/trunk/rfc_sql/reserves.sql	2010-07-15 00:55:26 UTC (rev 918)
+++ servres/trunk/rfc_sql/reserves.sql	2010-07-15 00:55:37 UTC (rev 919)
@@ -1,151 +0,0 @@
-
-
-DROP SCHEMA reserves CASCADE;
-
-BEGIN;
-
-CREATE SCHEMA reserves;
-
-
-CREATE TABLE reserves.course (
-    id              SERIAL    PRIMARY KEY,
-    name            TEXT    NOT NULL,
-    code            TEXT    NOT NULL,
-    term            INTEGER    REFERENCES config.reserves_term (id) DEFERABLE INITIALLY DEFERRED ON DELETE SET NULL,      
-    location        INTEGER    REFERENCES asset.copy_location (id) DEFERABLE INITIALLY DEFERRED ON DELETE SET NULL,    
-    default_loan    INTEGER    REFERENCES config.circ_modifer (id) DEFERABLE INITIALLY DEFERRED ON DELETE SET NULL,    
-    owner           INTEGER    NOT NULL    REFERENCES actor.usr (id) DEFERABLE INITIALLY DEFERRED,
-    note            TEXT    DEFAULT 'na',
-    archive         BOOLEAN    NOT NULL    DEFAULT FALSE 
-);
-
-CREATE INDEX reserves_course_name_idx ON reserves.course (name);
-CREATE INDEX reserves_course_code_idx ON reserves.course (code);
-CREATE INDEX reserves_course_owner_idx ON reserves.course (owner);
-CREATE INDEX reserves_course_owner_name_idx ON reserves.course (owner_name);
-CREATE INDEX reserves_course_term_idx ON reserves.course (term);
-CREATE INDEX reserves_course_archive_idx ON reserves.course (archive);
-
-
-CREATE TABLE reserves.course_container (
-    id         SERIAL    PRIMARY KEY,
-    name       TEXT    NOT NULL,
-    parent     INTEGER    REFERENCES reserves.course_container (id) DEFERABLE INITIALLY DEFERRED ON DELETE SET NULL,
-    course_id  INTEGER    REFERENCES reserves.course (id) DEFERABLE INITIALLY DEFERRED ON DELETE SET NULL,
-    item_id    INTEGER    REFERENCES reserves.item (id) DEFERABLE INITIALLY DEFERRED ON DELETE SET NULL,
-    note       TEXT    DEFAULT 'na'
-);
-
-
-CREATE TABLE reserves.item (
--- almost none of the fields in this table check back against evergreen because of
--- the necessity of accommodating none cataloged resources (ie a website)
--- one way around this might be to create a stub cataloging record for everything,
--- including websites
- 
-    id                      SERIAL    PRIMARY KEY,          
-    cat_id                  INTEGER    NOT NULL DEFAULT 0,
-    title                   TEXT    NOT NULL,
-    author                  TEXT    NOT NULL,
-    call_number             TEXT    NOT NULL    DEFAULT 'na', 
-    url                     TEXT    NOT NULL    DEFAULT 'na',
-    original_circ_modifier  INTEGER    REFERENCES config.circ_modifer (id) DEFERABLE INITIALLY DEFERRED ON DELETE SET NULL,
-    reserves_circ_modifier  INTEGER    REFERENCES config.circ_modifer (id) DEFERABLE INITIALLY DEFERRED ON DELETE SET NULL,
-    original_location       INTEGER    REFERENCES asset.copy_location (id) DEFERABLE INITIALLY DEFERRED ON DELETE SET NULL,
-    reserves_location       INTEGER    REFERENCES asset.copy_location (id) DEFERABLE INITIALLY DEFERRED ON DELETE SET NULL,
-    copyright_notice        TEXT    NOT NULL    DEFAULT 'na',
-    copyright_fee           NUMERIC(6,2)    DEFAULT 000000.00,
-    media_type              INTEGER    REFERENCES config.reserves_media_types (id)    DEFERABLE INITIALLY DEFERRED,
-    note                    TEXT    DEFAULT 'na',
-    archive                 BOOLEAN    NOT NULL    DEFAULT FALSE
-);
-CREATE INDEX reserves_item_title ON reserves.item (title);
-CREATE INDEX reserves_item_author ON reserves.item (author);
-CREATE INDEX reserves_item_archive ON reserves.item (archive);
-
-
-CREATE TABLE reserves.course_members_map (
-    id              SERIAL    PRIMARY KEY,
-    course_id       INTEGER    REFERENCES reserves.course (id) DEFERABLE INITIALLY DEFERRED ON DELETE SET NULL,
-    member_id       INTEGER    REFERENCES actor.usr (id) DEFERABLE INITIALLY DEFERRED ON DELETE SET NULL,
-    member_access   INTEGER    REFERENCES permission.grp_tree (id) DEFERABLE INITIALLY DEFERRED ON DELETE SET NULL,
-    receive_email   BOOLEAN    DEFAULT TRUE
-);   
-
-
-CREATE TABLE reserves.event_log (
-/*
-It was originally intended for this table to be populated via triggers
-A better way is the action_trigger system built into evergreen as it
-allows administrators to add events for logging at run time
-*/
-    id            SERIAL    PRIMARY KEY,
-    entity_id     INTEGER    REFERENCES reserves.item (id)    DEFERABLE INITIALLY DEFERRED,
-    entity_type   INTEGER    REFERENCES config.reserves_log_types (id)    DEFERABLE INITIALLY DEFERRED,
-    action        INTEGER    REFERENCES config.reserves_actions (id) DEFERABLE INITIALLY DEFERRED ON DELETE SET NULL,
-    time_stamp    TIMESTAMP WITH TIME ZONE     NOT NULL    DEFAULT NOW()
-);
-CREATE INDEX reserves_stat_log_action_idx ON reserves.stat_log (action);
-CREATE INDEX reserves_stat_log_time_stamp_idx ON reserves.stat_log (time_stamp);
-
-
-CREATE TABLE config.reserves (
-    id                              SERIAL    PRIMARY KEY,
-    ou                              INTEGER     REFERENCES actor.ou (id) DEFERABLE INITIALLY DEFERRED ON DELETE SET NULL,
-    default_transit_status          INTEGER     REFERENCES config.copy_status (id) DEFERABLE INITIALLY DEFERRED ON DELETE SET NULL,
-    default_copyright               TEXT    NOT NULL    DEFAULT 'na',
-    default_copyright_fee           NUMERIC(6,2)    DEFAULT 000000.00,
-    default_original_circ_modifier  INTEGER    REFERENCES config.circ_modifer (id) DEFERABLE INITIALLY DEFERRED ON DELETE SET NULL,
-    default_original_location       INTEGER    REFERENCES asset.copy_location (id) DEFERABLE INITIALLY DEFERRED ON DELETE SET NULL,
-    reserves_email                  TEXT    NOT NULL    DEFAULT 'na'
-);
-
-
-/*
-Mostly likely:
-config.reserves_terms,
-config.reserves_actions
-config.reserves_log_type
-
-will be depricated.  They won't be necessary with the action_trigger logic
-
-*/
-
-CREATE TABLE config.reserves_terms (
-    id              SERIAL PRIMARY KEY,
-    ou              INTEGER    REFERENCES actor.ou (id) DEFERABLE INITIALLY DEFERRED,
-    academic_year   DATE    NOT NULL,
-    term            TEXT    NOT NULL
-);
-
-
-CREATE TABLE config.reserves_actions (
---trigger event logic could replace this table
-
-    id        SERIAL    PRIMARY KEY,
-    action    TEXT    NOT NULL
-);  
-
-CREATE TABLE config.reserves_log_types ( 
-    id      SERIAL   PRIMARY KEY,
-    type    TEXT    NOT NULL
-); 
-
-INSERT INTO config.reserves_log_types (type) VALUES ('item');
-INSERT INTO config.reserves_log_types (type) VALUES ('course');
-INSERT INTO config.reserves_log_types (type) VALUES ('container');
-
-
-CREATE TABLE config.reserves_media_types ( 
-    id      SERIAL   PRIMARY KEY,
-    type    TEXT    NOT NULL
-); 
-
-INSERT INTO config.reserves_media_types (type) VALUES ('Library book');
-INSERT INTO config.reserves_media_types (type) VALUES ('Professor copy');
-INSERT INTO config.reserves_media_types (type) VALUES ('Library online resource');
-INSERT INTO config.reserves_media_types (type) VALUES ('3rd party online resource');
-
-COMMIT;
-
-



More information about the open-ils-commits mailing list