+++ /dev/null
-<?xml version='1.0' encoding='UTF-8'?>\r
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"\r
- xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:id="adminmisc">\r
- <info>\r
- \r
- <title>Server Operations and Maintenance</title>\r
- <indexterm><primary>receipt template editor</primary></indexterm>\r
- <abstract>\r
- <para>This chapter deals with basic server operations such as starting and stopping <application>Evergreen</application> as well wall \r
- security, backing up and troubleshooting <application>Evergreen</application>.</para>\r
- </abstract>\r
- </info> \r
- <section xml:id="startingopensrf">\r
- <title>Starting, Stopping and Restarting</title>\r
- <para>Occasionally, you may need to restart <application>Evergreen</application>. It is imperative that you understand the basic \r
- commands to stop and start the <application>Evergreen</application> server. You can start and stop <application>Evergreen</application> from the command line of \r
- the server using the <command>osrf_ctl.sh</command> script located in the \r
- <filename class="directory">openils/bin</filename> directory.</para> \r
- <note><para><command>The osrf_ctl.sh</command> command must be run as the <systemitem class="username">opensrf</systemitem> user.</para></note>\r
- <para>To view help on <command>osrf_ctl.sh</command> and get all of its options, run:</para>\r
- <screen><userinput>osrf_ctl.sh -h</userinput></screen>\r
- <para>To start Evergreen, run:</para>\r
- <screen><userinput>osrf_ctl.sh -l -a start_all</userinput></screen>\r
- <para>The <option>-l</option> flag is used to indicate that Evergreen is configured to use <systemitem class="domainname">localhost</systemitem> as \r
- the host. If you have configured <filename>opensrf.xml</filename> to use your real hostname, do not use the <option>-l</option> flag. The <option>-a</option> \r
- option is required and indicates the <emphasis>action</emphasis> of the command. In this case \r
- <option>start_all</option>. \r
- </para> \r
- <note>\r
- <para>If you receive the error message: <errortext>osrf_ctl.sh: command not found</errortext>, then your environment variable \r
- <varname>PATH</varname><indexterm><primary>environment variable</primary><secondary>PATH</secondary></indexterm> does not include the \r
- <filename class="directory">/openils/bin</filename> directory. You can set it using the following command:</para>\r
- <screen><userinput>export <varname>PATH</varname>=$PATH:<filename class="directory">/openils/bin</filename></userinput></screen>\r
- <para>If you receive the error message <errortext>Can't locate OpenSRF/System.pm in @INC … BEGIN \r
- failed–compilation aborted</errortext>, then your environment variable <varname>PERL5LIB</varname><indexterm><primary>environment \r
- variable</primary><secondary>PERL5LIB</secondary></indexterm> does not \r
- include the <filename class="directory">/openils/lib/perl5</filename> directory. You can set it \r
- using the following command:</para>\r
- <screen><userinput>export <varname>PERL5LIB</varname>=$PERL5LIB:<filename class="directory">/openils/lib/perl5</filename></userinput></screen>\r
- </note> \r
- <para>It is also possible to start a specific service. For example:</para>\r
- <screen><userinput>osrf_ctl.sh -l -a start_router</userinput></screen>\r
- <para>will only start the <systemitem class="service">router</systemitem> service.</para>\r
- <caution>\r
- <para>If you decide to start each service individually, you need to start them in a specific order \r
- for Evergreen to start correctly. Run the commands in this exact order:</para>\r
- <screen><userinput>osrf_ctl.sh -l -a start_router</userinput></screen>\r
- <screen><userinput>osrf_ctl.sh -l -a start_perl</userinput></screen>\r
- <screen><userinput>osrf_ctl.sh -l -a start_c</userinput></screen>\r
- </caution> \r
- <para>After starting or restarting Evergreen, it is also necessary to restart the <systemitem class="service">Apache web server</systemitem>\r
- <indexterm><primary>web server</primary><secondary>Apache</secondary></indexterm> for the OPAC to work correctly.</para> \r
- <para>To stop <application>Evergreen</application>, run:</para>\r
- <screen><userinput>osrf_ctl.sh -l -a stop_all</userinput></screen>\r
- <para>As with starting, you can choose to stop services individually.</para>\r
- <para>To restart <application>Evergreen</application>, run:</para>\r
- <screen><userinput>osrf_ctl.sh -l -a restart_all</userinput></screen>\r
- </section>\r
- <section xml:id="backingup">\r
- <title>Backing Up</title>\r
- <indexterm><primary>databases</primary><secondary>backing up</secondary></indexterm>\r
- \r
- <para>Backing up your system files and data is a critical task for server and database administrators. \r
- Having a strategy for backing up and recovery could be the difference between a minor annoyance for users and\r
- a complete catastrophe.</para> \r
- <simplesect>\r
- <title>Backing up the <application>Evergreen</application> Database</title><indexterm><primary>databases</primary></indexterm>\r
- <para>Most of the critical data for an <application>Evergreen</application> system – patrons, bibliographic records, holdings, \r
- transactions, bills – is stored in the <application>PostgreSQL</application><indexterm><primary>databases</primary>\r
- <secondary>PostgreSQL</secondary></indexterm> database. You can therefore use normal \r
- <application>PostgreSQL</application> backup procedures to backup this data. For example, the simplest method of backing up the Evergreen\r
- database is to use the <command>pg_dump</command> command to create a live backup of the database without having to \r
- interrupt any Evergreen services. Here is an example pg_dump command which will dump a local Evergreen database into a the file <filename>evergreen_db.backup</filename>:</para>\r
- <screen><userinput>pg_dump -U evergreen -h localhost -f evergreen_db.backup evergreen</userinput></screen>\r
- <para>To restore the backed up database into a new database, create a new database using the \r
- template0 database template and the UTF8 encoding, and run the <command>psql</command> command, specifying the new \r
- database as your target:</para>\r
- <screen><userinput>createdb -T template0 -E UTF8 -U evergreen -h localhost new_evergreen</userinput></screen>\r
- <screen><userinput>psql -U evergreen -h localhost -f evergreen_db.backup new_evergreen</userinput></screen>\r
- <note>\r
- <para>This method of backup is only suitable for small Evergreen instances. Larger sites \r
- should consider implementing continuous archiving (also known as <quote>log shipping</quote>) to provide \r
- more granular backups with lower system overhead. More information on backing up <application>PostgreSQL</application> \r
- databases can be found in the official <link xl:href="http://www.postgresql.org/docs/"><application>PostgreSQL</application> documentation</link>.</para>\r
- </note>\r
- </simplesect>\r
- <simplesect>\r
- <title>Backing up Evergreen Files</title>\r
- <indexterm><primary>directories</primary><secondary>backing up</secondary></indexterm>\r
- <para>When you deploy Evergreen, you will probably customize many aspects of your system including \r
- the system configuration files, <application>Apache</application> configuration files, OPAC and Staff Client. In order to \r
- protect your investment of time, you should carefully consider the best approach to backing up \r
- files.</para>\r
- <para>There are a number of ways of tackling this problem. You could create a script that regularly \r
- creates a time-stamped tarball of all of these files and copies it to a remote server - but that \r
- would build up over time to hundreds of files. You could use <link xl:href="http://www.samba.org/rsync/"><application>rsync</application></link>\r
- <indexterm><primary>rsync</primary></indexterm> to ensure that the files of \r
- interest are regularly updated on a remote server - but then you would lose track of the changes to \r
- the files, should you make a change that introduces a problem down the road.</para>\r
- <para>Perhaps one of the best options is to use a version control system like <link xl:href="http://bazaar.canonical.com">\r
- <application>Bazaar</application></link><indexterm><primary>Version Control System</primary><secondary>Subversion</secondary></indexterm>, \r
- <link xl:href="http://git-scm.com/"><application>git</application></link><indexterm><primary>Version Control System</primary><secondary>git</secondary></indexterm> \r
- or <link xl:href="http://subversion.apache.org/"><application>Subversion</application></link><indexterm><primary>Version Control System</primary>\r
- <secondary>Subversion</secondary></indexterm> to regularly push updates of the files you care about to a repository on a \r
- remote server. This gives you the advantage of quickly being able to run through the history of the \r
- changes you made, with a commenting system that reminds you why each change was made, combined with \r
- remote storage of the pertinent files in case of disaster on site. In addition, your team can create \r
- local copies of the repository and test their own changes in isolation from the production \r
- system. Using a version control system also helps to recover system customizations after an \r
- upgrade.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Full System Backup</title>\r
- <para>A full system backup archives every file on the file system. Some basic methods require you \r
- to shut down most system processes; other methods can use mirrored RAID<indexterm><primary>RAID</primary></indexterm> setups or \r
- SAN<indexterm><primary>SAN</primary></indexterm> storage to \r
- take <quote>snapshot</quote> backups of your full system while the system continues to run. The subject of how \r
- to implement full system backups is beyond the scope of this documentation.</para>\r
- </simplesect>\r
- </section>\r
- <section xml:id="security">\r
- <title>Security</title>\r
- <indexterm><primary>security</primary></indexterm>\r
- <para>As with an ILS and resource accessible from the world wide web careful consideration needs to be \r
- given to the security of your <application>Evergreen</application> servers and database. While it is impossible to cover all aspects \r
- of security, it is important to take several precautions when setting up production <application>Evergreen</application> site.</para>\r
- <orderedlist>\r
- <listitem>\r
- <para>Change the Evergreen <systemitem class="username">admin</systemitem> password and keep it secure. The \r
- default admin password is known by anyone who has installed <application>Evergreen</application>. It is not a secret \r
- and needs to be changed by the Administrator. It should also only be shared by those who \r
- need the highest level of access to your system.</para>\r
- </listitem>\r
- <listitem>\r
- <para>Create strong passwords using a combination of numerical and alphabetical characters \r
- for all of the Administrative passwords including the <systemitem class="username">postgres</systemitem> and \r
- <systemitem class="username">opensrf</systemitem> users</para> \r
- </listitem>\r
- <listitem>\r
- <para>Open ports in the firewall<indexterm><primary>firewall</primary></indexterm> with caution - It is only necessary to open ports \r
- <systemitem class="protocol">80</systemitem> and <systemitem class="protocol">443</systemitem>\r
- for <systemitem class="protocol">TCP</systemitem> connections to the Evergreen server from the OPAC and the staff client. It is critical for administrators to \r
- understand the concepts of network security and take precautions to minimize vulnerabilities. \r
- </para>\r
- </listitem>\r
- <listitem>\r
- <para>Use permissions <indexterm><primary>permissions</primary></indexterm> and permission groups wisely - it is important to understand the \r
- purpose of the permissions and to only give users the level of access that they require.\r
- </para> \r
- </listitem>\r
- </orderedlist> \r
- </section>\r
- <section xml:id="logfiles">\r
- <title>Managing Log Files</title>\r
- <indexterm><primary>logs</primary><secondary>managing</secondary></indexterm>\r
- <para><application>Evergreen</application> comes with a sophisticated logging system, but it is important to manage the <application>OpenSRF</application> \r
- and <application>Evergreen</application> logs. This section will provide a couple of log management techniques and tools.</para> \r
- <simplesect>\r
- <title>Using the <systemitem class="service">logrotate</systemitem> Utility to Manage Log Size</title> \r
- <indexterm><primary>logs</primary><secondary>Log Rotate</secondary></indexterm>\r
- <para>Fortunately, this is not a new problem for <systemitem class="osname">Unix</systemitem> administrators, and there are a number of ways of keeping your logs under control. \r
- On <systemitem class="osname">Debian</systemitem> and <systemitem class="osname">Ubuntu</systemitem>, for example, \r
- the <systemitem class="service">logrotate</systemitem> utility controls when old log files are compressed and a new log file is started. \r
- <systemitem class="service">logrotate</systemitem> runs once a day and checks all log files that it knows about to see if a \r
- threshold of time or size has been reached and rotates the log files if a threshold condition has been met.</para>\r
- <para>To teach <systemitem class="service">logrotate</systemitem> to rotate Evergreen logs on a weekly basis, or if they are > 50MB in size, \r
- create a new file <filename>/etc/logrotate.d/evergreen</filename> with the following contents: </para>\r
-<programlisting>\r
-compress\r
-/openils/var/log/*.log {\r
-# keep the last 4 archived log files along with the current log file\r
- # log log.1.gz log.2.gz log.3.gz log.4.gz\r
- # and delete the oldest log file (what would have been log.5.gz)\r
-rotate 5\r
-# if the log file is > 50MB in size, rotate it immediately\r
-size 50M\r
- # for those logs that don't grow fast, rotate them weekly anyway\r
- weekly\r
-}\r
-</programlisting>\r
- </simplesect>\r
- <simplesect>\r
- <title>Changing Logging Level for <application>Evergreen</application></title>\r
- <indexterm><primary>logs</primary><secondary>logging levels</secondary></indexterm>\r
- <para>Change the Log Levels in your config files. Changing the level of logging will help \r
- narrow down errors.</para> \r
- <tip>\r
- <para>A high logging level is not wise to do in a production environment since it \r
- will produce vastly larger log files and thus reduce server performance.</para>\r
- </tip>\r
- <para>Change logging levels by editing the configuration file \r
- <filename>/openils/conf/opensrf_core.xml</filename><indexterm><primary>configuration files</primary><secondary>opensrf_core.xml</secondary></indexterm></para>\r
- <para>you will want to search for lines containing <loglevel>.</para>\r
- <para> the default setting for loglevel is 3 which will log <emphasis>errors</emphasis>, \r
- <emphasis>warnings</emphasis> and <emphasis>information</emphasis>.</para>\r
- <para>The next level is 4 which is for debugging and provides additional information \r
- helpful for the debugging process.</para>\r
- <para>Thus, lines with:</para>\r
- <programlisting><loglevel>3</loglevel></programlisting>\r
- <para>Should be changed to:</para>\r
- <programlisting><loglevel>4</loglevel></programlisting>\r
- <para>to allow debugging level logging</para>\r
- <para>Other logging levels include <emphasis>0</emphasis> for no logging, \r
- <emphasis>1</emphasis> for logging errors and <emphasis>2</emphasis> for logging warnings \r
- and errors.</para>\r
- </simplesect>\r
- </section>\r
- <section xml:id="InstallingPostgreSQL">\r
- <title>Installing PostgreSQL from Source</title>\r
- <indexterm><primary>databases</primary><secondary>PostgreSQL</secondary></indexterm>\r
- <para>Some <systemitem class="osname">Linux</systemitem> distributions, such as <systemitem class="osname">Debian Etch (4.0)</systemitem>, do not offer PostgreSQL \r
- version 8.2 as an installable package. Before you continue, examine the software dependencies listed in <xref linkend="serversideinstall-software-dependencies"/> \r
- to ensure that your Linux distribution supports the required version of PostgreSQL.</para>\r
-\r
- <note>\r
- <para>Some <systemitem class="osname">Linux</systemitem> distributions, such as <systemitem class="osname">Debian Etch (4.0)</systemitem>, do not offer PostgreSQL \r
- version 8.2 as an installable package. Before you continue, examine the software dependencies listed in <xref linkend="serversideinstall-software-dependencies"/> \r
- to ensure that your Linux distribution supports the required version of PostgreSQL.</para>\r
- </note>\r
- \r
- <procedure>\r
- <step>\r
- <para>Install the application <application>stow</application> on your system if it is not already installed. Issue the following command as \r
- the <systemitem class="username">root</systemitem> user:</para>\r
-<screen>\r
-<userinput>apt-get install stow</userinput>\r
-</screen>\r
- </step>\r
- <step>\r
- <para>Download, compile, and install the latest release for PostgreSQL 8.2 (which was version <literal>8.2.12</literal> at the time of this writing). \r
- As the <systemitem class="username">root</systemitem> user, follow these steps:</para>\r
- \r
-<screen>\r
-<userinput>\r
-wget http://wwwmaster.postgresql.org/redir/198/h/source/v8.2.17/postgresql-8.2.17.tar.bz2\r
-tar xzf postgresql-8.2.17.tar.gz\r
-cd postgresql-8.2.17\r
-./configure --with-perl --enable-integer-datetimes --with-openssl --prefix=/usr/local/stow/pgsql\r
-make\r
-make install\r
-cd contrib\r
-make\r
-make install\r
-cd xml2\r
-make\r
-make install\r
-cd /usr/local/stow\r
-stow pgsql\r
-</userinput>\r
-</screen>\r
- \r
- </step>\r
- <step>\r
- <para>Create the new user <systemitem class="username">postgres</systemitem> to run the PostgreSQL processes. \r
- As the <systemitem class="username">root</systemitem> user, execute this command:</para>\r
- <screen><userinput>adduser postgres</userinput></screen>\r
- </step>\r
- <step>\r
- <para>Initialize the database directory and start up PostgreSQL. As the <systemitem class="username">root</systemitem> user, follow these steps:</para>\r
- \r
-<screen>\r
-<userinput>\r
-mkdir -p /usr/local/pgsql/data\r
-chown postgres /usr/local/pgsql/data\r
-su - postgres\r
-initdb -D /usr/local/pgsql/data -E UNICODE --locale=C\r
-pg_ctl -D /usr/local/pgsql/data -l /home/postgres/logfile start\r
-</userinput>\r
-</screen>\r
- <note>\r
- <para>If an error occurs during the final step above, review the path of the home directory for the \r
- <systemitem class="username">postgres</systemitem> user. It may be <literal>/var/lib/postresql</literal> instead of <literal>/home/postres</literal>.</para>\r
- </note>\r
- </step>\r
- </procedure>\r
- </section>\r
- <section xml:id="configuringPostgreSQL">\r
- <title>Configuring PostgreSQL</title>\r
- <indexterm><primary>databases</primary><secondary>PostgreSQL</secondary></indexterm>\r
- <para>The values of several PostreSQL configuration parameters may be changed for enhanced performance. The following table lists the default values \r
- and some suggested updates for several useful parameters:</para>\r
- <table>\r
- <title>Suggested configuration values</title>\r
- <tgroup align="left" cols="3" colsep="1" rowsep="1">\r
- <colspec colnum="1" colwidth="1.0*"/>\r
- <colspec colnum="2" colwidth="1.0*"/>\r
- <colspec colnum="3" colwidth="1.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Parameter</entry>\r
- <entry>Default</entry>\r
- <entry>Suggested</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- <row>\r
- <entry>default_statistics_target</entry>\r
- <entry>10</entry>\r
- <entry>100</entry>\r
- </row>\r
- <row>\r
- <entry>work_mem</entry>\r
- <entry>4Mb</entry>\r
- <entry>128Mb</entry>\r
- </row>\r
- <row>\r
- <entry>shared_buffers</entry>\r
- <entry>8Mb</entry>\r
- <entry>512Mb</entry>\r
- </row>\r
- <row>\r
- <entry>effective_cache_size</entry>\r
- <entry>128Mb</entry>\r
- <entry>4Gb</entry>\r
- </row>\r
- </tbody>\r
- </tgroup>\r
- </table>\r
- </section>\r
-</chapter>\r
+++ /dev/null
-<?xml version='1.0' encoding='UTF-8'?>\r
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"\r
- xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:id="upgradingevergreen-2.0">\r
- <info>\r
- <title>Upgrading Evergreen to 2.0</title>\r
- <abstract>\r
- <para>This Chapter will explain the step-by-step process of upgrading <application>Evergreen\r
- </application> to 2.0, including steps to upgrade <application>OpenSRF</application>. Before \r
- upgrading, it is important to carefully plan an upgrade strategy to minimize system downtime and \r
- service interruptions. All of the steps in this chapter are to be completed from the command line.</para>\r
- \r
- </abstract>\r
- </info> \r
- <para>Evergreen 2.0 has several software requirements:</para>\r
- <itemizedlist>\r
- <listitem>PostgreSQL: Version 8.4 is the minimum supported version of PostgreSQL. </listitem>\r
- <listitem>Linux: Evergreen 2.0 has been tested on Debian Squeeze (6.0) and Ubuntu Lucid Lynx (10.04). If you are running an older version of these distributions, \r
- you may want to upgrade befor installing Evergreen 2.0. For instructions on upgrading these distributions, visit the \r
- <ulink url="http://www.debian.org/releases/squeeze/">Debian</ulink> or <ulink url="https://help.ubuntu.com/community/LucidUpgrades">Ubuntu</ulink> websites.</listitem>\r
- </itemizedlist>\r
- <para>In the following instructions, you are asked to perform certain steps as either the <systemitem class="username">root</systemitem> or \r
- <systemitem class="username">opensrf</systemitem> user.</para>\r
- <itemizedlist>\r
- <listitem>Debian: To become the <systemitem class="username">root</systemitem> user, issue the <command>su</command> command and enter the password of the \r
- <systemitem class="username">root</systemitem> user.</listitem>\r
- <listitem>Ubuntu: To become the <systemitem class="username">root</systemitem> user, issue the <command>sudo su</command> command and enter the password of your current user.</listitem>\r
- </itemizedlist>\r
- <para>To switch from the <systemitem class="username">root</systemitem> user to a different user, issue the <command>su - [user]</command> command; for example, \r
- <command>su - opensrf</command>. Once you have become a non-root user, to become the <systemitem class="username">root</systemitem> user again simply issue the exit command.</para> \r
- <para>In the following instructions, <filename class='directory'>/path/to/OpenSRF/</filename> represents the path to the OpenSRF source directory.</para>\r
- <section xml:id="upgradingevergreen-stop_evergreen">\r
- <title>Backing Up Data</title>\r
- <procedure>\r
- <step>\r
- <para>As <systemitem class="username">root</systemitem>, stop the <application>Apache</application> \r
- web server<indexterm><primary>web server</primary><secondary>Apache</secondary></indexterm>.</para>\r
- </step>\r
- <step>\r
- <para>As the <systemitem class="username">opensrf</systemitem> user, stop all \r
- <application>Evergreen</application>\r
- and <application>OpenSRF</application> services:</para>\r
- <screen><userinput>osrf_ctl.sh -l -a stop_all</userinput></screen>\r
- </step>\r
- <step>\r
- <para>Back up of the <filename class='directory'>/openils</filename> \r
- directory.</para>\r
- </step>\r
- <step>\r
- <para><link linkend="backingup">Back up the <application>evergreen\r
- </application> database</link>.</para>\r
- </step>\r
- </procedure>\r
- </section>\r
- <section xml:id="upgradingevergreen-upgradingOpenSRF">\r
- <title>Upgrading OpenSRF to 2.0</title><indexterm><primary>OpenSRF</primary></indexterm>\r
- <procedure>\r
- <step>\r
- <para>As the <systemitem class="username">opensrf</systemitem> user, download and extract the source files for <application>OpenSRF</application> \r
- 2.0:</para>\r
-<screen><userinput>\r
-wget http://open-ils.org/downloads/opensrf-2.0.1.tar.gz\r
-tar xzf opensrf-2.0.1.tar.gz\r
-</userinput></screen>\r
- <para>A new directory opensrf-2.0.1 is created.</para>\r
- <note><para>For the latest edition of OpenSRF, check the Evergreen download page at \r
- <ulink url="http://www.open-ils.org/downloads.php" />.\r
- </para></note>\r
- </step>\r
- <step> \r
- <para>As the <systemitem class="username">root</systemitem> user, install the software prerequisites using the automatic \r
- prerequisite installer.</para> \r
-<screen><userinput>\r
-aptitude install make\r
-cd /home/opensrf/opensrf-2.0.1\r
-</userinput></screen> \r
- <para>Replace <option>[distribution]</option> below with the following value \r
- for your distribution:</para>\r
- <itemizedlist>\r
- <listitem>\r
- <para><option>debian-squeeze</option> for <systemitem class="osname">Debian Squeeze (6.0)</systemitem>\r
- <indexterm><primary>Linux</primary><secondary>Debian</secondary></indexterm></para>\r
- </listitem>\r
- <listitem>\r
- <para><option>fedora13</option> for <systemitem class="osname">Fedora 13</systemitem>\r
- <indexterm><primary>Linux</primary><secondary>Fedora</secondary></indexterm></para>\r
- </listitem> \r
- <listitem>\r
- <para><option>ubuntu-lucid</option> for <systemitem class="osname">Ubuntu Lucid Lynx\r
- (10.04)</systemitem><indexterm><primary>Linux</primary><secondary>Ubuntu</secondary></indexterm></para>\r
- </listitem>\r
- <listitem>\r
- <para><option>centos</option> for <systemitem class="osname">CentOS 5</systemitem>\r
- <indexterm><primary>Linux</primary><secondary>CentOS</secondary></indexterm></para>\r
- </listitem>\r
- <listitem>\r
- <para><option>rhel</option> for <systemitem class="osname">Red Hat Enterprise Linux 5</systemitem>\r
- <indexterm><primary>Linux</primary><secondary>Red Hat</secondary></indexterm></para>\r
- </listitem>\r
- </itemizedlist>\r
-<screen><userinput>\r
-make -f src/extras/Makefile.install [distribution]\r
-</userinput></screen>\r
- <para>This will install a number of packages required by OpenSRF on your system, \r
- including some Perl modules from <systemitem class="resource">CPAN</systemitem><indexterm><primary>Perl</primary><secondary>CPAN</secondary>\r
- </indexterm>. You can type <userinput>no</userinput> to the initial <systemitem class="resource">CPAN</systemitem> \r
- configuration prompt to allow it to automatically configure itself to download \r
- and install Perl modules from <systemitem class="resource">CPAN</systemitem>. The <systemitem class="resource">CPAN</systemitem> installer will ask you a number of \r
- times whether it should install prerequisite modules - type <userinput>yes</userinput>.</para>\r
- </step>\r
- <step> \r
- <para>As the <systemitem class="username">opensrf</systemitem> user, configure and compile OpenSRF:</para> \r
- <note>You can include the <option>–enable-python</option> and <option>–enable-java</option> configure options if \r
- you want to include support for Python<indexterm><primary>Python</primary></indexterm> and Java\r
- <indexterm><primary>Java</primary></indexterm>, respectively.</note>\r
-<screen><userinput>\r
-cd /home/opensrf/opensrf-2.0.1\r
-./configure --prefix=/openils --sysconfdir=/openils/conf\r
-make\r
-</userinput></screen> \r
- </step>\r
- <step> \r
- <para>As the <systemitem class="username">root</systemitem> user, return to your OpenSRF build directory and install \r
- OpenSRF:</para>\r
-<screen><userinput>\r
-cd /home/opensrf/opensrf-2.0.1\r
-make install\r
-</userinput></screen>\r
- </step>\r
- <step>\r
- <para>As the <systemitem class="username">root</systemitem> user, change the ownership of the installed files to the \r
- <systemitem class="username">opensrf</systemitem> user:</para>\r
- <screen><userinput>chown -R opensrf:opensrf /openils</userinput></screen>\r
- </step> \r
- <step>\r
- <para>Jot down the usernames/passwords of the two Jabber users created when OpenSRF was previously installed these users will correspond to \r
- entries in opensrf_core.xml. </para>\r
- </step>\r
- <step>\r
- <para>Important: Backup your current opensrf.xml and opensrf_core.xml configuration files.</para>\r
-<screen>\r
-<userinput>cp -p /openils/conf/opensrf.xml /openils/conf/opensrf.xml.backup</userinput>\r
-<userinput>cp -p /openils/conf/opensrf_core.xml /openils/conf/opensrf_core.xml.backup</userinput>\r
-</screen>\r
- </step>\r
- <step>\r
- <para>As the <systemitem class="username">opensrf</systemitem> user, copy the <filename>/openils/conf/opensrf_core.xml</filename> and \r
- <filename>/openils/conf/opensrf.xml</filename> configuration files from the example templates:</para>\r
-<screen>\r
-<userinput>cp /openils/conf/opensrf.xml.example /openils/conf/opensrf.xml</userinput>\r
-<userinput>cp /openils/conf/opensrf_core.xml.example /openils/conf/opensrf_core.xml</userinput>\r
-</screen>\r
- <para>Edit <filename>/openils/conf/opensrf_core.xml</filename> to change the Jabber usernames and passwords you jotted down earlier.</para> \r
- </step>\r
- <step>\r
- <para>As the <systemitem class="username">root</systemitem> user, Run the following command:</para>\r
-<screen>\r
-<userinput>ldconfig</userinput>\r
-</screen>\r
- </step>\r
- <step>\r
- <para>Restart and Test OpenSRF</para>\r
-<screen><userinput>\r
-osrf_ctl.sh -l -a start_all\r
-/openils/bin/srfsh\r
-srfsh# request opensrf.math add 2 2\r
-</userinput></screen>\r
- <para>You should see output such as:</para>\r
-<screen>\r
-Received Data: 4\r
-\r
-------------------------------------\r
-Request Completed Successfully\r
-Request Time in seconds: 0.007519\r
-------------------------------------\r
-\r
-srfsh#\r
-</screen> \r
- </step> \r
- <step> \r
- <para>If test completed successful restore your Evergreen configuration files:</para>\r
-<screen><userinput>\r
-cp /openils/conf/opensrf.xml.backup /openils/conf/opensrf.xml\r
-cp /openils/conf/opensrf_core.xml.backup /openils/conf/opensrf_core.xml\r
-</userinput></screen>\r
- \r
- <para>and move on to the next section to upgrade Evergreen. Otherwise, refer to the <link linkend="troubleshooting">troubleshooting</link> chapter \r
- of this documentation.</para> \r
- </step> \r
- </procedure> \r
- </section>\r
- <section xml:id="upgradingevergreen-upgrading_from_1.6_to_2.0">\r
- <title>Upgrade <application>Evergreen</application> from 1.6.1 to 2.0</title>\r
- <note>\r
- <para>PostgreSQL 8.4 is the minimum supported version of PostgreSQL.</para> \r
- <para>Evergreen 2.0 has been tested on Debian Squeeze (6.0) and Ubuntu Lucid (10.04). If you are runnung an older version of \r
- these distributions, you may want to upgrade befor installing Evergreen 2.0. For instructions on upgrading these distribuitions, visit the \r
- <ulink url="http://www.debian.org/releases/squeeze/">Debian</ulink> or <ulink url="https://help.ubuntu.com/community/LucidUpgrades">Ubuntu</ulink> websites.</para>\r
- </note>\r
- <procedure>\r
- <step>\r
- <para>As the <systemitem class="username">opensrf</systemitem> user, download and extract <application>Evergreen 2.0</application>\r
- </para>\r
-<screen><userinput>\r
-wget http://www.open-ils.org/downloads/Evergreen-ILS-2.0.9.tar.gz\r
-tar xzf Evergreen-ILS-2.0.9.tar.gz\r
-</userinput></screen>\r
- <note><para>For the latest edition of Evergreen 2.0, check the Evergreen download page at\r
- <ulink url="http://www.open-ils.org/downloads.php" /> and adjust upgrading instructions accordingly.</para></note>\r
- </step>\r
- <step>\r
- <para>As the <systemitem class="username">root</systemitem> user, install the prerequisites:</para> \r
- <screen><userinput>cd /home/opensrf/Evergreen-ILS-2.0.9</userinput></screen> \r
- <para>On the next command, replace <option>[distribution]</option> with one of \r
- these values for your distribution of Debian or Ubuntu:</para>\r
- <itemizedlist>\r
- \r
- <listitem>\r
- <para><option>debian-squeeze</option> for <systemitem class="osname">Debian Squeeze (6.0)</systemitem></para>\r
- </listitem>\r
- \r
- <listitem>\r
- <para><option>ubuntu-lucid</option> for <systemitem class="osname">Ubuntu Lucid Lynx \r
- (10.04)</systemitem></para>\r
- </listitem>\r
- </itemizedlist>\r
- <screen><userinput>make -f Open-ILS/src/extras/Makefile.install <option>[distribution]</option></userinput></screen>\r
- </step>\r
- <step>\r
- <para>As the <systemitem class="username">opensrf</systemitem> user, configure and compile \r
- <application>Evergreen</application>:</para>\r
- <screen><userinput>cd /home/opensrf/Evergreen-ILS-2.0.9</userinput></screen>\r
- <screen><userinput>./configure --prefix=/openils --sysconfdir=/openils/conf</userinput></screen>\r
- <screen><userinput>make</userinput></screen>\r
- </step>\r
- <step>\r
- <para>As the <systemitem class="username">root</systemitem> user, install \r
- <application>Evergreen</application>:</para>\r
- <screen><userinput>make STAFF_CLIENT_BUILD_ID=rel_2_0_9 install</userinput></screen>\r
- </step>\r
- <step>\r
- <para>As the <emphasis>root</emphasis> user, change all files to be owned by the \r
- <emphasis>opensrf</emphasis> user and group:</para>\r
- <screen><userinput>chown -R opensrf:opensrf /openils</userinput></screen>\r
- </step> \r
- <step>\r
- <para>As the <systemitem class="username">opensrf</systemitem> user, update server symlink in <filename class="directory">/openils/var/web/xul/</filename>:</para>\r
-<screen><userinput>\r
-cd /openils/var/web/xul/\r
-rm server\r
-ln -s rel_2_0_9/server\r
-</userinput></screen>\r
- </step>\r
- <step>\r
- <para>Change to the <application>Evergreen</application> installation \r
- directory:</para>\r
- <screen><userinput>cd /home/opensrf/Evergreen-ILS-2.0.9</userinput></screen>\r
- </step>\r
-\r
- <step>\r
- <para>Update the <database>evergreen</database> database:</para>\r
- <note><para>It is recommended that you <link linkend="backingup">back up your Evergreen database</link> in order to restore your data if anything goes wrong.</para></note>\r
- <note><para>The <filename>1.6.1-2.0-upgrade-db.sql</filename> upgrade script may take a long time (hours) to process \r
- on larger systems.</para></note>\r
-<screen>\r
-<userinput>\r
-psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.1-2.0-upgrade-db.sql evergreen\r
-psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/2.0.0-2.0.1-upgrade-db.sql evergreen\r
-psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/2.0.1-2.0.2-upgrade-db.sql evergreen\r
-psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/2.0.2-2.0.3-upgrade-db.sql evergreen\r
-psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/2.0.3-2.0.4-upgrade-db.sql evergreen\r
-psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/2.0.4-2.0.5-upgrade-db.sql evergreen\r
-psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/2.0.5-2.0.6-upgrade-db.sql evergreen\r
-psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/2.0.6-2.0.7-upgrade-db.sql evergreen\r
-psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/2.0.7-2.0.8-upgrade-db.sql evergreen\r
-psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/2.0.8-2.0.9-upgrade-db.sql evergreen\r
-\r
-</userinput>\r
-</screen> \r
- \r
- </step>\r
-<step>\r
- <para>Run the <filename>reingest-1.6-2.0.pl</filename> script to generate an sql script. Then use the sql file to reingest bib records into your \r
- <database>evergreen</database> database. This is required to make the new facet sidebar in OPAC search results work and to upgrade the keyword indexes to use \r
- the revised NACO normalization routine.</para>\r
- <note><para>If you are running a large Evergreen installation, it is recommend that you examine the script first. Reingesting a large number of bibliographic records \r
- may take several hours.</para></note>\r
-<screen><userinput>perl Open-ILS/src/sql/Pg/reingest-1.6-2.0.pl</userinput></screen>\r
-<screen><userinput>psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/reingest-1.6-2.0.sql evergreen</userinput></screen>\r
- </step>\r
- <step>\r
- <para>As the <systemitem class="username">opensrf</systemitem> user, \r
- copy <filename>/openils/conf/oils_web.xml.example</filename> to <filename>/openils/conf/oils_web.xml</filename>\r
- . (If upgrading from 1.6.1.x, <filename>oils_web.xml</filename> should already exist.)</para>\r
- <indexterm><primary>configuration files</primary><secondary>oils_web.xml</secondary></indexterm>\r
- <screen><userinput>cp /openils/conf/oils_web.xml.example /openils/conf/oils_web.xml</userinput></screen>\r
- </step>\r
- <step>\r
- <para>Update <filename>opensrf_core.xml</filename> and <filename>opensrf.xml</filename> by copying the new example files \r
- (<filename>/openils/conf/opensrf_core.xml.example</filename> and <filename>/openils/conf/opensrf.xml</filename>).</para>\r
- <indexterm><primary>configuration files</primary><secondary>opensrf.xml</secondary></indexterm>\r
- <screen><userinput>cp /openils/conf/opensrf_core.xml.example /openils/conf/opensrf_core.xml</userinput></screen>\r
- <indexterm><primary>configuration files</primary><secondary>opensrf_core.xml</secondary></indexterm>\r
- <screen><userinput>cp /openils/conf/opensrf.xml.example /openils/conf/opensrf.xml</userinput></screen>\r
- <caution><para>Copying these configuration files will remove any customizations you have made to them. Remember to redo your customizations after copying \r
- them.</para></caution>\r
- </step>\r
- <step>\r
- <para>Update <filename>opensrf.xml</filename> with the database connection info:</para>\r
-<screen><userinput>\r
-perl Open-ILS/src/support-scripts/eg_db_config.pl --update-config \\r
---service all --create-offline --user evergreen --password evergreen \ \r
---hostname localhost --port 5432 --database evergreen\r
-</userinput></screen>\r
- </step>\r
- <step>\r
- <para>Update /etc/apache2/startup.pl by copying the example from \r
- Open-ILS/examples/apache/startup.pl.</para><indexterm><primary>configuration files</primary><secondary>startup.pl</secondary></indexterm>\r
- </step>\r
- <step>\r
- <para>Update /etc/apache2/eg_vhost.conf by copying the example from \r
- Open-ILS/examples/apache/eg_vhost.conf.</para><indexterm><primary>configuration files</primary><secondary>eg_vhost.conf</secondary></indexterm>\r
- </step>\r
- <step>\r
- <para>Update /etc/apache2/sites-available/eg.conf by copying the example from Open-ILS/\r
- examples/apache/eg.conf.</para><indexterm><primary>configuration files</primary><secondary>eg.conf</secondary></indexterm>\r
- </step>\r
- <caution>\r
- <para>Copying these Apache configuration files will remove any customizations you have made to them. Remember to redo your customizations after copying \r
- them. For example, if you purchased an SSL certificate, you \r
- will need to edit <filename>eg.conf</filename> to point to the appropriate SSL certificate files.</para>\r
- <indexterm><primary>SSL</primary><secondary>certificates</secondary></indexterm>\r
- </caution> \r
- </procedure> \r
- </section>\r
- <section xml:id="testing_after_upgrade">\r
- <title>Restart Evergreen and Test</title>\r
- <procedure>\r
- <step>\r
- <para>As the <systemitem class="username">opensrf</systemitem> user, start all \r
- <application>Evergreen</application> and <application>OpenSRF</application> \r
- services:</para>\r
- <screen><userinput>osrf_ctl.sh -l -a start_all</userinput></screen>\r
- </step>\r
- <step>\r
- <para>As the <systemitem class="username">opensrf</systemitem> user, run <command>autogen</command> to refresh the static \r
- organizational data files:</para><indexterm><primary>autogen</primary></indexterm>\r
-<screen><userinput>\r
-cd /openils/bin\r
-./autogen.sh -c /openils/conf/opensrf_core.xml -u\r
-</userinput></screen>\r
- \r
- </step>\r
- <step>\r
- <para>Start <command>srfsh</command> and try logging in using your <application>Evergreen</application>\r
- username and password:</para>\r
-<screen>\r
-<userinput>/openils/bin/srfsh</userinput>\r
-<prompt>srfsh%</prompt> <userinput>login <option>username</option> <option>password</option></userinput>\r
-</screen> \r
- </step> \r
- <step>\r
- <para>Start the <application>Apache</application> web server.</para>\r
- </step>\r
- </procedure>\r
- <note>\r
- <para>If you encounter errors, refer to the <link linkend="troubleshooting">troubleshooting \r
- section</link> of this documentation for tips \r
- on finding solutions and seeking further assistance from the Evergreen community.</para> \r
- </note>\r
- </section>\r
-<section xml:id="upgrading_Postgresqlto9.0">\r
- <title>Upgrading PostgreSQL from 8.4 to 9.0</title>\r
- <simplesect>\r
- <title>Upgrading PostgreSQL on Debian Squeez</title>\r
- <procedure>\r
- <step>\r
- <para>Stop Evergreen and disconnect clients from database.</para>\r
- </step> \r
- <step>\r
- <para>Add the following line to <filename>/etc/apt/sources.list</filename>:</para> \r
-<programlisting>\r
-deb http://www.backports.org/debian squeeze-backports main contrib non-free\r
-</programlisting>\r
- </step>\r
- <step>\r
- <para>Update the sources list on your server.</para>\r
-<screen><userinput> \r
-apt-get update\r
-</userinput></screen>\r
- </step>\r
- <step>\r
- <para>Backup your databases</para>\r
-<screen><userinput> \r
-$ pg_dump [db connect args] [db name] > evergreen-backup.sql\r
-</userinput></screen>\r
- </step>\r
- <step>\r
- <para>Install PostgreSQL 9.0 as well as the client, contrib and plperl support packages.</para>\r
-<screen><userinput> \r
-apt-get -t squeeze-backports install postgresql-9.0 postgresql-client-9.0 postgresql-contrib-9.0 postgresql-plperl-9.0\r
-</userinput></screen>\r
- </step>\r
- <step>\r
- <para>Drop the empty 9.0 cluster.</para>\r
-<screen><userinput> \r
-pg_dropcluster --stop 9.0 main\r
-</userinput></screen>\r
- </step>\r
- <step>\r
- <para>Update the 8.4 cluster (with evergreen database) to 9.0</para>\r
-<screen><userinput> \r
-pg_upgradecluster 8.4 main\r
-</userinput></screen>\r
- </step>\r
- <step>\r
- <para>Test by logging into psql, checking the postgrSQL version and running a simple SELECT query.</para>\r
-<screen><userinput> \r
-psql -U evergreen \r
-evergreen=# select version();\r
-evergreen=# select count(*) from biblio.record_entry;\r
-</userinput></screen>\r
- </step>\r
- <step>\r
- <para>Restart Evergreen and Apache.</para>\r
- </step>\r
- <step>\r
- <para>Drop old 8.4 cluster (optional).</para>\r
-<screen><userinput> \r
-pg_dropcluster 8.4 main\r
-</userinput></screen>\r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Upgrading PostgreSQL on Ubuntu 10.04</title>\r
- <procedure>\r
- <step>\r
- <para>Stop Evergreen and disconnect clients from database.</para>\r
- </step> \r
- <step>\r
- <para>Add the backport repository to your repository sources list:</para> \r
-<screen><userinput>\r
-sudo add-apt-repository ppa:pitti/postgresql\r
-</userinput></screen>\r
- </step>\r
- <step>\r
- <para>Update the sources list on your server.</para>\r
-<screen><userinput> \r
-apt-get update\r
-</userinput></screen>\r
- </step>\r
- <step>\r
- <para>As the <systemitem class="username">postgres</systemitem> user, backup your PostgreSQL databases.</para>\r
-<screen><userinput><![CDATA[ \r
-pg_dumpall > data\r
-]]></userinput></screen>\r
- </step>\r
- <step>\r
- <para>As <systemitem class="username">root</systemitem>, remove PostgreSQL 8.4 and install 9.0.</para>\r
-<screen><userinput> \r
-aptitude purge postgresql-8.4\r
-aptitude install postgresql-9.0 postgresql-client-9.0 postgresql-contrib-9.0 postgresql-plperl-9.0\r
-</userinput></screen>\r
- </step>\r
- <step>\r
- <para>as the <systemitem class="username">postgres</systemitem> user, recreate empty evergreen databases with required language supports.</para>\r
-<screen><userinput>\r
-dropdb evergreen\r
-createdb -T template0 --lc-ctype=C --lc-collate=C -E UNICODE evergreen\r
-createlang plperl evergreen\r
-createlang plperlu evergreen\r
-createlang plpgsql evergreen\r
-psql -f /usr/share/postgresql/9.0/contrib/tablefunc.sql evergreen\r
-psql -f /usr/share/postgresql/9.0/contrib/tsearch2.sql evergreen\r
-psql -f /usr/share/postgresql/9.0/contrib/pgxml.sql evergreen\r
-</userinput></screen>\r
- </step>\r
- <step>\r
- <para>Update the 8.4 cluster (with evergreen database) to 9.0.</para>\r
-<screen><userinput> \r
-pg_upgradecluster 8.4 main\r
-</userinput></screen>\r
- </step>\r
- <step>\r
- <para>as the <systemitem class="username">postgres</systemitem> user, load data from backup into PostgreSQL 9.0.</para>\r
-<screen><userinput><![CDATA[ \r
-psql < data\r
-]]></userinput></screen>\r
- </step>\r
- <step>\r
- <para>Restart Evergreen and Apache.</para>\r
- </step>\r
- <step>\r
- <para>Test by logging into psql, checking the postgrSQL version and running a simple SELECT query.</para>\r
-<screen><userinput> \r
-psql -U evergreen \r
-evergreen=# select version();\r
-evergreen=# select count(*) from biblio.record_entry;\r
-</userinput></screen>\r
- </step>\r
- </procedure>\r
- </simplesect>\r
- </section>\r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"\r
- xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:id="acquisitions-module_admin_functions">\r
-<info>\r
- <title>Administration Functions in the Acquisitions Module</title>\r
- <abstract>The following documentation is intended for users who will be managing funds and providers, managing EDI accounts, and creating drop down menus for invoices and purchase orders. This \r
- documentation will describe the purpose of each menu item in the Acquisitions menu in the Admin module and will present instructions for using each item. Front line processes are documented in The \r
- Acquisitions Module. This document is intended for first time users of the Acquisitions module as well as those who are familiar with the module and need only a reference guide. The \r
- contents of this document are ordered such that one who is new to the Acquisitions module could read through this document and set up the administrative portion of Acquisitions in Evergreen.\r
- </abstract>\r
-</info>\r
-<section id="acq_admin_currency_types">\r
- <title>Currency Types</title>\r
- <simpara>Currency types can be created and applied to funds in the administrative module.\r
- When a fund is applied to a copy or line item for purchase, the item will be purchased in\r
- the currency associated with that fund.</simpara>\r
- <simplesect>\r
- <title>Create a currency type</title>\r
- <procedure>\r
- <step><simpara>To create a new currency type, click Admin → Server Administration → Acquisitions→ Currency types.</simpara></step>\r
- <step><simpara>Enter the currency code. No limits exist on the number of characters that can be entered in this field.</simpara></step>\r
- <step><simpara>Enter the name of the currency type in Currency Label field. No limits exist on the number of characters that can be entered in\r
- this field.</simpara></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Edit a currency type</title>\r
- <procedure>\r
- <step><simpara>To edit a currency type, click your cursor in the row that you want to edit. The row will turn blue.</simpara></step>\r
- <step><simpara>Double-click. The pop-up box will appear, and you can edit the fields.</simpara></step>\r
- <step><simpara>After making changes, click Save.</simpara></step>\r
- </procedure>\r
- <note><simpara>From the currency types interface, you can delete currencies that have never been applied to funds or used to make purchases.</simpara></note>\r
- </simplesect>\r
-</section>\r
-<section id="acq_admin_exchange_rates">\r
- <title>Exchange Rates</title>\r
- <simpara>Exchange rates define the rate of exchange between currencies. Evergreen will automatically calculate exchange rates for purchases.\r
- Evergreen assumes that the currency of the purchasing fund is identical to the currency of the provider, but it provides for two unique\r
- situations:\r
- If the currency of the fund that is used for the purchase is different from the currency of the provider as listed in the provider\r
- profile, then Evergreen will use the exchange rate to calculate the price of the item in the currency of the fund and debit the fund\r
- accordingly.\r
- When money is transferred between funds that use different currency types, Evergreen will automatically use the exchange rate to convert\r
- the money to the currency of the receiving fund. During such transfers, however, staff can override the automatic conversion by providing\r
- an explicit amount to credit to the receiving fund.</simpara>\r
- <simplesect>\r
- <title>Create an exchange rate</title>\r
- <procedure>\r
- <step><simpara>To create a new exchange rate, click Admin → Server Administration → Acquisitions → Exchange Rates.</simpara></step>\r
- <step><simpara>Click New Exchange Rate.</simpara></step>\r
- <step><simpara>Enter the From Currency from the drop down menu populated by the currency types.</simpara></step>\r
- <step><simpara>Enter the To Currency from the drop down menu populated by the currency types.</simpara></step>\r
- <step><simpara>Enter the exchange Ratio.</simpara></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Edit an Exchange Rate</title>\r
- <simpara>Edit an exchange rate just as you would edit a currency type.</simpara>\r
- </simplesect>\r
-</section>\r
-<section id="acq_admin_funding_sources">\r
- <title>Funding Sources</title>\r
- <simpara>Funding sources allow you to specify the sources that contribute monies to your fund(s). You can create as few or as many funding\r
- sources as you need.</simpara>\r
- <simplesect>\r
- <title>Create a funding source</title>\r
- <procedure>\r
- <step><simpara>To create a new funding source, click Admin → Server Administration → Acquisitions → Funding Source.</simpara></step>\r
- <step><simpara>Enter a funding source name. No limits exist on the number of characters that can be entered in this field.</simpara></step>\r
- <step><simpara>Select an owner from the drop down menu. The owner indicates the organizational unit(s) whose staff can use this funding source.\r
- This menu is populated with the shortnames that you created for your libraries in the organizational units tree (See\r
- Admin → Server Administration → Organizational Units).</simpara>\r
- <note><para>The rule of parental inheritance applies to this list. For example, if a system is made the owner of a funding source,\r
- then users with appropriate permissions at the branches within the system could also use the funding source.</para></note>\r
- </step>\r
- <step><simpara>Create a code for the source. No limits exist on the number of characters that can be entered in this field.</simpara></step>\r
- <step><simpara>Select a currency from the drop down menu. This menu is populated from the choices in the Currency Types interface.</simpara></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Allocate Credits to Funding Sources</title>\r
- <procedure>\r
- <step><simpara>Apply a credit to this funding source.</simpara></step>\r
- <step><simpara>Enter the amount of money that the funding source contributes to the organization. Funding sources are not tied to fiscal\r
- or calendar years, so you can continue to add money to the same funding source over multiple years, e.g. County\r
- Funding. Alternatively, you can name funding sources by year, e.g. County Funding 2010 and County Funding 2011, and apply\r
- credits each year to the matching source.</simpara></step>\r
- <step><simpara>To apply a credit, click on the hyperlinked name of the funding source. The Funding Source Details will appear.</simpara></step>\r
- <step><simpara>Click Apply credit.</simpara></step>\r
- <step><simpara>Enter an amount to apply to this funding source.</simpara></step>\r
- <step><simpara>Enter a note. This field is optional.</simpara></step>\r
- <step><simpara>Click Apply.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Allocate credits to funds</title>\r
- <simpara>If you have already set up your funds, then you can then click the Allocate to Fund button to apply credits from the\r
- funding sources to the funds. If you have not yet set up your funds, or you need to add a new one, you can allocate\r
- credits to funds from the funds interface. See section 1.2 for more information.</simpara>\r
- <procedure>\r
- <step><simpara>To allocate credits to funds, click Allocate to Fund.</simpara></step>\r
- <step><simpara>Enter the amount that you want to allocate.</simpara></step>\r
- <step><simpara>Enter a note. This field is optional.</simpara></step>\r
- <step><simpara>Click Apply.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Track Debits and Credits</title>\r
- <simpara>You can track credits to and allocations from each funding source. These amounts are updated when credits and allocations are\r
- made in the Funding Source Details. Access the Funding Source Details by clicking on the hyperlinked name of the Funding Source.</simpara>\r
- </simplesect>\r
-</section>\r
-<section id="acq_admin_fund_tags">\r
- <title>Fund Tags</title>\r
- <simpara>You can apply tags to funds so that you can group funds for easy reporting. For example, you have three funds for children’s materials: Children’s Board Books, Children’s DVDs, and \r
- Children’s CDs. Assign a fund tag of “children’s” to each fund.\r
- When you need to report on the amount that has been spent on all children’s materials,\r
- you can run a report on the fund tag to find total expenditures on children’s materials\r
- rather than reporting on each individual fund.</simpara>\r
- <simplesect>\r
- <title>Create a Fund Tag</title>\r
- <procedure>\r
- <step><simpara>To create a fund tag, click Admin → Server Administration → Acquisitions → Fund Tags.</simpara></step>\r
- <step><simpara>Click New Fund Tag. No limits exist on the number of characters that can be entered in this field.</simpara></step>\r
- <step><simpara>Select a Fund Tag Owner from the drop down menu. The owner indicates the organizational unit(s) whose staff can use this\r
- fund tag. This menu is populated with the shortnames that you created for your libraries in the organizational units tree\r
- (See Admin → Server Administration → Organizational Units).</simpara>\r
- <note><simpara>The rule of parental inheritance applies to this list.</simpara></note></step>\r
- <step><simpara>Enter a Fund Tag Name. No limits exist on the number of characters that can be entered in this field.</simpara></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
-</section>\r
-<section id="acq_admin_funds">\r
- <title>Funds</title>\r
- <simpara>Funds allow you to allocate credits toward specific purchases. In the funds interface,\r
- you can create funds; allocate credits from funding sources to funds; transfer money\r
- between funds; and apply fund tags to funds.\r
- Funds are created for a specific year, either fiscal or calendar. These funds are owned\r
- by org units. At the top of the funds interface, you can set a contextual org unit and\r
- year. The drop down menu at the top of the screen enables you to focus on funds that\r
- are owned by specific organizational units during specific years.</simpara>\r
- <simplesect>\r
- <title>Create a fund</title>\r
- <procedure>\r
- <step><simpara>To create a new fund, click Admin → Server Administration → Acquisitions → Funds.</simpara></step>\r
- <step><simpara>Enter a name for the fund. No limits exist on the number of characters that can be entered in this field.</simpara></step>\r
- <step><simpara>Create a code for the fund. No limits exist on the number of characters that can be entered in this field.</simpara></step>\r
- <step><simpara>Enter a year for the fund. This can be a fiscal year or a calendar year. The format of the year is YYYY.</simpara></step>\r
- <step><simpara>Select an org unit from the drop down menu. The org unit indicates the organizational units whose staff can use this fund. This menu is populated with the \r
- shortnames that you created for your libraries in the organizational units tree (See Admin → Server Administration → Organizational Units).</simpara>\r
- <note><simpara>The rule of parental inheritance applies to this list. See section</simpara></note></step>\r
- <step><simpara>Select a currency type from the drop down menu. This menu is comprised of entries in the currency types menu. When a fund\r
- is applied to a line item or copy, the price of the item will be encumbered in the currency associated with the fund.</simpara></step>\r
- <step><simpara>Click the Active box to activate this fund. You cannot make purchases from this fund if it is not active.</simpara></step>\r
- <step><simpara>Enter a Balance Stop Percent. The balance stop percent prevents you from making purchases when only a specified amount of the fund remains. For example, if \r
- you want to spend 95 percent of your funds, leaving a five percent balance in the fund, then you would enter 95 in the field. When the fund reaches its balance stop percent, \r
- it will appear in red when you apply funds to copies.</simpara></step>\r
- <step><simpara>Enter a Balance Warning Percent. The balance warning percent gives you a warning that the fund is low. You can specify any percent. For example, if you want to spend \r
- 90 percent of your funds and be warned when the fund has only 10 percent of its balance remaining, then enter 90 in the field. When the fund reaches its balance warning percent, it will \r
- appear in yellow when you apply funds to copies.</simpara></step>\r
- <step><simpara>Check the Propagate box to propagate funds. When you propagate a fund, the ILS will create a new fund for the following fisca \r
- year with the same parameters as your current fund. All of the settings transfer except for the year and the amount of\r
- money in the fund. Propagation occurs during the fiscal year close-out operation.</simpara></step>\r
- <step><simpara>Check the Rollover box if you want to roll over remaining funds into the same fund next year.</simpara></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Allocate Credits from Funding Sources to Funds</title>\r
- <simpara>Credits can be applied to funds from funding sources using the fund interface. The\r
- credits that you apply to the fund can be applied later to purchases.</simpara>\r
- <procedure>\r
- <step><simpara>To access funds, click Admin → Server Administration → Acquisitions → Funds.</simpara></step>\r
- <step><simpara>Click the hyperlinked name of the fund.</simpara></step>\r
- <step><simpara>To add a credit to the fund, click the Create Allocation tab.</simpara></step>\r
- <step><simpara>Choose a Funding Source from the drop down menu.</simpara></step>\r
- <step><simpara>Enter an amount that you want to apply to the fund from the funding source.</simpara></step>\r
- <step><simpara>Enter a note. This field is optional.</simpara></step>\r
- <step><simpara>Click Apply.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Transfer credits between funds</title>\r
- <simpara>The credits that you allocate to funds can be transferred between funds if desired. In\r
- the following example, you can transfer $500.00 from the Young Adult Fiction fund to\r
- the Children’s DVD fund.</simpara>\r
- <procedure>\r
- <step><simpara>To access funds, click Admin → Server Administration → Acquisitions → Funds.</simpara></step>\r
- <step><simpara>Click the hyperlinked name of the originating fund.</simpara></step>\r
- <step><simpara>The Fund Details screen appears. Click Transfer Money.</simpara></step>\r
- <step><simpara>Enter the amount that you would like to transfer.</simpara></step>\r
- <step><simpara>From the drop down menu, select the destination fund.\r
- </simpara></step>\r
- <step><simpara>Add a note. This field is optional.</simpara></step>\r
- <step><simpara>Click Transfer.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Track Balances and Expenditures</title>\r
- <simpara>The Fund Details allows you to track the fund’s balance, encumbrances, and amount\r
- spent. It also allows you to track allocations from the funding source(s), debits, and\r
- fund tags.</simpara>\r
- <procedure>\r
- <step><simpara>To access the fund details, click on the hyperlinked name of the fund that you\r
- created.</simpara></step>\r
- <step><simpara>The Summary allows you to track the following:</simpara>\r
- <orderedlist numeration="loweralpha">\r
- <listitem><simpara>Balance – The balance is calculated by subtracting both items that have been\r
- invoiced and encumbrances from the total allocated to the fund.</simpara></listitem>\r
- <listitem><simpara>Total Allocated – This amount is the total amount allocated from the Funding\r
- Source.</simpara></listitem>\r
- <listitem><simpara>Spent Balance – This balance is calculated by subtracting only the items that\r
- have been invoiced from the total allocated to the fund. It does not include\r
- encumbrances.</simpara></listitem>\r
- <listitem><simpara>Total Debits – The total debits are calculated by adding the cost of items that\r
- have been invoiced and encumbrances.</simpara></listitem>\r
- <listitem><simpara>Total Spent – The total spent is calculated by adding the cost of items that\r
- have been invoiced. It does not include encumbrances.</simpara></listitem>\r
- <listitem><simpara>Total Encumbered – The total encumbered is calculated by adding all\r
- encumbrances.</simpara></listitem>\r
- </orderedlist>\r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Edit a Fund</title>\r
- <simpara>Edit a fund just as you would edit a currency type.</simpara>\r
- </simplesect>\r
- <simplesect>\r
- <title>Perform Year End Closeout Operation</title>\r
- <simpara>The Year End Closeout Operation allows you to deactivate funds for the current year\r
- and create analogous funds for the next year. It transfers encumbrances to the\r
- analogous funds, and it rolls over any remaining funds if you checked the rollover box\r
- when creating the fund.</simpara>\r
- <procedure>\r
- <step><simpara>To access the year end closeout of a fund, click Admin → Server Administration →\r
- Acquisitions → Funds.</simpara></step>\r
- <step><simpara>Click Fund Propagation and Rollover.</simpara></step>\r
- <step><simpara>Check the box adjacent to Perform Fiscal Year Close-Out Operation.</simpara></step>\r
- <step><simpara>Notice that the context org unit reflects the context org unit that you selected at\r
- the top of the Funds screen.</simpara></step>\r
- <step><simpara>If you want to perform the close-out operation on the context org unit and its child\r
- units, then check the box adjacent to Include Funds for Descendant Org Units.</simpara></step>\r
- <step><simpara>Check the box adjacent to dry run if you want to test changes to the funds before\r
- they are enacted. Evergreen will generate a summary of the changes that would\r
- occur during the selected operations. No data will be changed.</simpara></step>\r
- <step><simpara>Click Process.</simpara></step>\r
- <step><simpara>Evergreen will begin the propagation process. Evergreen will make a clone of each\r
- fund, but it will increment the year by .</simpara></step>\r
- </procedure>\r
- </simplesect>\r
-</section>\r
-<section id="acq_admin_providers">\r
- <title>Providers</title>\r
- <simpara>Providers are vendors. You can create a provider profile that includes contact\r
- information for the provider, holdings information, invoices, and other information.</simpara>\r
- <simplesect>\r
- <title>Create a provider</title>\r
- <procedure>\r
- <step><simpara>To create a new provider, click Admin → Server Administration →Acquisitions →\r
- Providers.</simpara></step>\r
- <step><simpara>Enter the provider name.</simpara></step>\r
- <step><simpara>Create a code for the provider. No limits exist on the number of characters that can\r
- be entered in this field.</simpara></step>\r
- <step><simpara>Select an owner from the drop down menu. The owner indicates the organizational units whose staff can use this provider. This menu is populated with the shortnames \r
- that you created for your libraries in the organizational units tree (See Admin → Server Administration → Organizational Units).</simpara>\r
- <note><simpara>The rule of parental inheritance applies to this list. See section .1\r
- for more information.</simpara></note></step>\r
- <step><simpara>Select a currency from the drop down menu. This drop down list is populated by the\r
- list of currencies available in the currency types.</simpara></step>\r
- <step><simpara>A provider must be active in order for purchases to be made from that provider. To\r
- activate the provider, check the box adjacent to Active. To deactivate a vendor,\r
- uncheck the box.</simpara></step>\r
- <step><simpara>Select a default claim policy from the drop down box. This list is derived from the\r
- claim policies that can be created</simpara></step>\r
- <step><simpara>Select an EDI default. This list is derived from the EDI accounts that can be created.</simpara></step>\r
- <step><simpara>Enter the provider’s email address.</simpara></step>\r
- <step><simpara>In the Fax Phone field, enter the provider’s fax number.</simpara></step>\r
- <step><simpara>In the holdings tag field, enter the tag in which the provider places holdings data.</simpara></step>\r
- <step><simpara>In the phone field, enter the provider’s phone number.</simpara></step>\r
- <step><simpara>If prepayment is required to purchase from this provider, then check the box\r
- adjacent to prepayment required.</simpara></step>\r
- <step><simpara>Enter the Standard Address Number (SAN) for your provider.</simpara></step>\r
- <step><simpara>Enter the web address for the provider’s website in the URL field.</simpara></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Add contact and holdings information to providers</title>\r
- <simpara>After you save the provider profile, the screen reloads so that you can save additional\r
- information about the provider. You can also access this screen by clicking the\r
- hyperlinked name of the provider on the Providers screen. The tabs allow you to add a\r
- provider address and contact, attribute definitions, and holding subfields. You can also\r
- view invoices associated with the provider.</simpara>\r
- <procedure>\r
- <step><simpara>Enter a Provider Address, and click Save.</simpara>\r
- <note><simpara>Required fields for the provider address are: Street 1, city, state,\r
- country, post code. You may have multiple valid addresses.</simpara></note></step>\r
- <step><simpara>Enter the Provider Contact, and click Save.</simpara></step>\r
- <step><simpara>Your vendor may include information that is specific to your organization in MARC\r
- tags. You can specify the types of information that should be entered in each MARC\r
- tag. Enter attribute definitions to correlate MARC tags with the information that\r
- they should contain in incoming vendor records. Some technical knowledge is\r
- required to enter XPath information.</simpara></step>\r
- <step><simpara>You may have entered a holdings tag when you created the provider profile. You\r
- can also enter holdings subfields. Holdings subfields allow you to specify subfields\r
- within the holdings tag to which your vendor adds holdings information.</simpara></step>\r
- <step><simpara>Click invoices to access invoices associated with a provider.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Edit a provider</title>\r
- <simpara>Edit a provider just as you would edit a currency type.</simpara>\r
- <note><simpara>You can delete providers only if no purchase orders have been assigned\r
- to them.</simpara></note>\r
- </simplesect>\r
-</section>\r
-<section id="acq_admin_edi">\r
- <title>EDI</title>\r
- <simpara>Many libraries use Electronic Data Interchange (EDI) accounts to order new acquisitions.\r
- In Evergreen 2.0, users can set up EDI accounts and manage EDI messages in the admin\r
- module. EDI messages and notes can be viewed in the acquisitions module.</simpara>\r
- <note><simpara>The following fields are required to create an EDI account: host,\r
- username, password, path, and incoming directory.</simpara></note>\r
- <simplesect>\r
- <title>EDI Accounts</title>\r
- <simpara>Create EDI Accounts to communicate electronically with providers.</simpara>\r
- <procedure>\r
- <step><simpara>Create a label. The label allows you to differentiate between accounts for the same\r
- provider. No limits exist on the number of characters that can be entered in this\r
- field.</simpara></step>\r
- <step><simpara>Enter a host. Your provider will provide you with the requisite FTP or SCP\r
- information.</simpara></step>\r
- <step><simpara>Enter the username that has been supplied by your provider.</simpara></step>\r
- <step><simpara>Enter the password that has been supplied by your provider.</simpara></step>\r
- <step><simpara>Enter account information. This field enables you to add a supplemental password\r
- for entry to a remote system after log in has been completed. This field is optional\r
- for the ILS but may be required by your provider.</simpara></step>\r
- <step><simpara>Select an owner from the drop down menu. The owner indicates the organizational\r
- units whose staff can use this EDI account. This menu is populated with the\r
- shortnames that you created for your libraries in the organizational units tree (See\r
- Admin → Server Administration → Organizational Units).</simpara>\r
- <note><simpara>The rule of parental inheritance applies to this list.</simpara></note></step>\r
- <step><simpara>The Last Activity updates automatically with any inbound or outbound\r
- communication.</simpara></step>\r
- <step><simpara>Select a provider from the drop down menu to whom this account belongs.</simpara></step>\r
- <step><simpara>Enter a path. The path indicates the remote location on the server from which files\r
- are pulled in to the ILS.</simpara></step>\r
- <step><simpara>Enter the incoming directory. This directory indicates the location on your local\r
- network to which the files download.</simpara></step>\r
- <step><simpara>Enter the vendor account number supplied by your provider.</simpara></step>\r
- <step><simpara>Enter the vendor account code supplied by your provider.</simpara></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>EDI Messages</title>\r
- <simpara>The EDI messages screen displays all incoming and outgoing messages between the\r
- library and the vendor.</simpara>\r
- </simplesect>\r
-</section>\r
-<section id="acq_admin_claiming">\r
- <title>Claiming</title>\r
- <simpara>Evergreen 2.0 provides minimal claiming functionality. Currently, all claiming is manual,\r
- but the admin module enables you to build claim policies and specify the action(s) that\r
- users should take to claim items.</simpara>\r
- <simplesect>\r
- <title>Create a claim policy</title>\r
- <simpara>The claim policy link enables you to name the claim policy and specify the organization\r
- that owns it.</simpara>\r
- <procedure>\r
- <step><simpara>To create a claim policy, click Admin → Server Administration → Acquisitions →\r
- Claim Policies.</simpara></step>\r
- <step><simpara>Create a claim policy name. No limits exist on the number of characters that can be\r
- entered in this field.</simpara></step>\r
- <step><simpara>Select an org unit from the drop down menu. The org unit indicates the\r
- organizational units whose staff can use this claim policy. This menu is populated\r
- with the shortnames that you created for your libraries in the organizational units\r
- tree (See Admin → Server Administration → Organizational Units).</simpara>\r
- <note><simpara>The rule of parental inheritance applies to this list.</simpara></note></step>\r
- <step><simpara>Enter a description. No limits exist on the number of characters that can be entered\r
- in this field.</simpara></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Create a claim type</title>\r
- <simpara>The claim type link enables you to specify the reason for a type of claim.</simpara>\r
- <procedure>\r
- <step><simpara>To create a claim type, click Admin → Server Administration → Acquisitions →\r
- Claim types.</simpara></step>\r
- <step><simpara>Create a claim type. No limits exist on the number of characters that can be entered\r
- in this field.</simpara></step>\r
- <step><simpara>Select an org unit from the drop down menu. The org unit indicates the\r
- organizational units whose staff can use this claim type. This menu is populated\r
- with the shortnames that you created for your libraries in the organizational units\r
- tree (See Admin → Server Administration → Organizational Units).</simpara>\r
- <note><simpara>The rule of parental inheritance applies to this list.</simpara></note></step>\r
- <step><simpara>Enter a description. No limits exist on the number of characters that can be entered\r
- in this field.</simpara></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Create a claim event type</title>\r
- <simpara>The claim event type describes the physical action that should occur when an item\r
- needs to be claimed. For example, the user should notify the vendor via email that the\r
- library is claiming an item.</simpara>\r
- <procedure>\r
- <step><simpara>To access the claim event types, click Admin → Server Administration →\r
- Acquisitions →Claim event type.</simpara></step>\r
- <step><simpara>Enter a code for the claim event type. No limits exist on the number of characters\r
- that can be entered in this field.</simpara></step>\r
- <step><simpara>Select an org unit from the drop down menu. The org unit indicates the\r
- organizational units whose staff can use this event type. This menu is populated\r
- with the shortnames that you created for your libraries in the organizational units\r
- tree (See Admin → Server Administration → Organizational Units).</simpara>\r
- <note><simpara>The rule of parental inheritance applies to this list.</simpara></note></step>\r
- <step><simpara>Enter a description. No limits exist on the number of characters that can be entered\r
- in this field.</simpara></step>\r
- <step><simpara>If this claim is initiated by the user, then check the box adjacent to Library Initiated.</simpara>\r
- <note><simpara>Currently, all claims are initiated by a user. The ILS cannot automatically\r
- claim an issue.</simpara></note></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Create a claim policy action</title>\r
- <simpara>The claim policy action enables you to specify how long a user should wait before\r
- claiming the item.</simpara>\r
- <procedure>\r
- <step><simpara>To access claim policy actions, click Admin → Server Administration → Acquisitions\r
- →Claim Policy Actions.</simpara></step>\r
- <step><simpara>Select an Action (Event Type) from the drop down menu.</simpara></step>\r
- <step><simpara>Enter an action interval. This field indicates how long a user should wait before\r
- claiming the item.</simpara></step>\r
- <step><simpara>In the Claim Policy ID field, select a claim policy from the drop down menu.</simpara></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- </procedure>\r
- <note><simpara>You can create claim cycles by adding multiple claim policy actions to a\r
- claim policy.</simpara></note>\r
- </simplesect>\r
-</section>\r
-<section id="acq_admin_invoice_menus">\r
- <title>Invoice menus</title>\r
- <simpara>Invoice menus allow you to create drop down menus that appear on invoices. You can\r
- create an invoice item type or invoice payment method.</simpara>\r
- <simplesect>\r
- <title>Invoice item type</title>\r
- <simpara>The invoice item type allows you to enter the types of additional charges that you can\r
- add to an invoice. Examples of additional charge types might include taxes or\r
- processing fees. Charges for bibliographic items are listed separately from these\r
- additional charges. A default list of charge types displays, but you can add custom\r
- charge types to this list.\r
- Invoice item types can also be used when adding non-bibliographic items to a purchase\r
- order. When invoiced, the invoice item type will copy from the purchase order to the\r
- invoice.</simpara>\r
- <procedure>\r
- <step><simpara>To create a new charge type, click Admin → Server Administration → Acquisitions\r
- → Invoice Item Type.</simpara></step>\r
- <step><simpara>Click New Invoice Item Type.</simpara></step>\r
- <step><simpara>Create a code for the charge type. No limits exist on the number of characters that\r
- can be entered in this field.</simpara></step>\r
- <step><simpara>Create a label. No limits exist on the number of characters that can be entered in\r
- this field. The text in this field appears in the drop down menu on the invoice.</simpara></step>\r
- <step><simpara>If items on the invoice were purchased with the monies in multiple funds, then you\r
- can divide the additional charge across funds. Check the box adjacent to Prorate? if\r
- you want to prorate the charge across funds.</simpara></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
-</section>\r
-<section id="acq_admin_invoice_payment_method">\r
- <title>Invoice payment method</title>\r
- <simpara>The invoice payment method allows you to predefine the type(s) of invoices and\r
- payment method(s) that you accept. The text that you enter in the admin module will\r
- appear as a drop down menu in the invoice type and payment method fields on the\r
- invoice.</simpara>\r
- <procedure>\r
- <step><simpara>To create a new invoice payment method, click Admin → Server Administration →\r
- Acquisitions → Invoice Payment Method.</simpara></step>\r
- <step><simpara>Click New Invoice Payment Method.</simpara></step>\r
- <step><simpara>Create a code for the invoice payment method. No limits exist on the number of\r
- characters that can be entered in this field.</simpara></step>\r
- <step><simpara>Create a name for the invoice payment method. No limits exist on the number of\r
- characters that can be entered in this field. The text in this field appears in the drop\r
- down menu on the invoice.</simpara></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- </procedure>\r
-</section>\r
-<section id="acq_admin_distribution_formulas">\r
- <title>Distribution Formulas</title>\r
- <simpara>Distribution formulas allow you to specify the number of copies that should be\r
- distributed to specific branches. You can create and reuse formulas as needed.</simpara>\r
- <simplesect>\r
- <title>Create a distribution formula</title>\r
- <procedure>\r
- <step><simpara>Click Admin → Server Administration → Acquisitions →Distribution Formulas.</simpara></step>\r
- <step><simpara>Click New Formula.</simpara></step>\r
- <step><simpara>Enter a Formula Name. No limits exist on the number of characters that can be\r
- entered in this field.</simpara></step>\r
- <step><simpara>Choose a Formula Owner from the drop down menu. The Formula Owner indicates\r
- the organizational units whose staff can use this formula. This menu is populated\r
- with the shortnames that you created for your libraries in the organizational units\r
- tree (See Admin → Server Administration → Organizational Units).</simpara>\r
- <note><simpara>The rule of parental inheritance applies to this list.</simpara></note></step>\r
- <step><simpara>Ignore the Skip Count field. It has no purpose in 2.0.</simpara></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- <step><simpara>Click New Entry.</simpara></step>\r
- <step><simpara>Select an Owning Library from the drop down menu. This indicates the branch that\r
- will receive the items. This menu is populated with the shortnames that you created\r
- for your libraries in the organizational units tree (See Admin → Server\r
- Administration → Organizational Units).</simpara></step>\r
- <step><simpara>Select a Shelving Location from the drop down menu.</simpara></step>\r
- <step><simpara>In the Item Count field, enter the number of items that should be distributed to the\r
- branch. You can enter the number or use the arrows on the right side of the field.</simpara></step>\r
- <step><simpara>Click Apply Changes. The screen will reload.</simpara></step>\r
- <step><simpara>To view the changes to your formula, click Admin → Server Administration →\r
- Acquisitions → Distribution Formulas. The item_count will reflect the entries to\r
- your distribution formula.</simpara></step>\r
- </procedure>\r
- <note><simpara>To edit the Formula Name, click the hyperlinked name of the formula in\r
- the top left corner. A pop up box will enable you to enter a new formula\r
- name.</simpara></note>\r
- </simplesect>\r
- <simplesect>\r
- <title>Edit a distribution formula</title>\r
- <simpara>To edit a distribution formula, click the hyperlinked title of the formula.</simpara>\r
- </simplesect>\r
-</section>\r
-<section id="acq_admin_line_item_features">\r
- <title>Line item features</title>\r
- <simpara>Line item alerts are predefined text that can be added to line items that are on selection\r
- lists or purchase orders. You can define the alerts from which staff can choose. Line\r
- item alerts appear in a pop up box when the line item, or any of its copies, are marked\r
- as received.</simpara>\r
- <simplesect>\r
- <title>Create a line item alert</title>\r
- <procedure>\r
- <step><simpara>To create a line item alert, click Administration → Server Administration →\r
- Acquisitions → Line Item Alerts.</simpara></step>\r
- <step><simpara>Click New Line Item Alert Text.</simpara></step>\r
- <step><simpara>Create a code for the text. No limits exist on the number of characters that can be\r
- entered in this field.</simpara></step>\r
- <step><simpara>Create a description for the text. No limits exist on the number of characters that can\r
- be entered in this field.</simpara></step>\r
- <step><simpara>Select an owning library from the drop down menu. The owning library indicates the\r
- organizational units whose staff can use this alert. This menu is populated with the\r
- shortnames that you created for your libraries in the organizational units tree (See\r
- Admin → Server Administration → Organizational Units).\r
- </simpara></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
-</section>\r
-<section id="acq_admin_line_item_marc_attribute_definitions">\r
- <title>Line Item MARC Attribute Definitions</title>\r
- <simpara>Line item attributes define the fields that Evergreen needs to extract from the\r
- bibliographic records that are in the acquisitions database to display in the catalog.\r
- Also, these attributes will appear as fields in the New Brief Record interface. You will be\r
- able to enter information for the brief record in the fields where attributes have been\r
- defined.</simpara>\r
-</section>\r
-<section id="acq_admin_cancel_suspend_reasons">\r
- <title>Cancel/Suspend reasons</title>\r
- <simpara>The Cancel reasons link enables you to predefine the reasons for which a line item or a\r
- PO can be cancelled. A default list of reasons appears, but you can add custom reasons\r
- to this list.\r
- Applying the cancel reason will prevent the item from appearing in a claims list and will\r
- allow you to cancel debits associated with the purchase.\r
- Cancel reasons also enable you to suspend or delay a purchase. For example, you could\r
- create a cancel reason of “back ordered,” and you could choose to keep the debits\r
- associated with the purchase.</simpara>\r
- <simplesect>\r
- <title>Create a cancel/suspend reason</title>\r
- <procedure>\r
- <step><simpara>To add a new cancel reason, click Administration → Server Administration →\r
- Acquisitions → Cancel reasons.</simpara></step>\r
- <step><simpara>Click New Cancel Reason.</simpara></step>\r
- <step><simpara>Select a using library from the drop down menu. The using library indicates the\r
- organizational units whose staff can use this cancel reason. This menu is populated\r
- with the shortnames that you created for your libraries in the organizational units\r
- tree (See Admin → Server Administration → Organizational Units.)</simpara></step>\r
- <step><simpara>Create a label for the cancel reason. This label will appear when you select a cancel\r
- reason on an item or a PO.</simpara></step>\r
- <step><simpara>Create a description of the cancel reason. This is a free text field and can be\r
- comprised of any text of your choosing.</simpara></step>\r
- <step><simpara>If you want to retain the debits associated with the cancelled purchase, click the box\r
- adjacent to Keep Debits?</simpara></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
-</section>\r
-<section id="acq_admin_acquisitions_permissions_in_the_admin_module">\r
- <title>Acquisitions Permissions in the Admin module</title>\r
- <simpara>Several setting in the Library Settings area of the Admin module pertain to functions in\r
- the Acquisitions module. You can access these settings by clicking Admin → Local\r
- Administration →Library Settings Editor.</simpara>\r
- <itemizedlist>\r
- <listitem><simpara>CAT: Delete bib if all copies are deleted via Acquisitions lineitem cancellation – If\r
- you cancel a line item, then all of the on order copies in the catalog are deleted. If,\r
- when you cancel a line item, you also want to delete the bib record, then set this\r
- setting to TRUE.</simpara></listitem>\r
- <listitem><simpara>Default circulation modifier – This modifier would be applied to items that are\r
- created in the acquisitions module</simpara></listitem>\r
- <listitem><simpara>Default copy location – This copy location would be applied to items that are\r
- created in the acquisitions module</simpara></listitem>\r
- <listitem><simpara>Fund Spending Limit for Block - When the amount remaining in the fund, including\r
- spent money and encumbrances, goes below this percentage, attempts to spend\r
- from the fund will be blocked.</simpara></listitem>\r
- <listitem><simpara>Fund Spending Limit for Warning - When the amount remaining in the fund,\r
- including spent money and encumbrances, goes below this percentage, attempts to\r
- spend from the fund will result in a warning to the staff.</simpara></listitem>\r
- <listitem><simpara>Temporary barcode prefix - Temporary barcode prefix for items that are created in\r
- the acquisitions module</simpara></listitem>\r
- <listitem><simpara>Temporary call number prefix - Temporary call number prefix for items that are\r
- created in the acquisitions module</simpara></listitem>\r
- </itemizedlist>\r
-</section>\r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<chapter xml:id="actiontriggers" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
- <info>\r
- <title>Action Triggers</title>\r
- <indexterm><primary>action triggers</primary></indexterm> \r
- </info>\r
- <para>Action Triggers were introduced to Evergreen in 1.6. They allow administrators the ability to set up actions for specific events. They are useful for notification events such as \r
- hold notifications.</para>\r
- \r
- \r
- <para>To access the Action Triggers module, select\r
- <menuchoice>\r
- <guimenu>Admin</guimenu> \r
- <guisubmenu>Local Administration</guisubmenu>\r
- <guisubmenu>Notifications / Action triggers</guisubmenu>\r
- </menuchoice>\r
- </para>\r
- <note><para>You must have Local Administrator permissions to access the Action Triggers module.</para></note>\r
- <para>You will notice four tabs on this page: <guilabel><link linkend="eventdefinitions">Event Definitions</link></guilabel>, <guilabel><link linkend="Hooks">Hooks</link></guilabel>, \r
- <guilabel><link linkend="Reactors">Reactors</link></guilabel> and <guilabel><link linkend="Validators">Validators</link></guilabel>.</para>\r
- \r
- <section xml:id="eventdefinitions">\r
- <title>Event Definitions</title>\r
- <indexterm><primary>action triggers</primary><secondary>event definitions</secondary></indexterm> \r
- <para><guilabel>Event Definitions</guilabel> is the main tab and contains the key fields when working with action triggers. These fields include:</para>\r
- <table xml:id="eventdefinitionstable">\r
- <title>Action Trigger Event Definitions</title>\r
- <tgroup cols="2">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="3.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Description</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- <row>\r
- <entry><guilabel>Owning library</guilabel></entry>\r
- <entry>The shortname of the library for which the action / trigger / hook is defined.</entry>\r
- </row>\r
- <row>\r
- <entry><guilabel>Name</guilabel></entry>\r
- <entry>The name of the trigger event, that links to a trigger event environment containing a set of fields \r
- that will be returned to the <link linkend="Validators">Validators</link> / <link linkend="Reactors">Reactors</link> for processing.</entry>\r
- </row>\r
- <row>\r
- <entry><guilabel><link linkend="Hooks">Hooks</link></guilabel></entry>\r
- <entry>The name of the trigger for the trigger event. The underlying action_trigger.hook table defines the Fieldmapper \r
- class in the core_type column off of which the rest of the field definitions <quote>hang</quote>. </entry>\r
- </row>\r
- <row>\r
- <entry><guilabel>Enabled</guilabel></entry>\r
- <entry>Sets the given trigger as enabled or disabled. This must be set to enabled for the Action trigger to run.</entry>\r
- </row>\r
- <row>\r
- <entry><guilabel>Processing Delay</guilabel></entry>\r
- <entry>Defines how long after a given trigger / hook event has occurred before the associated action (<quote>Reactor</quote>) \r
- will be taken.</entry>\r
- </row>\r
- <row>\r
- <entry><guilabel>Processing Delay Field</guilabel></entry>\r
- <entry>Defines the field associated with the event on which the processing delay is calculated. For example, the processing delay \r
- context field on the hold.capture hook (which has a core_type of ahr) is <emphasis>capture_time</emphasis>.</entry>\r
- </row>\r
- <row>\r
- <entry><guilabel>Processing Group Context Field</guilabel></entry>\r
- <entry>Used to batch actions based on its associated group.</entry>\r
- </row>\r
- <row>\r
- <entry><guilabel><link linkend="Validators">Validators</link></guilabel></entry>\r
- <entry>The subroutines receive the trigger environment as an argument (see the linked <emphasis>Name</emphasis> for \r
- the environment definition) and returns either <emphasis>1</emphasis> if the validator is <emphasis>true</emphasis> or <emphasis>0</emphasis> \r
- if the validator returns <emphasis>false</emphasis>.</entry>\r
- </row>\r
- <row>\r
- <entry><guilabel><link linkend="Reactors">Reactors</link></guilabel></entry>\r
- <entry>Links the action trigger to the Reactor.</entry>\r
- </row>\r
- <row>\r
- <entry><guilabel>Max Event Validity Delay</guilabel></entry>\r
- <entry>Define the threshold for how far back the action_trigger_runner.pl script should reach to generate \r
- a batch of events.</entry>\r
- </row>\r
- </tbody> \r
- </tgroup>\r
- </table>\r
- \r
- <procedure>\r
- <title>Creating Action Triggers</title>\r
- <indexterm><primary>action triggers</primary><secondary>creating</secondary></indexterm> \r
- <step>\r
- <para>From the top menu, select\r
- <menuchoice>\r
- <guimenu>Admin</guimenu> \r
- <guisubmenu>Local Administration</guisubmenu>\r
- <guisubmenu>Notifications / Action triggers</guisubmenu>\r
- </menuchoice>\r
- </para>\r
- </step>\r
- <step><para>Click on the <guibutton>New</guibutton> button.</para></step>\r
- <step><para>Select an <guilabel>Owning Library</guilabel>.</para></step>\r
- <step><para>Create a unique <guilabel>Name</guilabel> for your new action trigger.</para></step> \r
- <step><para>Select the <guilabel>Hook</guilabel>.</para></step>\r
- <step><para>Check the <guilabel>Enabled</guilabel> check box.</para></step>\r
- \r
- <step><para>Create a unique <guilabel>Name</guilabel> for your new action trigger.</para></step>\r
- <step><para>Set the <guilabel>Processing Delay</guilabel> in the appropriate format. Eg. <emphasis class="bold">7 days</emphasis> to run 7 days from the trigger event \r
- or <emphasis class="bold">00:01:00</emphasis> to run 1 hour after the <guilabel>Processing Delay Context Field</guilabel>.</para></step>\r
- <step><para>Set the <guilabel>Processing Delay Context Field</guilabel> and <guilabel>Processing Group Context Field</guilabel>.</para></step> \r
- <step><para>Select the <guilabel>Validator</guilabel>, <guilabel>Reactor</guilabel>, <guilabel>Failure Cleanup</guilabel> and <guilabel>Success Cleanup</guilabel>.\r
- </para></step> \r
- <step><para>Set the <guilabel>Processing Delay Context Field</guilabel> and <guilabel>Processing Group Context Field</guilabel>.</para></step> \r
- <step preformance="optional"><para>Enter text in the <guilabel>Template</guilabel> text box if required. These are for email messages. Here is an sample \r
- template for sending 90 day overdue notices:</para>\r
-<programlisting><![CDATA[\r
-\r
-[%- USE date -%]\r
-[%- user = target.0.usr -%]\r
-To: [%- params.recipient_email || user.email %]\r
-From: [%- params.sender_email || default_sender %]\r
-Subject: Overdue Items Marked Lost\r
-\r
-Dear [% user.family_name %], [% user.first_given_name %]\r
-The following items are 90 days overdue and have been marked LOST.\r
-[%- params.recipient_email || user.email %][%- params.sender_email || default_sender %]\r
-[% FOR circ IN target %]\r
- Title: [% circ.target_copy.call_number.record.simple_record.title %] \r
- Barcode: [% circ.target_copy.barcode %] \r
- Due: [% date.format(helpers.format_date(circ.due_date), '%Y-%m-%d') %]\r
- Item Cost: [% helpers.get_copy_price(circ.target_copy) %]\r
- Total Owed For Transaction: [% circ.billable_transaction.summary.total_owed %]\r
- Library: [% circ.circ_lib.name %]\r
-[% END %]\r
-\r
-\r
-[% FOR circ IN target %]\r
- Title: [% circ.target_copy.call_number.record.simple_record.title %] \r
- Barcode: [% circ.target_copy.barcode %] \r
- Due: [% date.format(helpers.format_date(circ.due_date), '%Y-%m-%d') %]\r
- Item Cost: [% helpers.get_copy_price(circ.target_copy) %]\r
- Total Owed For Transaction: [% circ.billable_transaction.summary.total_owed %]\r
- Library: [% circ.circ_lib.name %]\r
-[% END %]\r
-]]>\r
-</programlisting> \r
- </step> \r
- <step><para>Once you are satisfied with your new event trigger , click the <guibutton>Save</guibutton> button located at the bottom of the \r
- form</para></step>\r
- </procedure>\r
- <tip><para>A quick and easy way to create new action triggers is to clone an existing action trigger.</para></tip>\r
- <procedure>\r
- <title>Cloning Existing Action Triggers</title>\r
- <step>\r
- <para>Check the check box next to the action trigger you wish to clone</para>\r
- </step>\r
- <step>\r
- <para>Click the <guibutton>Clone Selected</guibutton> on the top left of the page.</para>\r
- </step>\r
- <step>\r
- <para>An editing window with open. Notice that the fields will be populated with content from the cloned action trigger. Edit as necessary and \r
- give the new action trigger a unique <guilabel>Name</guilabel>.</para>\r
- </step>\r
- <step>\r
- <para>Click <guilabel>Save</guilabel>.</para>\r
- </step>\r
- </procedure>\r
- <procedure>\r
- <title>Editing Action Triggers</title>\r
- <step>\r
- <para>Check the check box next to the action trigger you wish to delete</para>\r
- </step>\r
- <step>\r
- <para>Click the <guibutton>Delete Selected</guibutton> on the top left of the page.</para>\r
- </step>\r
- </procedure>\r
- \r
- <note><para>Before deleting an action trigger, you should consider disabling it through the editing form. This way you can simply enable it if you decide that you would like to use \r
- the action trigger in the future.</para></note>\r
- <procedure>\r
- <title>Deleting Action Triggers</title>\r
- <step>\r
- <para>Check the check box next to the action trigger you wish to delete</para>\r
- </step>\r
- <step>\r
- <para>Click the <guibutton>Delete Selected</guibutton> on the top left of the page.</para>\r
- </step>\r
- </procedure>\r
- </section>\r
- <section xml:id="Hooks">\r
- <title>Hooks</title>\r
- <indexterm><primary>action triggers</primary><secondary>hooks</secondary></indexterm>\r
- <para><guilabel>Hooks</guilabel> define the Fieldmapper class in the core_type column off of which the rest of the field definitions <quote>hang</quote>.</para>\r
- <table xml:id="Hookstable">\r
- <title>Hooks</title>\r
- <tgroup cols="2">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="3.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Description</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- <row>\r
- <entry><guilabel>Hook Key</guilabel></entry>\r
- <entry>A unique name given to the hook.</entry>\r
- </row>\r
- <row>\r
- <entry><guilabel>Core Type</guilabel></entry>\r
- <entry>Used to link the action trigger to the IDL class in fm_IDL.xml</entry>\r
- </row>\r
- <row>\r
- <entry><guilabel>Description</guilabel></entry>\r
- <entry>Text to describe the purpose of the hook. </entry>\r
- </row>\r
- <row>\r
- <entry><guilabel>Passive</guilabel></entry>\r
- <entry>Indicates whether or not an event is created by direct user action or is circumstantial.</entry>\r
- </row>\r
- </tbody> \r
- </tgroup>\r
- </table>\r
- <para>You may also create, edit and delete Hooks but the <guilabel>Core Type</guilabel> must refer to an IDL class in the fm_IDL.xml file.</para>\r
- </section> \r
- <section xml:id="Reactors">\r
- <title>Reactors</title>\r
- <indexterm><primary>action triggers</primary><secondary>reactors</secondary></indexterm>\r
- <para><guilabel>Reactors</guilabel> link the trigger definition to the action to be carried out.</para>\r
- <table xml:id="Reactorstable">\r
- <title>Action Trigger Reactors</title>\r
- <tgroup cols="2">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="3.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Description</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- <row>\r
- <entry><guilabel>Module Name</guilabel></entry>\r
- <entry>The name of the Module to run if the action trigger is validated. It must be defined as a subroutine in \r
- <filename>/openils/lib/perl5/OpenILS/Application/Trigger/Reactor.pm</filename> or as a module\r
- in <filename>/openils/lib/perl5/OpenILS/Application/Trigger/Reactor/*.pm</filename>.</entry>\r
- </row>\r
- <row>\r
- <entry><guilabel>Description</guilabel></entry>\r
- <entry>Description of the Action to be carried out.</entry>\r
- </row>\r
- </tbody> \r
- </tgroup>\r
- </table>\r
- <para>You may also create, edit and delete Reactors. Just remember that their must be an associated subroutine or module in the Reactor Perl module.</para>\r
- </section> \r
- <section xml:id="Validators">\r
- <title>Validators</title>\r
- <indexterm><primary>action triggers</primary><secondary>validators</secondary></indexterm>\r
- <para><guilabel>Validators</guilabel> set the validation test to be preformed to determine whether the action trigger is executed.</para>\r
- <table xml:id="Validatorstable">\r
- <title>Action Trigger Validators</title>\r
- \r
- <tgroup cols="2">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="3.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Description</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- <row>\r
- <entry><guilabel>Module Name</guilabel></entry>\r
- <entry>The name of the subroutine in \r
- <filename>/openils/lib/perl5/OpenILS/Application/Trigger/Reactor.pm</filename> to validate the action trigger.</entry>\r
- </row>\r
- <row>\r
- <entry><guilabel>Description</guilabel></entry>\r
- <entry>Description of validation test to run.</entry>\r
- </row>\r
- </tbody> \r
- </tgroup>\r
- </table>\r
- <para>You may also create, edit and delete Validators. Just remember that their must be an associated subroutine in the <filename>Reactor.pm</filename> Perl module.</para>\r
- </section> \r
- <section xml:id="ProcessingActionTriggers"> \r
- <title>Processing Action Triggers</title>\r
- <indexterm><primary>action triggers</primary><secondary>processing</secondary></indexterm>\r
- <para>To run the action triggers, an Evergreen administrator will need to run the trigger processing script <command>/openils/bin/action_trigger_runner.pl \r
- <option>--process-hooks</option> <option>--run-pending</option></command>. This should be set up as a cron job to run \r
- periodically.</para> \r
- <para>You have several options when running the script:</para>\r
- <itemizedlist>\r
- <listitem><option>--run-pending</option>: Run the pending events.</listitem>\r
- <listitem><option>--process-hooks</option>: Create hook events</listitem>\r
- <listitem><option>--osrf-config=[<varname>config_file</varname>]</option>: OpenSRF core config file. Defaults to: \r
- <filename>/openils/conf/opensrf_core.xml</filename>.</listitem>\r
- <listitem><option>--custom-filters=[<varname>filter_file</varname>]</option>: File containing a JSON Object which describes any hooks that should\r
- use a user-defined filter to find their target objects. Defaults to: <filename>/openils/conf/action_trigger_filters.json</filename></listitem>\r
- <listitem><option>--max-sleep=[<varname>seconds</varname>]</option>: When in process-hooks mode, wait up to [<varname>seconds</varname>] for the lock file to go away. \r
- Defaults to 3600 (1 hour).</listitem>\r
- <listitem><option>--hooks=hook1[,hook2,hook3,...]</option>: Define which hooks to create events for. If none are defined, it defaults to the list of hooks defined \r
- in the <option>--custom-filters</option> option.</listitem>\r
- <listitem><option>--debug-stdout</option>: Print server responses to stdout (as JSON) for debugging.</listitem>\r
- <listitem><option>--lock-file=[<varname>file_name</varname>]</option>: Sets the lock file for the process.</listitem>\r
- <listitem><option>--help</option>: Show help information.</listitem>\r
- </itemizedlist>\r
- </section> \r
-</chapter>\r
-\r
+++ /dev/null
-<?xml version='1.0' encoding='UTF-8'?>\r
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"\r
- xml:lang="EN" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="admin-booking">\r
- <info>\r
- <title>Booking Module Administration</title>\r
- <legalnotice>\r
- <para><emphasis role="bold">Adapted with permission from original material by the <link\r
- xlink:title="http://docs.evergreen-ils.org/1.6/draft/html/"\r
- xlink:href="http://docs.evergreen-ils.org/1.6/draft/html/">Evergreen\r
- Community</link></emphasis></para>\r
- </legalnotice>\r
-\r
- <abstract>\r
- <para>The Evergreen booking module is included in Evergreen 1.6.1.x and above.The following\r
- documentation will include information about making cataloged items bookable; making\r
- non-bibliographic items bookable; and setting permissions in the booking module for\r
- staff.</para>\r
- </abstract>\r
- </info>\r
- <section xml:id="MakeCataloguedItemBookable">\r
- <title>Make a Cataloged Item Bookable in Advance</title>\r
- <indexterm><primary>booking reservation</primary><secondary>making a cataloged item bookable</secondary></indexterm>\r
- <para>If their permission settings allow, staff members can make items bookable. Staff members\r
- can do this in advance of a booking request, or they can do it on the fly.</para>\r
- <para>If you know in advance of the request that an item will need to be booked, you can make\r
- the item bookable.</para>\r
-\r
-\r
- <procedure>\r
- <step>\r
- <para>In the staff client, select <menuchoice>\r
- <guimenu>Search</guimenu>\r
- <guimenuitem>Search the Catalog</guimenuitem>\r
- </menuchoice></para>\r
- </step>\r
- <step>\r
- <para>Begin a title search to find an item.</para>\r
- </step>\r
- <step>\r
- <para>Click the title of the item that you want to book.</para>\r
- </step>\r
-\r
- <step>\r
- <para>The <guilabel>Record Summary</guilabel> will appear. In this view you can see\r
- information about the item and its locations. Click <menuchoice>\r
- <guimenu>Actions for this Record</guimenu>\r
- <guimenuitem>Holdings Maintenance</guimenuitem>\r
- </menuchoice> in the top right corner of the screen.</para>\r
- </step>\r
-\r
- <step>\r
- <para>The <guilabel>Holdings Maintenance</guilabel> screen will appear. In this screen,\r
- you can view the volumes and copies of an item avaialable at each branch. To view the\r
- barcodes and other information for each copy, click the arrow adjacent to the branch\r
- with the copy that you need to view. Click on successive arrows until you find the\r
- copy that you need to view.</para>\r
- </step>\r
- <step>\r
- <para>Select the item that you want to make bookable. Right click to open the menu, and\r
- click <guimenuitem>Make Item Bookable</guimenuitem>.</para>\r
- </step>\r
- <step>\r
- <para>The item has now been added to the list of resources that are bookable. To book\r
- the item, return to the <guilabel>Record Summary</guilabel>, and proceed with\r
- booking..</para>\r
- </step>\r
-\r
- </procedure>\r
- <note>\r
- <para>In Evergreen 1.6.1, there is no way to make an item “unbookable” after it has been\r
- made bookable and has been reserved. The <guibutton>Delete Selected</guibutton> button\r
- on this screen deletes the resource from the screen, but the item will be able to be\r
- booked after it has been returned.</para>\r
- </note>\r
-\r
- </section>\r
- <section xml:id="MakeItemBookableOnTheFly">\r
- <title>Make a Cataloged Item Bookable On the Fly</title>\r
- <para>If a patron wants to book an item immediately that does not have bookable status, you\r
- can book the item on the fly if you have the appropriate permissions.</para>\r
-\r
- <procedure>\r
- <step>\r
- <para>Follow steps one through five in <xref linkend="MakeCataloguedItemBookable"\r
- />.</para>\r
- </step>\r
- <step>\r
- <para>Select the item that you want to make bookable. Right click to open the menu, and\r
- click <guimenuitem>Book Item Now</guimenuitem>.</para>\r
- </step>\r
- <step>\r
- <para>A <guilabel>Reservations</guilabel> screen will appear in a new tab, and you can\r
- make the reservation.</para>\r
- </step>\r
-\r
- </procedure>\r
-\r
- </section>\r
- <section xml:id="MakeNon-CataloguedItemBookable">\r
- <title>Create a Bookable Status for Non-Bibliographic Items</title>\r
- <indexterm><primary>booking reservation</primary><secondary>non-bibliographic items</secondary></indexterm>\r
- <para>Staff with the required permissions can create a bookable status for non-bibliographic\r
- items. For example, staff can book conference rooms or laptops. You will be able to create\r
- types of resources, specify the names of individual resources within each type, and set\r
- attributes to describe those resources. You can then bring the values together through the\r
- <guilabel>Resource Attribute Map</guilabel>.</para>\r
- <procedure>\r
- <step>\r
- <para>First, create the type of resource that you want to make bookable. Select <menuchoice>\r
- <guimenu>Admin</guimenu>\r
- <guisubmenu>Server Administration</guisubmenu>\r
- <guisubmenu>Booking</guisubmenu>\r
- <guimenuitem>Resource Types</guimenuitem>\r
- </menuchoice>.</para>\r
- </step>\r
- <step>\r
- <para>A list of resource types will appear. You may also see titles of cataloged items\r
- on this screen if they were added using the <guilabel>Make Item Bookable</guilabel>\r
- or <guilabel>Book Now</guilabel> links. You should not attempt to add cataloged items\r
- on this screen; it is best to use the aforementioned links to make those items\r
- bookable. In this screen, you will create a type of resource.</para>\r
- </step>\r
- <step>\r
- <para>In the right corner, click <guibutton>New Resource Type</guibutton>.</para>\r
- </step>\r
- <step>\r
- <para>A box will appear in which you will create a type of resource. In this box, you\r
- can set fines, determine “elbow room” periods between reservations on this type of\r
- resource, and indicate if this type of resource can be transferred to another\r
- library. Click <guibutton>Save</guibutton> when you have entered the needed\r
- information.</para>\r
- </step>\r
- <step>\r
- <para>After you click <guibutton>Save</guibutton>, the box will disappear. Refresh the\r
- screen to see the item that you have added.</para>\r
- </step>\r
- <step>\r
- <para>Next, set the attributes for the type of resource that you have created. Select <menuchoice>\r
- <guimenu>Server Administration</guimenu>\r
- <guisubmenu>Booking</guisubmenu>\r
- <guimenuitem>Resource Attributes</guimenuitem>\r
- </menuchoice>.</para>\r
- </step>\r
-\r
- <step>\r
- <para>Click <guibutton>New Resource Attribute</guibutton>.</para>\r
- </step>\r
-\r
- <step>\r
- <para>A box will appear in which you can add the attributes of the resource. Attributes\r
- are descriptive information that is provided to the staff member when the booking\r
- request is made. For example, an attribute of the projector may be a cart that allows\r
- for its transportation. Other attributes might be number of seats available in a\r
- room, or MAC or PC attributes for a laptop. Click <guibutton>Save</guibutton> when\r
- the necessary information has been entered.</para>\r
- </step>\r
-\r
- <step>\r
- <para>The box will disappear. Refresh the screen to see the added attribute.</para>\r
- </step>\r
-\r
- <step>\r
- <para>Next, add the values for the resource attributes. A value can be a number, yes/no,\r
- or any other meaningful information. Select <menuchoice>\r
- <guimenu>Server Administration</guimenu>\r
- <guisubmenu>Booking</guisubmenu>\r
- <guimenuitem>Resource Attribute Values</guimenuitem>\r
- </menuchoice>.</para>\r
- </step>\r
-\r
- <step>\r
- <para>Select <guibutton>New Resource Attribute Value</guibutton>.</para>\r
- </step>\r
-\r
- <step>\r
- <para>A pop up box will appear. Select the <guilabel>Resource Attribute</guilabel> from\r
- the drop down box. Add the value. You can add multiple values for this field. Click\r
- <guibutton>Save</guibutton> when the required information has been added.</para>\r
- </step>\r
-\r
- <step>\r
- <para>If you refresh the screen, the attribute value may not appear, but it has been\r
- saved.</para>\r
- </step>\r
-\r
- <step>\r
- <para>Next, identify the specific objects that are associated with this resource type.\r
- Click <menuchoice>\r
- <guimenu>Admin</guimenu>\r
- <guisubmenu>Server Administration</guisubmenu>\r
- <guisubmenu>Booking</guisubmenu>\r
- <guimenuitem>Resources</guimenuitem>\r
- </menuchoice>.</para>\r
- </step>\r
-\r
- <step>\r
- <para>Click <guibutton>New Resource</guibutton>.</para>\r
- </step>\r
-\r
- <step>\r
- <para>A pop-up box will appear. Add information for the resource and click\r
- <guibutton>Save</guibutton>. Repeat this process for each resource.</para>\r
- </step>\r
-\r
- <step>\r
- <para>Refresh the screen, and the resource(s) that you added will appear.</para>\r
- </step>\r
-\r
- <step>\r
- <para>Finally, use <guilabel>Resource Attribute Maps</guilabel> to bring together the\r
- resource and its attributes. Select <menuchoice>\r
- <guimenu>Admin</guimenu>\r
- <guisubmenu>Server Administration</guisubmenu>\r
- <guisubmenu>Booking</guisubmenu>\r
- <guimenuitem>Resource Attribute Maps</guimenuitem>\r
- </menuchoice>.</para>\r
- </step>\r
-\r
- <step>\r
- <para>Select <guibutton>New Resource Attribute Map</guibutton></para>\r
- </step>\r
-\r
- <step>\r
- <para>Select the resource that you want to match with its attributes, then click\r
- <guibutton>Save</guibutton>. Repeat for all applicable resources.</para>\r
- </step>\r
-\r
- <step>\r
- <para>You have now created bookable, non-bibliographic resource(s) with\r
- attributes.</para>\r
- </step>\r
-\r
- </procedure>\r
- </section>\r
- <section xml:id="SettingBookingPermissions">\r
- <title>Setting Booking Permissions</title>\r
- <indexterm><primary>booking reservation</primary><secondary>setting booking permissions</secondary></indexterm>\r
- <para>Administrators can set permissions so that staff members can view reservations, make\r
- reservations, and make bibliographic or non-bibliographic items bookable.</para>\r
-\r
- <para>If a staff member attempts to book an item for which they do not have the appropriate\r
- permissions, they will receive an error message.</para>\r
-\r
- <para>To set permissions, select <menuchoice>\r
- <guimenu>Admin</guimenu>\r
- <guisubmenu>Server Administration</guisubmenu>\r
- <guimenuitem>Permissions</guimenuitem>\r
- </menuchoice>.</para>\r
-\r
- <para>Staff members should be assigned the following permissions to do common tasks in the\r
- booking module. These permissions could be assigned to front line staff members, such as\r
- circulation staff. Permissions with an asterisk (<emphasis role="bold">*</emphasis>) are\r
- already included in the <emphasis role="bold">Staff</emphasis> permission group. All other\r
- booking permissions must be applied individually.</para>\r
-\r
- <itemizedlist>\r
- <listitem>\r
- <para><emphasis role="bold">View Reservations:</emphasis> VIEW_TRANSACTION*</para>\r
- </listitem>\r
- <listitem>\r
- <para><emphasis role="bold">Use the pull list:</emphasis>\r
- RETRIEVE_RESERVATION_PULL_LIST</para>\r
- </listitem>\r
- <listitem>\r
- <para><emphasis role="bold">Capture reservations:</emphasis> CAPTURE_RESERVATION</para>\r
- </listitem>\r
- <listitem>\r
- <para><emphasis role="bold">Assist patrons with pickup and return:</emphasis>\r
- VIEW_USER*</para>\r
- </listitem>\r
- <listitem>\r
- <para><emphasis role="bold">Create/update/delete reservations:</emphasis>\r
- ADMIN_BOOKING_RESERVATION</para>\r
- </listitem>\r
- </itemizedlist>\r
-\r
- <para>The following permissions allow users to do more advanced tasks, such as making items\r
- bookable, booking items on the fly, and creating non-bibliographic resources for\r
- booking.</para>\r
-\r
- <itemizedlist>\r
- <listitem>\r
- <para><emphasis role="bold">Create/update/delete booking resource type:</emphasis>\r
- ADMIN_BOOKING_RESOURCE_TYPE</para>\r
- </listitem>\r
- <listitem>\r
- <para><emphasis role="bold">Create/update/delete booking resource attributes:</emphasis>\r
- ADMIN_BOOKING_RESOURCE_ATTR</para>\r
- </listitem>\r
- <listitem>\r
- <para><emphasis role="bold">Create/update/delete booking resource attribute\r
- values:</emphasis> ADMIN_BOOKING_RESOURCE_ATTR_VALUE</para>\r
- </listitem>\r
- <listitem>\r
- <para><emphasis role="bold">Create/update/delete booking resource:</emphasis>\r
- ADMIN_BOOKING_RESOURCE</para>\r
- </listitem>\r
- <listitem>\r
- <para><emphasis role="bold">Create/update/delete booking resource attribute\r
- maps:</emphasis> ADMIN_BOOKING_RESOURCE_ATTR_MAP</para>\r
- </listitem>\r
- </itemizedlist>\r
-\r
- <para>In addition to having the permissions listed above, staff members will need a valid\r
- working location in their profiles. This should be done when registering new staff members.</para>\r
-\r
- <!-- Pages 14-16 of source document from http://evergreen-ils.org/dokuwiki/doku.php?id=booking ommitted at conversion (Jeremy Buhler, Oct 6 2010). Rationale: subject is covered elsewhere in the Book of Evergreen and it confuses 'working location' with 'home library', both of which should already be set for all staff accounts. -->\r
-\r
- </section>\r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<chapter xml:id="lsa" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
- <info>\r
- <title>Local Administration Menu</title>\r
- </info>\r
- <section>\r
- <info>\r
- <title>Overview</title>\r
- </info>\r
- <para>Many Evergreen configuration options are available under the <menuchoice>\r
- <guimenu>Admin (-)</guimenu>\r
- <guimenuitem>Local Administration</guimenuitem>\r
- </menuchoice> rollover menu.</para>\r
- <para>Settings are also available from the <guilabel>Local Administration</guilabel> page.</para>\r
- <para>Either access point can be used, but examples in this manual use the more comprehensive\r
- <guilabel>Local Administration</guilabel> rollover menu.</para>\r
- <para>Items on this menu are visible to anyone logged into the staff client but usually\r
- require special permissions to edit. The following table describes each of the menu options. </para>\r
- <informaltable>\r
- <tgroup cols="2" align="left" colsep="1" rowsep="1">\r
- <colspec colnum="1" colname="menu" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="description" colwidth="3.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Menu option</entry>\r
- <entry>Description</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- <row>\r
- <entry>\r
- <link linkend="lsa-receipt">Receipt Template Editor</link>\r
- </entry>\r
- <entry>Customize printed receipts (checkout receipts, hold slips, etc) for a\r
- single workstation</entry> \r
- </row>\r
- <row>\r
- <entry>\r
- <link linkend="lsa-font">Global Font and Sound Settings</link>\r
- </entry>\r
- <entry>Change font size and sound settings for a single workstation</entry> \r
- </row>\r
- <row>\r
- <entry>\r
- <link linkend="lsa-printer">Printer Settings Editor</link>\r
- </entry>\r
- <entry>Configure printer settings for a single workstation</entry> \r
- </row>\r
- <row>\r
- <entry>\r
- <link linkend="lsa-closed">Closed Dates Editor</link>\r
- </entry>\r
- <entry>Set library closure dates (affects due dates and fines)</entry> \r
- </row>\r
- <row>\r
- <entry>\r
- <link linkend="lsa-copy-locations">Copy Locations Editor</link>\r
- </entry>\r
- <entry>Create and edit copy locations, also known as shelving locations</entry> \r
- </row>\r
- <row>\r
- <entry>\r
- <link linkend="lsa-library-settings">Library Settings Editor</link>\r
- </entry>\r
- <entry>Detailed library configuration settings</entry> \r
- </row>\r
- <row>\r
- <entry>\r
- <link linkend="lsa-noncat">Non-Catalogued Type Editor</link>\r
- </entry>\r
- <entry>Create and edit optional <guilabel>non-catalogued</guilabel> item\r
- types</entry> \r
- </row>\r
-\r
- <row>\r
- <entry>\r
- <link linkend="lsa-statcat">Statistical Categories Editor</link>\r
- </entry>\r
- <entry>Create and manage optional categories for detailed patron/item\r
- information</entry> \r
- </row>\r
- <row>\r
- <entry>Standing Penalties</entry>\r
- <entry>\r
- <emphasis>admin settings</emphasis>\r
- </entry> \r
- </row>\r
- <row xml:id="lsa-group-penalty-table-entry">\r
- <entry>\r
- <link linkend="lsa-group-penalty">Group Penalty Thresholds</link>\r
- </entry>\r
- <entry> Set library-specific thresholds for maximum items out, maximum overdues,\r
- and maximum fines </entry> \r
- </row>\r
- <row>\r
- <entry>Field Documentation</entry>\r
- <entry>\r
- <emphasis>admin settings</emphasis>\r
- </entry> \r
- </row>\r
- <row>\r
- <entry>Notifications / Action Triggers</entry>\r
- <entry>\r
- <emphasis>admin settings</emphasis>\r
- </entry> \r
- </row>\r
- <row>\r
- <entry>\r
- <link linkend="lsa-survey">Surveys</link>\r
- </entry>\r
- <entry>Create patron surveys to be completed at patron registration</entry> \r
- </row>\r
- <row>\r
- <entry>\r
- Reports\r
- </entry>\r
- <entry>Generate reports on any field in the Evergreen database</entry> \r
- </row>\r
- <row>\r
- <entry>\r
- <link linkend="lsa-cash-reports">Cash Reports</link>\r
- </entry>\r
- <entry>View summary report of cash transactions for selected date range</entry> \r
- </row>\r
- <row>\r
- <entry>\r
- Transit List\r
- </entry>\r
- <entry>View items in transit to or from your library during selected date\r
- range</entry> \r
- </row>\r
- <row>\r
- <entry>Circulation Policies</entry>\r
- <entry>\r
- <emphasis>admin settings</emphasis>\r
- </entry> \r
- </row>\r
- <row>\r
- <entry>Hold Policies</entry>\r
- <entry>\r
- <emphasis>admin settings</emphasis>\r
- </entry>\r
- </row>\r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- </section>\r
- <section xml:id="lsa-receipt">\r
- <info>\r
- <title>Receipt Template Editor</title>\r
- <indexterm><primary>receipt template editor</primary></indexterm>\r
- </info>\r
-\r
- <para>This tip sheet will show you how to customize your receipts. This example will walk you\r
- through how to customize the receipt that is printed on checkout. </para>\r
-\r
- <para>Receipt templates are saved on the workstation, but it is possible to export the templates\r
- to import to other workstations. </para>\r
-\r
-<procedure>\r
-\r
- <step>\r
- <para>Select <menuchoice><guimenu>Admin (-)</guimenu><guisubmenu>Local Administration</guisubmenu><guimenuitem>Receipt Template Editor</guimenuitem></menuchoice>. </para>\r
- </step>\r
-\r
-\r
- <step>\r
- \r
- <para>Select the <guimenuitem>checkout</guimenuitem> template from the dropdown menu.\r
- </para>\r
- </step>\r
-\r
-\r
- <step>\r
- <para>You can edit the <guilabel>Header</guilabel>, <guilabel>Line\r
- Item</guilabel> or <guilabel>Footer</guilabel> on the right hand side. </para> \r
- </step>\r
-\r
- \r
- <step><para>In the upper right hand corner you can see the available macros by clicking on the\r
- <guibutton>Macros</guibutton> button. A macro prints a real value from the database.\r
- The macros that are available\r
- vary slightly between types of receipt templates (i.e. bills, holds, items). </para>\r
- </step>\r
-\r
- \r
- <step><informalfigure> <para>Here are the available macros for an item receipt, like a checkout receipt. </para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject role="html">\r
- <imagedata scalefit="0" fileref="../media/receipt-5.jpg"/>\r
- </imageobject>\r
- <imageobject role="fo">\r
- <imagedata scale="80" fileref="../media/receipt-5.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para></informalfigure></step>\r
- \r
- </procedure>\r
- \r
- <simplesect>\r
- <info>\r
- <title>Adding an image</title>\r
- </info>\r
-\r
-<procedure> \r
- <step><para>You can edit the <guilabel>Header</guilabel> to have an image. This is the default checkout <guilabel>Header</guilabel>.\r
- </para>\r
- </step>\r
-\r
- \r
- <step><para>Using HTML tags you can insert a link to an image that exists on the web. The\r
- link will end in <emphasis>.jpg</emphasis> or possibly <emphasis>.gif</emphasis>. To\r
- get this link you can right click on the image and choose <guimenuitem>Copy Image\r
- Location</guimenuitem> (<application>Firefox</application>). </para>\r
- \r
-<para>If you are using <application>Internet Explorer</application> right click and select <guimenuitem>Save Picture\r
- As…</guimenuitem>\r
- </para>\r
-\r
- </step>\r
-\r
- <step> <para>Enter the URL of the\r
- link for the image that you just copied off a website. </para>\r
- \r
-<para>By clicking outside the <guilabel>Header</guilabel> box the <guilabel>Preview</guilabel> will update to reflect the edit you just\r
- made. </para>\r
-\r
- </step>\r
- \r
- <step><para>If the image runs into the text, add a <br/> after the\r
- image to add a line break.</para>\r
- </step></procedure> \r
- <tip><para>You may use most HTML tags. See <link xlink:title="http://www.w3schools.com/html/" xlink:href="http://www.w3schools.com/html/">http://www.w3schools.com/html/</link> for more information on HTML tags. </para></tip>\r
- </simplesect>\r
- <simplesect>\r
- <info>\r
- <title>Line Item</title>\r
- </info>\r
-\r
- <informalfigure> <para>This is what the default <guilabel>Line Item</guilabel> looks like:</para>\r
- \r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject role="html">\r
- <imagedata scalefit="1" fileref="../media/receipt-11.jpg"/>\r
- </imageobject>\r
- <imageobject role="fo">\r
- <imagedata scalefit="1" width="100%" contentdepth="100%"\r
- fileref="../media/receipt-11.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para></informalfigure>\r
-\r
- <para>In this example, the macro %barcode% prints the item barcodes of the books that were\r
- checked out. The macro %due_date% prints the due date for each item that was checked out.\r
- </para>\r
-\r
- <para>In this example, we will not make any changes to the <guilabel>Line Item</guilabel></para>\r
-\r
- \r
- <note> <para>The due date can only be printed in the YYYY-MM-DD format. </para></note>\r
-\r
- </simplesect>\r
- <simplesect>\r
- <info>\r
- <title>Editing the footer</title>\r
- </info>\r
-\r
- \r
-<procedure> <step><informalfigure> <para>This is what the default <guilabel>Footer</guilabel> looks like:</para>\r
- \r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject role="html">\r
- <imagedata scalefit="1" fileref="../media/receipt-12.jpg"/>\r
- </imageobject>\r
- <imageobject role="fo">\r
- <imagedata scalefit="1" width="100%" contentdepth="100%"\r
- fileref="../media/receipt-12.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para></informalfigure></step>\r
-\r
- \r
- <step><informalfigure><para>Remove the “You were helped by %STAFF_FIRSTNAME% <br/>”. As many\r
- libraries use a generic circulation login on the circulation desk, the “You were\r
- helped by…” note isn’t meaningful. </para>\r
- \r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject role="html">\r
- <imagedata scalefit="1" fileref="../media/receipt-13.jpg"/>\r
- </imageobject>\r
- <imageobject role="fo">\r
- <imagedata scalefit="1" width="100%" contentdepth="100%"\r
- fileref="../media/receipt-13.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para></informalfigure></step>\r
-\r
- <step><informalfigure> <para>Once you have the checkout template how you want it, click <guibutton>Save Locally</guibutton> to save\r
- the template to your computer. </para>\r
- \r
-\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/receipt-15.jpg"/>\r
- </imageobject>\r
- \r
- </mediaobject>\r
- </para></informalfigure></step>\r
-\r
- \r
- <step><informalfigure><para>Click OK.</para>\r
- \r
-\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject role="html">\r
- <imagedata scalefit="0" fileref="../media/receipt-16.png"/>\r
- </imageobject>\r
- <imageobject role="fo">\r
- <imagedata scale="80" fileref="../media/receipt-16.png"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para></informalfigure></step></procedure>\r
- \r
- <tip> <para>The footer is a good place to advertise upcoming library programs or events. </para></tip>\r
- \r
- </simplesect>\r
- <simplesect>\r
- <info>\r
- <title>Exporting templates</title>\r
- </info>\r
-\r
- <para>As you can only save a template on to the computer you are working on you will need to\r
- export the template if you have more than one computer that prints out receipts (i.e., more\r
- than one computer on the circulation desk, or another computer in the workroom that you use\r
- to checkin items or capture holds with).</para>\r
-\r
- \r
-<procedure> <step><informalfigure> <para>Click on <guilabel>Export</guilabel>. </para>\r
- \r
-\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject role="html">\r
- <imagedata scalefit="0" fileref="../media/receipt-17.jpg"/>\r
- </imageobject>\r
- <imageobject role="fo">\r
- <imagedata scale="80" fileref="../media/receipt-17.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
-</informalfigure></step>\r
- \r
- \r
- \r
- <step><informalfigure><para>Select the location to save the template to, name the template, and click <guibutton>Save</guibutton>.\r
- </para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject role="html">\r
- <imagedata scalefit="0" fileref="../media/receipt-18.jpg"/>\r
- </imageobject>\r
- <imageobject role="fo">\r
- <imagedata scale="80" fileref="../media/receipt-18.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
-</informalfigure></step>\r
- \r
- \r
- \r
- <step><informalfigure><para>Click <guibutton>OK</guibutton>. </para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject role="html">\r
- <imagedata scalefit="0" fileref="../media/receipt-19.jpg"/>\r
- </imageobject>\r
- <imageobject role="fo">\r
- <imagedata scale="80" fileref="../media/receipt-19.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para></informalfigure></step></procedure>\r
-\r
- </simplesect>\r
- <simplesect>\r
- <info>\r
- <title>Importing Templates</title>\r
- </info>\r
-<procedure>\r
- \r
- <step><informalfigure> <para>Click <guibutton>Import</guibutton>.</para>\r
- \r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject role="html">\r
- <imagedata scalefit="0" fileref="../media/receipt-20.jpg"/>\r
- </imageobject>\r
- <imageobject role="fo">\r
- <imagedata scale="80" fileref="../media/receipt-20.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para></informalfigure></step>\r
-\r
- \r
- <step><informalfigure><para>Navigate to and select the template that you want to import. Click <guibutton>Open</guibutton>. </para>\r
- \r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject role="html">\r
- <imagedata scalefit="0" fileref="../media/receipt-21.jpg"/>\r
- </imageobject>\r
- <imageobject role="fo">\r
- <imagedata scale="80" fileref="../media/receipt-21.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para></informalfigure></step>\r
-\r
- \r
- <step><informalfigure> <para>Click <guibutton>OK</guibutton>.</para>\r
- \r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject role="html">\r
- <imagedata scalefit="0" fileref="../media/receipt-22.jpg"/>\r
- </imageobject>\r
- <imageobject role="fo">\r
- <imagedata scale="80" fileref="../media/receipt-22.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para></informalfigure></step>\r
-\r
- \r
- \r
- <step><informalfigure><para>Click <guibutton>Save Locally</guibutton>.</para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject role="html">\r
- <imagedata scalefit="0" fileref="../media/receipt-23.jpg"/>\r
- </imageobject>\r
- <imageobject role="fo">\r
- <imagedata scale="80" fileref="../media/receipt-23.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para></informalfigure></step>\r
-\r
- \r
- <step><informalfigure><para>Click <guibutton>OK</guibutton>.</para>\r
- \r
-\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject role="html">\r
- <imagedata scalefit="0" fileref="../media/receipt-24.jpg"/>\r
- </imageobject>\r
- <imageobject role="fo">\r
- <imagedata scale="80" fileref="../media/receipt-24.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para></informalfigure></step></procedure>\r
- </simplesect>\r
-</section>\r
- <section xml:id="lsa-font">\r
- <info>\r
- <title>Global Font and Sound Settings</title>\r
- <indexterm><primary>staff client</primary><secondary>fonts</secondary></indexterm>\r
- \r
- </info>\r
- <para><guilabel>Global Font and Sound Settings</guilabel> apply to the current workstation\r
- only. Use to turn staff client sounds on/off or to adjust the font size in the staff client\r
- interface. These settings do not affect OPAC font sizes.</para>\r
- <procedure>\r
- <step>\r
- <para>Select <menuchoice>\r
- <guimenu>Admin (-)</guimenu>\r
- <guisubmenu>Local Administration</guisubmenu>\r
- <guimenuitem>Global Font and Sound Settings</guimenuitem>\r
- </menuchoice>.</para>\r
- </step>\r
- <step>\r
- <informalfigure>\r
- <indexterm><primary>staff client</primary><secondary>sounds</secondary></indexterm>\r
- <para>To turn off the system sounds, like the noise that happens when a patron with a\r
- block is retrieved check the <guilabel>disable sound</guilabel> box and click\r
- <guibutton>Save to Disk</guibutton>. </para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/lsa-4.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </step>\r
- <step>\r
- <informalfigure>\r
- <para>To change the size of the font, pick the desired option and click\r
- <guibutton>Save to Disk</guibutton>. </para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/lsa-5.jpg"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </step>\r
- </procedure>\r
- </section>\r
- <section xml:id="lsa-printer">\r
- <info>\r
- <title>Printer Settings Editor</title>\r
- <indexterm><primary>staff client</primary><secondary>printer settings</secondary></indexterm>\r
- </info>\r
- <para>Use the <guilabel>Printer Settings Editor</guilabel> to configure printer output for\r
- each workstation.</para>\r
- <procedure>\r
- <step>\r
- <para>Select <menuchoice>\r
- <guimenu>Admin (-)</guimenu>\r
- <guisubmenu>Local Administration</guisubmenu>\r
- <guimenuitem>Printer Settings Editor</guimenuitem>\r
- </menuchoice>.</para>\r
- </step>\r
- <step>\r
- <informalfigure>\r
- <para>From this screen you can print a test page, or alter the page settings for your\r
- receipt printer. </para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata width="100%" scalefit="1" fileref="../media/lsa-7.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </step>\r
- <step>\r
- <informalfigure>\r
- <para>Click on <guibutton>Page Settings</guibutton> to change printing format and\r
- option settings. Click on the <guilabel>Margins &\r
- Header/Footer</guilabel> tab to adjust </para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/lsa-8.jpg"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </step>\r
- </procedure>\r
- </section>\r
- <section xml:id="lsa-closed">\r
- <info>\r
- <title>Closed Dates Editor</title>\r
- <indexterm><primary>closed dates editor</primary></indexterm>\r
- </info>\r
- <para>These dates are in addition to your regular weekly closed days. Both regular closed days and those entered in the\r
- <guilabel>Closed Dates Editor</guilabel> affect due dates and fines:</para>\r
- <itemizedlist>\r
- <listitem>\r
- <formalpara>\r
- <title>Due dates</title>\r
- <indexterm><primary>closed dates editor</primary><secondary>due dates</secondary></indexterm>\r
- <para>Due dates that would fall on closed days are automatically pushed forward to\r
- the next open day. Likewise, if an item is checked out at 8pm, for example, and\r
- would normally be due on a day when the library closes before 8pm, Evergreen\r
- pushes the due date forward to the next open day.</para>\r
- </formalpara>\r
- </listitem>\r
- <listitem>\r
- <formalpara>\r
- <title>Overdue fines</title>\r
- <indexterm><primary>closed dates editor</primary><secondary>fines</secondary></indexterm>\r
- <para>Overdue fines are not charged on days when the library is closed.</para>\r
- </formalpara>\r
- </listitem>\r
- </itemizedlist> \r
- <simplesect>\r
- <title>Multi-Day Closing</title>\r
- <procedure>\r
- <step>\r
- <para>Select <menuchoice>\r
- <guimenu>Admin (-)</guimenu>\r
- <guisubmenu>Local Administration</guisubmenu>\r
- <guimenuitem>Closed Dates Editor</guimenuitem>\r
- </menuchoice>.</para>\r
- </step>\r
- <step xml:id="lsa-multi-day-select">\r
- <informalfigure>\r
- <para>Select <guibutton>Add Multi-Date Closing</guibutton> if your closed dates\r
- are entire business days.</para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/lsa-10.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </step>\r
- <step>\r
- <informalfigure>\r
- <para>Enter applicable dates and a descriptive reason for the closing and click\r
- <guibutton>Save</guibutton>. Check the <guilabel>Apply to all of my\r
- libraries</guilabel> box if your library is a multi-branch system and the\r
- closing applies to all of your branches. </para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/lsa-11.jpg"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </step>\r
- </procedure>\r
- <tip>\r
- <para>You can type dates into fields using YYYY-MM-DD format or use calendar widgets to\r
- choose dates.</para>\r
- </tip>\r
- </simplesect>\r
- <simplesect>\r
- <title>Detailed Closing</title>\r
- <informalfigure>\r
- <para>If your closed dates include a portion of a business day, select Add Detailed\r
- Closing at <xref linkend="lsa-multi-day-select"/>, then enter detailed hours and\r
- dates and click <guibutton>Save</guibutton>. Time format must be HH:MM.</para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/lsa-12.jpg"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </simplesect> \r
- </section>\r
- <section xml:id="lsa-copy-locations">\r
- <info>\r
- <title>Copy Locations Editor</title>\r
- <indexterm><primary>copy locations editor</primary></indexterm>\r
- </info>\r
- <procedure>\r
- <step>\r
- <para>Select <menuchoice>\r
- <guimenu>Admin (-)</guimenu>\r
- <guisubmenu>Local Administration</guisubmenu>\r
- <guimenuitem>Copy Locations Editor</guimenuitem>\r
- </menuchoice>.</para>\r
- </step>\r
- <step>\r
- <informalfigure>\r
- <para>You can create new copy locations, or edit existing copy locations. To create a\r
- new shelving location type in the name, and select <guilabel>Yes</guilabel> or\r
- <guilabel>No</guilabel> for the various attributes: <guilabel>OPAC Visible,\r
- Holdable, Circulate,</guilabel> and <guilabel>Hold Verify</guilabel>.\r
- <guilabel>Holdable</guilabel> means a patron is able to place a hold on an item\r
- in this location; <guilabel>Hold Verify</guilabel> means staff will be prompted\r
- before an item is captured for a hold. Finally click\r
- <guibutton>Create</guibutton>.</para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/lsa-14.jpg"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </step>\r
- <step>\r
- <informalfigure>\r
- <para>In the bottom part of the <guilabel>Copy Locations Editor</guilabel> you can\r
- edit or delete existing copy locations. You cannot delete a location that contains\r
- items. In this example the copy location <guilabel>Adult Videos</guilabel> is\r
- being edited.</para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata width="100%" scalefit="1" fileref="../media/lsa-16.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </step>\r
- </procedure>\r
- <tip>\r
- <para>There are also options in the <guilabel>Copy Editor</guilabel> for a copy to be\r
- <guilabel>OPAC Visible</guilabel>-yes or no, <guilabel>Holdable</guilabel>-yes or no,\r
- or <guilabel>Circulate</guilabel>-yes or no. If either the copy record or the shelving\r
- location is set to Circulate-no, then the item will not be able to circulate.</para>\r
- </tip>\r
- <informalfigure>\r
- <para>This is where you see the shelving locations in the <guilabel>Copy\r
- Editor</guilabel>:</para>\r
-\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/lsa-17.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- <para>This is where the shelving location appears in the OPAC.</para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/lsa-18.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
- </section>\r
- <section xml:id="lsa-library-settings">\r
- <info>\r
- <title>Library Settings Editor</title>\r
- <indexterm><primary>library settings editor</primary></indexterm>\r
- </info>\r
- <para>With the <guilabel>Library Settings Editor</guilabel> Local System Admnistrators (LSAs)\r
- can optionally customize Evergreen's behaviour for a particular library or library system.\r
- For descriptions of available settings see the <link\r
- linkend="lsa-library-settings-overview">Settings Overview</link> table below. \r
- </para>\r
- <para>To open the <guilabel>Library Settings Editor</guilabel> select <menuchoice>\r
- <guimenu>Admin (-)</guimenu>\r
- <guisubmenu>Local Adminstration</guisubmenu>\r
- <guimenuitem>Library Settings Editor</guimenuitem>\r
- </menuchoice>. </para>\r
- <simplesect>\r
- <title>Settings Overview</title>\r
- <para>This table describes available settings and shows which LSAs can change on a\r
- per-library basis. Below the table is a list of <link\r
- linkend="lsa-library-settings-data">data types</link> with details about acceptable\r
- settings values.</para>\r
- <informaltable xml:id="lsa-library-settings-overview">\r
- <tgroup cols="4" align="left" colsep="1" rowsep="1">\r
- <colspec colnum="1" colname="setting" colwidth="2.0*"/>\r
- <colspec colnum="2" colname="description" colwidth="3.0*"/>\r
- <colspec colnum="3" colname="type" colwidth="1.0*"/>\r
- <colspec colnum="4" colname="notes" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Setting</entry>\r
- <entry>Description</entry>\r
- <entry>Data type</entry>\r
- <entry>Notes</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- <row>\r
- <entry>Alert on empty bib records</entry>\r
- <entry>Alert staff before the last copy for a record is deleted</entry>\r
- <entry><link linkend="lsa-data-types">True/false</link></entry>\r
- <entry></entry>\r
- </row>\r
- <row>\r
- <entry>Allow Credit Card Payments</entry>\r
- <entry>Not available</entry>\r
- <entry><link linkend="lsa-data-types">True/false</link></entry> \r
- <entry></entry>\r
- </row>\r
- <row>\r
- <entry>Change reshelving status interval</entry>\r
- <entry>Amount of time to wait before changing an item from “reshelving” status\r
- to “available”</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">Duration</link>\r
- </entry>\r
- <entry></entry>\r
- </row>\r
- <row>\r
- <entry>Charge item price when marked damaged </entry>\r
- <entry>If true Evergreen bills item price to the last patron who checked out\r
- the damaged item. Staff receive an alert with patron information and must\r
- confirm the billing.</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">True/false</link>\r
- </entry>\r
- <entry>\r
- </entry>\r
- </row>\r
- <row>\r
- <entry>Charge processing fee for damaged items</entry>\r
- <entry>Optional processing fee billed to last patron who checked out the\r
- damaged item. Staff receive an alert with patron information and must\r
- confirm the billing.</entry>\r
- <entry><link linkend="lsa-data-types">Number</link> (dollars)</entry>\r
- <entry>Disabled when set to 0</entry>\r
- </row>\r
- <row>\r
- <entry>Circ: Lost items usable on checkin</entry>\r
- <entry>Lost items are usable on checkin instead of going 'home' first</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">True/false</link>\r
- </entry>\r
- <entry/>\r
- </row>\r
- <row>\r
- <entry>Circ: Restore overdues on lost item return</entry>\r
- <entry>If true when a lost item is checked in overdue fines are charged (up to\r
- the maximum fines amount)</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">True/false</link>\r
- </entry>\r
- \r
- <entry/>\r
- </row>\r
-\r
- <row>\r
- <entry>Circ: Void lost item billing when returned</entry>\r
- <entry>If true,when a lost item is checked in the item replacement bill (item\r
- price) is voided. If the patron has already paid the bill a credit is\r
- applied.</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">True/false</link>\r
- </entry>\r
- \r
- <entry/>\r
- </row>\r
-\r
- <row>\r
- <entry>Circ: Void lost max interval</entry>\r
- <entry>Items that have been lost this long will not result in voided billings\r
- when returned. Only applies if <guilabel>Circ: Void lost item\r
- billing</guilabel> or <guilabel>Circ: Void processing fee on lost\r
- item</guilabel> are true.</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">Duration</link>\r
- </entry>\r
- \r
- <entry/>\r
- </row>\r
-\r
- <row>\r
- <entry>Circ: Void processing fee on lost item return</entry>\r
- <entry>If true the processing fee is voided when a lost item is\r
- returned</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">True/false</link>\r
- </entry>\r
- \r
- <entry/>\r
- </row>\r
-\r
- <row>\r
- <entry>Default Item Price</entry>\r
- <entry>Replacement charge for lost items if price is unset in the <guilabel>Copy Editor</guilabel>. \r
- Does not apply if item price is set to $0</entry>\r
- <entry><link linkend="lsa-data-types">Number</link> (dollars)</entry>\r
- \r
- <entry/>\r
- </row>\r
-\r
- <row>\r
- <entry>Default locale</entry>\r
- <entry>Sets language used in staff client</entry>\r
- <entry><link linkend="lsa-data-types">Text</link> (dollars)</entry>\r
- \r
- <entry>Can be set for each workstation at login</entry>\r
- </row>\r
-\r
- <row xml:id="lsa-do-not-automatically-delete">\r
- <entry>Do not automatically delete empty bib records</entry>\r
- <entry>If false bib records (aka MARC records) will automatically be deleted\r
- when the last attached volume is deleted </entry>\r
- <entry>\r
- <link linkend="lsa-data-types">True/false</link>\r
- </entry>\r
- \r
- <entry>Set to <emphasis>false</emphasis> to avoid orphaned bib records</entry>\r
- </row>\r
-\r
- <row xml:id="lsa-library-settings-button">\r
- <entry>GUI: Above-Tab Button Bar </entry>\r
- <entry>If true the staff client button bar\r
- appears by default on all workstations registered to your library; staff can\r
- override this setting at each login.</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">True/false</link>\r
- </entry>\r
- \r
- <entry/>\r
- </row>\r
-\r
- <row xml:id="lsa-library-settings-horizontal">\r
- <entry>GUI: Alternative Horizontal Patron Summary Panel</entry>\r
- <entry>If true replaces the vertical patron summary panel with a horizontal one\r
- on all workstations registered to your library</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">True/false</link>\r
- </entry>\r
- \r
- <entry/>\r
- </row>\r
-\r
- <row>\r
- <entry>GUI: Network Activity Meter</entry>\r
- <entry>If true displays a progress bar when the staff client is sending or\r
- receiving information from the Evergreen server</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">True/false</link>\r
- </entry>\r
- \r
- <entry/>\r
- </row>\r
- <row>\r
- <entry>GUI: Patron display timeout interval</entry>\r
- <entry>Patron accounts opened in the staff client will close if inactive for\r
- this period of time</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">Duration</link>\r
- </entry>\r
- \r
- <entry>Not functional in this version of Evergreen</entry>\r
- </row>\r
-\r
- <row>\r
- <entry>Holds: Estimated Wait (Days) </entry>\r
- <entry>Average number of days between check out and check in, multiplied by a\r
- patron's position in the hold queue to estimate wait for holds</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">Number</link>\r
- </entry>\r
- \r
- <entry>Not yet implemented</entry>\r
- </row>\r
-\r
- <row>\r
- <entry>Holds: Expire Alert Interval</entry>\r
- <entry>Time before a hold expires at which to send an email notifying the\r
- patron</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">Duration</link>\r
- </entry>\r
- \r
- <entry>Only applies if your library notifies patrons of expired holds. </entry>\r
- </row>\r
-\r
- <row>\r
- <entry>Holds: Expire Interval</entry>\r
- <entry>Amount of time until an unfulfilled hold expires</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">Duration</link>\r
- </entry>\r
- \r
- <entry/>\r
- </row>\r
-\r
- <row>\r
- <entry>Holds: Hard boundary</entry>\r
- <entry>Administrative setting</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">Number</link>\r
- </entry>\r
- \r
- <entry/>\r
- </row>\r
- <row>\r
- <entry>Holds: Soft boundary</entry>\r
- <entry>Administrative setting</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">Number</link>\r
- </entry>\r
- \r
- <entry/>\r
- </row>\r
-\r
- <row>\r
- <entry>Holds: Soft stalling interval</entry>\r
- <entry>Administrative setting</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">Duration</link>\r
- </entry>\r
- \r
- <entry/>\r
- </row>\r
- <row>\r
- <entry>Juvenile Age Threshold</entry>\r
- <entry>Upper cut-off age for patrons to be considered juvenile, calculated from\r
- date of birth in patron accounts</entry>\r
- <entry><link linkend="lsa-data-types">Duration</link> (years)</entry>\r
- \r
- <entry/>\r
- </row>\r
-\r
- <row>\r
- <entry>Lost Materials Processing Fee</entry>\r
- <entry>The amount charged in addition to item price when an item is marked los.\r
- </entry>\r
- <entry><link linkend="lsa-data-types">Number</link> (dollars)</entry>\r
- \r
- <entry/>\r
- </row>\r
-\r
- <row>\r
- <entry>Maximum previous checkouts displayed</entry>\r
- <entry>Number of previous circulations displayed in staff client</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">Number</link>\r
- </entry>\r
- \r
- <entry/>\r
- </row>\r
- <row>\r
- <entry>OPAC Inactivity Timeout (in seconds)</entry>\r
- <entry>Number of seconds of inactivity before OPAC accounts are automatically\r
- logged out.</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">Number</link>\r
- </entry>\r
- \r
- <entry/>\r
- </row>\r
-\r
- <row>\r
- <entry>OPAC: Allow pending addresses</entry>\r
- <entry>If true patrons can edit their addresses in the OPAC. Changes must be\r
- approved by staff</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">True/false</link>\r
- </entry>\r
- \r
- <entry/>\r
- </row>\r
- <row>\r
- <entry>Password format</entry>\r
- <entry>Defines acceptable format for OPAC account passwords</entry>\r
- <entry> Regular expression </entry>\r
- \r
- <entry>Default requires that passwords "be at least 7 characters in length,\r
- contain at least one letter (a-z/A-Z), and contain at least one number.\r
- </entry>\r
- </row>\r
-\r
- <row>\r
- <entry>Patron barcode format </entry>\r
- <entry>Defines acceptable format for patron barcodes</entry>\r
- <entry> Regular expression </entry>\r
- \r
- <entry></entry>\r
- </row>\r
-\r
- <row xml:id="library-settings-phone-password">\r
- <entry>Patron: password from phone #</entry>\r
- <entry>If true the last 4 digits of the patron's phone number is the password\r
- for new accounts (password must still be changed at first OPAC\r
- login)</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">True/false</link>\r
- </entry>\r
- \r
- <entry/>\r
- </row>\r
- <row>\r
- <entry>Selfcheck: Patron Login Timeout (in seconds)</entry>\r
- <entry>Administrative setting</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">Number</link>\r
- </entry>\r
- \r
- <entry>Not for SIP connections</entry>\r
- </row>\r
-\r
- <row>\r
- <entry>Selfcheck: Pop-up alert for errors</entry>\r
- <entry>Administrative setting</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">True/false</link>\r
- </entry>\r
- \r
- <entry>Not for SIP connections</entry>\r
- </row>\r
- <row>\r
- <entry>Selfcheck: Require patron password</entry>\r
- <entry>Administrative setting</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">True/false</link>\r
- </entry>\r
- \r
- <entry>Not for SIP connections</entry>\r
- </row>\r
-\r
- <row>\r
- <entry>Sending email address for patron notices</entry>\r
- <entry>This email address is for automatically generated patron notices (e.g.\r
- email overdues, email holds notification). It is good practice to set up a\r
- generic account, like info@nameofyourlibrary.ca, so that one person’s\r
- individual email inbox doesn’t get cluttered with emails that were not\r
- delivered.</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">Text</link>\r
- </entry>\r
- \r
- <entry/>\r
- </row>\r
-\r
- <row xml:id="lsa-show-billing-tab-first">\r
- <entry>Show billing tab first when bills are present</entry>\r
- <entry>If true, accounts for patrons with bills will open to the billing tab\r
- instead of check out</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">True/false</link>\r
- </entry>\r
- <entry></entry>\r
- </row>\r
- <row>\r
- <entry>Staff Login Inactivity Timeout (in seconds)</entry>\r
- <entry>Number of seconds of inactivity before staff client prompts for login\r
- and password.</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">Number</link>\r
- </entry>\r
- <entry>\r
- </entry>\r
- </row>\r
-\r
- <row>\r
- <entry>Void overdue fines when items are marked lost</entry>\r
- <entry>If true overdue fines are voided when an item is marked lost</entry>\r
- <entry>\r
- <link linkend="lsa-data-types">True/false</link>\r
- </entry>\r
- <entry>\r
- </entry>\r
- </row>\r
-\r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
-\r
-\r
- <para xml:id="lsa-library-settings-data">Acceptable formats for each setting type are\r
- listed below. Quotation marks are never required when updating settings in the staff\r
- client.</para>\r
-\r
-\r
- <informaltable xml:id="lsa-data-types">\r
-\r
- <tgroup cols="2" align="left" colsep="1" rowsep="1">\r
- <colspec colnum="1" colname="type" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="formatting" colwidth="5.0*"/>\r
- \r
-\r
- <thead>\r
- <row>\r
- <entry>Data type</entry>\r
- <entry>Formatting</entry>\r
- </row>\r
- </thead>\r
-\r
-\r
-\r
- <tbody>\r
- <row>\r
- <entry>True/false</entry>\r
- <entry>Select value from drop-down menu</entry>\r
- </row>\r
- <row>\r
- <entry>Number</entry>\r
- <entry>Enter a numerical value (decimals allowed in price settings)</entry>\r
- </row>\r
- <row>\r
- <entry>Duration</entry>\r
- <entry>Enter a number followed by a space and any of the following units:\r
- minutes, hours, days, months (30 minutes, 2 days, etc)</entry>\r
- </row>\r
- <row>\r
- <entry>Text</entry>\r
- <entry>Free text</entry>\r
- </row>\r
-\r
-\r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
-\r
-\r
- </simplesect>\r
-\r
-\r
-\r
- </section>\r
- <section xml:id="lsa-noncat">\r
- <info>\r
- <title>Non-Catalogued Type Editor </title>\r
- <indexterm><primary>non-catalogued type editor</primary></indexterm>\r
- </info>\r
-\r
- <para>This is where you configure your non-catalogued types that appear in the dropdown menu\r
- for non-catalogued circulations. </para>\r
-\r
- <procedure>\r
- <step>\r
-\r
- <para>Select <menuchoice>\r
- <guimenu>Admin (-)</guimenu>\r
- <guisubmenu>Local Administration</guisubmenu>\r
- <guimenuitem>Non Catalogued Type Editor</guimenuitem>\r
- </menuchoice>.</para>\r
-\r
-\r
- </step>\r
-\r
- <step>\r
- <informalfigure>\r
- <para>To set up a new non-catalogued type, type the name in the left hand box, and\r
- choose how many days the item will circulate for. Click\r
- <guibutton>Create</guibutton>.</para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/lsa-22.png"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- <para>Select the <guilabel>Circulate In-House</guilabel> box for non-catalogued items\r
- that will circulate in house. This can be used to manually track computer use, or\r
- meeting room rentals. </para>\r
- </step>\r
- </procedure>\r
-\r
-\r
-\r
-\r
- <informalfigure>\r
- <para>This is what the dropdown menu for non-catalogued circulations in the patron checkout\r
- screen looks like:</para>\r
-\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/lsa-23.jpg"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </section>\r
- <section xml:id="lsa-group-penalty">\r
- <info>\r
- <title>Group Penalty Thresholds</title>\r
- <indexterm><primary>group penalty thresholds</primary></indexterm>\r
- </info>\r
- <para>Group Penalty Thresholds block circulation transactions for users who exceed maximum\r
- check out limits, number of overdue items, or fines. Settings for your library are\r
- visible under <menuchoice>\r
- <guimenu>Admin (-)</guimenu>\r
- <guisubmenu>Local Administration</guisubmenu>\r
- <guimenuitem>Group Penalty Thresholds</guimenuitem>\r
- </menuchoice>. </para>\r
-\r
-\r
- <informaltable>\r
-\r
- <tgroup cols="2" align="left" colsep="1" rowsep="1">\r
- <colspec colnum="1" colname="penalty" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="effect" colwidth="1.0*"/>\r
-\r
- <thead>\r
- <row>\r
- <entry>Penalty</entry>\r
- <entry>Effect</entry>\r
-\r
- </row>\r
- </thead>\r
-\r
- <tbody>\r
-\r
- <row>\r
- <entry>PATRON_EXCEEDS_FINES</entry>\r
-\r
- <entry>Blocks new circulations and renewals if patron exceeds X in fines </entry>\r
-\r
- </row>\r
- <row>\r
- <entry>PATRON_EXCEEDS_OVERDUE_COUNT</entry>\r
-\r
- <entry>Blocks new circulations and renewals if patron exceeds X overdue items </entry>\r
-\r
- </row>\r
-\r
- <row>\r
- <entry>PATRON_EXCEEDS_CHECKOUT_COUNT</entry>\r
-\r
- <entry>Blocks new circulations if patron exceeds X items out </entry>\r
-\r
- </row>\r
- </tbody>\r
- </tgroup>\r
-\r
- </informaltable>\r
-\r
-\r
-\r
-\r
- <informalfigure>\r
- <para>Accounts that exceed penalty thresholds display an alert message when opened and\r
- require staff overrides for blocked transactions.</para>\r
- <para>\r
- <mediaobject>\r
- <alt>patron account with circulation blocks</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/lsa-group-1.png"/>\r
- </imageobject>\r
-\r
-\r
- </mediaobject>\r
- </para>\r
-\r
- </informalfigure>\r
-\r
-\r
- <simplesect xml:id="lsa-group-inheritance">\r
- <title>Penalty threshold inheritance rules</title>\r
-\r
- <informalfigure>\r
- <para>Local penalty thresholds are identified by <guilabel>Org Unit</guilabel> and\r
- appear in the same table as the system wide defaults.</para>\r
-\r
- <para>\r
- <mediaobject>\r
- <alt>group penalty threshold table</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/lsa-group-1a.png"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
-\r
- <para>Where there is more than one threshold for the same penalty Evergreen gives\r
- precedence to local settings. In this example Salt Spring Island Public Library (BGSI)\r
- patrons are blocked when owing $5.00 in fines (<inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/2.png"/>\r
- </imageobject>\r
- </inlinemediaobject>) instead of the system default(<inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/1.png"/>\r
- </imageobject>\r
- </inlinemediaobject>). </para>\r
-\r
- <para>Thresholds <inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/3.png"/>\r
- </imageobject>\r
- </inlinemediaobject> and <inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/4.png"/>\r
- </imageobject>\r
- </inlinemediaobject> are both for BGSI but apply to different user profile groups.\r
- Threshold <inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/3.png"/>\r
- </imageobject>\r
- </inlinemediaobject> limits all patrons to a maximum of 12 items out, but <inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/4.png"/>\r
- </imageobject>\r
- </inlinemediaobject> provides an exception for the <guilabel>Board</guilabel>\r
- profile.</para>\r
-\r
-\r
- <tip>\r
- <para>Multi-branch libraries may create rules for the entire library system or for\r
- individual branches. Evergreen will use the most specific applicable rule.</para>\r
- </tip>\r
-\r
-\r
-\r
- </simplesect>\r
-\r
- <simplesect xml:id="lsa-group-create">\r
- <title>Creating local penalty thresholds</title>\r
- <indexterm><primary>group penalty thresholds</primary><secondary>creating local penalty thresholds</secondary></indexterm>\r
- <para>Local System Administrators can override the system defaults by creating local penalty\r
- thresholds for selected patron groups.</para>\r
-\r
- <procedure>\r
- <step>\r
- <para>Select <menuchoice>\r
- <guimenu>Admin (-)</guimenu>\r
- <guisubmenu>Local Administration</guisubmenu>\r
- <guimenuitem>Group Penalty Thresholds</guimenuitem>\r
- </menuchoice>.</para>\r
-\r
-\r
- </step>\r
-\r
- <step>\r
- <informalfigure>\r
- <para>Click <guibutton>New Penalty Threshold</guibutton>. </para>\r
- <para>\r
- <mediaobject>\r
- <alt>group penalty threshold interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/lsa-group-2.png"/>\r
- </imageobject>\r
-\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </step>\r
-\r
- <step>\r
- <informalfigure>\r
- <para>The new penalty pop-up appears. Complete all fields and click\r
- <guibutton>Save</guibutton>. </para>\r
- <para>\r
- <mediaobject>\r
- <alt>new penalty threshold form</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/lsa-group-3.png"/>\r
- </imageobject>\r
-\r
-\r
- </mediaobject>\r
- </para>\r
- <para>\r
- <inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/1.png"/>\r
- </imageobject>\r
- </inlinemediaobject>\r
- <guilabel> Group</guilabel> - the profile group to which the rule applies.\r
- Selecting <guilabel>Patrons</guilabel> includes all profiles below it in the\r
- user hierarchy.</para>\r
-\r
-\r
- <para>\r
- <inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/2.png"/>\r
- </imageobject>\r
- </inlinemediaobject>\r
- <guilabel> Org Unit</guilabel> - multi-branch libraries may create rules for\r
- individual branches or the entire library system.</para>\r
-\r
-\r
- <para>\r
- <inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/3.png"/>\r
- </imageobject>\r
- </inlinemediaobject>\r
- <guilabel> Penalty</guilabel> - select\r
- <guilabel>PATRON_EXCEEDS_CHECKOUT_COUNT</guilabel>,\r
- <guilabel>PATRON_EXCEEDS_OVERDUE_COUNT</guilabel>, or\r
- <guilabel>PATRON_EXCEEDS_FINES</guilabel></para>\r
- </informalfigure>\r
- </step>\r
-\r
- <step>\r
- <informalfigure>\r
- <para>After clicking <guibutton>Save</guibutton> the new threshold appears with\r
- the defaults. Evergreen always gives precedence to local settings (in\r
- this example, BSP). </para>\r
- <para>\r
- <mediaobject>\r
- <alt>group penalty threshold interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/lsa-group-4.png"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Deleting or editing local penalty thresholds</title>\r
- <informalfigure>\r
- <para>To delete a local threshold select the row to remove and click <guibutton>Delete\r
- Selected</guibutton>. The threshold is removed immediately without further\r
- confirmation.</para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/lsa-group-5.png"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- <informalfigure>\r
- <para>To edit a local threshold, double-click the desired row to open the pop-up form.\r
- Edit the form and click <guibutton>Save</guibutton>. New settings take effect\r
- immediately.</para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/lsa-group-6.png"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </simplesect>\r
- </section>\r
- <section xml:id="lsa-statcat">\r
- <info>\r
- <title>Statistical Categories Editor</title>\r
- <indexterm><primary>statistical categories editor</primary></indexterm>\r
- </info>\r
- <para>This is where you configure your statistical categories (stat cats). Stat cats are a\r
- way to save and report on additional information that doesn’t fit elsewhere in Evergreen's\r
- default records. It is possible to have stat cats for copies or patrons. </para>\r
-\r
- <procedure>\r
- <step>\r
- <para>Select <menuchoice>\r
- <guimenu>Admin (-)</guimenu>\r
- <guisubmenu>Local Administration</guisubmenu>\r
- <guimenuitem>Statistical Categories Editor</guimenuitem>\r
- </menuchoice>.</para>\r
- </step>\r
- <step>\r
- <informalfigure>\r
- <para>To create a new stat cat, enter the name of the stat cat, select if you want\r
- <guilabel>OPAC Visiblity</guilabel>, and select either\r
- <guimenuitem>patron</guimenuitem> or <guimenuitem>copy</guimenuitem> from the\r
- <guimenu>Type</guimenu> dropdown menu. </para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata width="100%" scalefit="1" fileref="../media/lsa-25.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </step>\r
- </procedure>\r
- <formalpara>\r
- <title>Copy Stat Cats</title>\r
- <indexterm><primary>copy stat cats</primary></indexterm>\r
- <para>The image above shows some examples of copy stat cats. You would see these when\r
- editing items in the <guilabel>Copy Editor</guilabel>, also known as the <guilabel>Edit\r
- Item Attributes</guilabel> screen. You might use copy stat cats to track books you\r
- have bought from a specific vendor, or donations. </para>\r
- </formalpara>\r
-\r
- <informalfigure>\r
- <para>This is what the copy stat cat looks like in the <guilabel>Copy\r
- Editor</guilabel>.</para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata width="100%" scalefit="1" fileref="../media/lsa-26.jpg"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- <informalfigure>\r
- <formalpara>\r
- <title>Patron stat cats</title>\r
- <indexterm><primary>patron stat cats</primary></indexterm>\r
- <para>Below are some examples of patron stat cats. Patron stat cats can be used to keep\r
- track of information like the high school a patron attends, or the home library for a\r
- consortium patron, e.g. Interlink. You would see these in the fifth screen of patron\r
- registration/edit patron. </para>\r
- </formalpara>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata width="100%" scalefit="1" fileref="../media/lsa-27.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- <informalfigure>\r
- <para>This is what the patron stat cat looks like in the patron registration screen. It\r
- looks very similar in the patron edit screen.</para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/lsa-28.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </section>\r
- <section xml:id="fielddocumentation">\r
- <title>Field Documentation</title>\r
- <para>Field Documentation is custom field-level documentation that explains individual fields for\r
- library staff. As of 2.0, the field documentation only is used in the Patron Registration screen.</para>\r
- <simplesect>\r
- <title>Administering Field Documentation</title>\r
- <indexterm><primary>field documentation</primary><secondary>administering field documentation</secondary></indexterm>\r
- <para>If their permission settings allow, staff members can create local field documentation. This\r
- requires the ADMIN_FIELD_DOC permission. The 'depth' at which that permission is applied, is the maximum\r
- level of the org tree at which the staff member will be able to create field documentation.</para>\r
- <procedure>\r
- <step>\r
- <para>In the staff client, select <menuchoice>\r
- <guimenu>Admin</guimenu>\r
- <guimenuitem>Local Administration</guimenuitem>\r
- <guimenuitem>Field Documentation</guimenuitem>\r
- </menuchoice></para>\r
- </step>\r
- <step>\r
- <para>Click the <guibutton>New</guibutton> button.</para>\r
- </step>\r
- <step>\r
- <para>Using the <guilabel>fm_class</guilabel> selector, select the database table for which you wish to create Field Documentation. This will show all of the \r
- existing Field Documentation for that table.</para>\r
- <note><para>As of Evergreen 2.0, only the ILS User table is used anywhere in the Evergreen UI</para></note>\r
- </step>\r
- <step>\r
- <para>Using the <guilabel>owner</guilabel> selector, select the topmost org unit at which you would like the field documentation to be available.</para>\r
- </step>\r
- <step>\r
- <para>Using the <guilabel>field</guilabel> selector, select the field you wish to document.</para>\r
- </step> \r
- <step>\r
- <para>Enter your actual documentation in the <guilabel>string</guilabel> text box.</para>\r
- </step> \r
- <step>\r
- <para>Click <guibutton>Save</guibutton> to save your Field Documentation entry</para>\r
- </step>\r
- </procedure>\r
- <note>\r
- <para>To view field documentation for different tables, use the <guilabel>Class</guilabel> selector to filter the Field Documentation list</para>\r
- </note>\r
- </simplesect>\r
- <simplesect>\r
- <title>Patron Field Documentation</title>\r
- <indexterm><primary>field documentation</primary><secondary>patron field documentation</secondary></indexterm>\r
- <para>On the patron registration screen there are small boxes along the left hand side. If a magnifying glass appears, you may click that magnifying \r
- glass to retrieve the Field Documentation for that patron field.</para>\r
- </simplesect>\r
-</section>\r
-<section xml:id="lsa-survey">\r
- <info>\r
- <title>Surveys</title>\r
- <indexterm><primary>surveys</primary></indexterm>\r
- </info>\r
- <para>This section illustrates how to create a survey, shows where the survey responses are saved\r
- in the patron record, and explains how to report on surveys.</para>\r
-\r
- <para>Survey questions show up on the 6th patron registration screen, or on the 6th patron edit\r
- screen. Surveys questions can be optional or required. Some examples of survey questions\r
- might include: <emphasis>Would you use the library if it were open on a Sunday?</emphasis> \r
- <emphasis>Would you like to be contacted by the library to learn about new\r
- services?</emphasis> <emphasis>Do you attend library programs?</emphasis></para>\r
-\r
- <para>Surveys come up when a patron is first registered. If you would like staff to ask the\r
- survey questions when the patron’s library card is renewed, you’ll need to make that part of\r
- local procedure.</para>\r
-\r
- <para>It is possible to run reports on survey questions. For example, you could find out how\r
- many people say they would use the library if it were open on a Sunday, or you could get a\r
- list of patrons who say they would like to receive marketing material from the library.\r
- </para>\r
- <procedure>\r
- <step>\r
- <informalfigure>\r
- <para>From the <guimenu>Admin (-)</guimenu> menu, select <menuchoice>\r
- <guimenu>Local Administration</guimenu>\r
- <guimenuitem>Surveys</guimenuitem>\r
- </menuchoice>.</para>\r
- <para>\r
- <mediaobject>\r
- <alt>surveys interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/survey-1.png"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
-\r
- </step>\r
-\r
- <step>\r
- <informalfigure>\r
- <para>The <guilabel>Survey List</guilabel> will open. In this example the table is\r
- empty because no surveys have been created. Click <guibutton>Add New\r
- Survey</guibutton>. </para>\r
- <para>\r
- <mediaobject>\r
- <alt>surveys interface</alt>\r
- <imageobject>\r
- <imagedata width="100%" scalefit="1" fileref="../media/survey-2.png"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
-\r
- </step>\r
-\r
- <step>\r
- <informalfigure>\r
- <para>Fill out the <guilabel>New Survey</guilabel> form, then click <guibutton>Save\r
- Changes</guibutton>. </para>\r
- <para>\r
- <mediaobject>\r
- <alt>surveys interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/survey-3.png"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- <para>A few tips when creating a new survey:</para>\r
- <itemizedlist>\r
- <listitem>\r
- <para><guilabel>Start Date</guilabel> must always be in the future. It is not\r
- possible to add questions to a survey after the start date.</para>\r
- </listitem>\r
- <listitem>\r
- <para>Dates should be in YYYY-MM-DD format</para>\r
- </listitem>\r
- <listitem>\r
- <para><guilabel>OPAC Survey?</guilabel> and <guilabel>Poll Style?</guilabel> are\r
- not yet implemented - leave unchecked</para>\r
- </listitem>\r
- <listitem>\r
- <para>Check <guilabel>Is Required</guilabel> if the survey should be mandatory\r
- for all new patrons</para>\r
- </listitem>\r
- <listitem>\r
- <para>Check <guilabel>Display in User Summary</guilabel> to make survey answers\r
- visible from patron records</para>\r
- </listitem>\r
- </itemizedlist>\r
-\r
- </step>\r
-\r
- <step>\r
- <informalfigure>\r
- <para>A summary of your new survey will appear. Type the first survey question in\r
- the <guilabel>Question</guilabel> field, then click <guibutton>Save Question\r
- & Add Answer</guibutton>. Survey questions are multiple\r
- choice.</para>\r
-\r
- <para>\r
- <mediaobject>\r
- <alt>surveys interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/survey-4.png"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
-\r
-\r
- </step>\r
-\r
- <step>\r
- <informalfigure>\r
- <para>Enter possible multiple choice answers and click <guibutton>Add\r
- Answer</guibutton>. Each question may have as many answers as you\r
- like.</para>\r
- <para>\r
- <mediaobject>\r
- <alt>surveys interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/survey-5.png"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
-\r
- </step>\r
-\r
- <step>\r
- <informalfigure> <para>Repeat the steps above to add as many questions and answers as you wish. When\r
- finished click <guibutton>Save</guibutton>, then <guilabel>Go Back</guilabel> to\r
- return to the survey list.</para>\r
- <para><mediaobject>\r
- <alt>surveys interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/survey-6.png"/>\r
- </imageobject>\r
- \r
- </mediaobject></para></informalfigure>\r
- \r
- </step>\r
- <step>\r
- <informalfigure><para>Your new survey will appear in the <guilabel>Survey List</guilabel> table. To make further changes click the survey name to open the detailed view.</para>\r
- \r
- <para><mediaobject>\r
- <alt>surveys interface</alt>\r
- <imageobject>\r
- <imagedata width="100%" scalefit="1" fileref="../media/survey-7.png"/>\r
- </imageobject>\r
- \r
- </mediaobject></para></informalfigure>\r
- \r
- </step>\r
- </procedure>\r
- <informalfigure><para>This is what the survey looks like in the patron registration/edit screen. Note that in\r
- this example this survey question appears in red and is required as the\r
- <guilabel>Is Required</guilabel> box was checked when creating the survey.</para>\r
- \r
- <para><mediaobject>\r
- <alt>surveys interface</alt>\r
- <imageobject>\r
- <imagedata width="100%" scalefit="1" fileref="../media/survey-8.png"/>\r
- </imageobject>\r
- \r
- </mediaobject></para></informalfigure>\r
- \r
- <informalfigure><para>To see a patron’s response to a survey, retrieve the patron record. Click <menuchoice><guimenu>Other</guimenu><guimenuitem>Surveys</guimenuitem></menuchoice> to see the response.</para>\r
- <para><mediaobject>\r
- <alt>surveys interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/survey-9.png"/>\r
- </imageobject>\r
- \r
- </mediaobject>\r
- <mediaobject>\r
- <alt>surveys interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/survey-10.png"/>\r
- </imageobject>\r
- \r
- </mediaobject></para></informalfigure>\r
-</section>\r
- <section xml:id="lsa-cash-reports">\r
- <info>\r
- <title>Cash Reports</title>\r
- <indexterm><primary>cash reports</primary></indexterm>\r
- </info>\r
- <procedure>\r
- <step>\r
-\r
- <para>Select <menuchoice>\r
- <guimenu>Admin (-)</guimenu>\r
- <guisubmenu>Local Administration</guisubmenu>\r
- <guimenuitem>Cash Reports</guimenuitem>\r
- </menuchoice>.</para>\r
- </step>\r
- <step>\r
- <informalfigure>\r
- <para>Select the start date and the end date that you wish to run a cash report for.\r
- You can either enter the date in the YYYY-MM-DD format, or click on the calendar\r
- icon to use the calendar widget. </para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/lsa-32.jpg"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </step>\r
- <step>\r
- <para>Select your library from the drop down menu. Click <guibutton>Go</guibutton>.\r
- </para>\r
- </step>\r
- <step>\r
- <informalfigure>\r
- <para>The output will show cash, check, and credit card payments. It will also show\r
- amounts for credits, forgiven payments, work payments and goods payments (i.e.\r
- food for fines initiatives). The output will look something like this:</para>\r
- <para>\r
- <mediaobject>\r
- <alt>screenshot of staff client</alt>\r
- <imageobject>\r
- <imagedata width="100%" scalefit="1" fileref="../media/lsa-33.jpg"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </step>\r
- </procedure>\r
- <tip>\r
- <para>By clicking on the hyperlinked column headers (i.e. <guilabel>workstation</guilabel>,\r
- <guilabel>cash_payment</guilabel>, <guilabel>check_payment</guilabel>, etc.) it is\r
- possible to sort the columns to order the payments from smallest to largest, or largest\r
- to smallest, or to group the workstation names. </para>\r
- </tip>\r
- </section>\r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<chapter xml:id="languagesandlocalization" xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xl="http://www.w3.org/1999/xlink">\r
-<info>\r
-<title>Languages and Localization</title>\r
-</info>\r
- <section xml:id="enabling_and_disabling_localization"> \r
- <title>Enabling and Disabling Languages</title>\r
- <para>Evergreen is bundled with support for a number of languages beyond American English (<emphasis role="bold">en-US</emphasis>). The translated interfaces are \r
- split between static files that are automatically installed with Evergreen, and dynamic labels that can be stored in the Evergreen database. Evergreen is \r
- installed with additional SQL files that contain translated dynamic labels for a number of languages, and to make the set of translated labels available in \r
- all interfaces. Only a few steps are required to enable or disable one or more languages.</para>\r
- <simplesect>\r
- <title>Enabling a Localization</title>\r
- <indexterm><primary>languages</primary><secondary>enabling a localization</secondary></indexterm>\r
- <para>To enable the translated labels for a given language to display in Evergreen, just populate the database with the translated labels and enable the localization. The \r
- following example illustrates how to enable Canadian French (<emphasis role="bold">fr-CA</emphasis>) support in the database. These same steps can be used with any of the \r
- languages bundled with Evergreen, or you can create and add your own localization.</para>\r
- <orderedlist>\r
- <listitem>\r
- <para>The translated labels for each locale are stored in SQL files named "950.data.seed-values-xx-YY.sql" where "xx-YY" represents the locale code for \r
- the translation. Load the translated labels into the Evergreen database using the command <command>psql</command>, substituting your user, host and \r
- database connection information accordingly:</para>\r
-<programlisting language="xml"><![CDATA[\r
-$ psql -U <username> -h <hostname> -d <database> \ \r
--f /path/to/Evergreen-source/Open-ILS/src/sql/Pg/950.data.seed-values-fr-CA.sql\r
-]]></programlisting>\r
- </listitem>\r
- <listitem>\r
- <para>Ensure the locale is enabled in the Evergreen database by using the utility <command>psql</command> to check for the existence of the locale in the \r
- table <literal>config.i18n_locale</literal>:</para>\r
- \r
-<screen>\r
-<userinput>SELECT code, marc_code, name, description\r
-FROM config.i18n_locale\r
-WHERE code = 'fr-CA';</userinput>\r
-</screen>\r
- \r
- <para>As shown in the following example, if one row of output is returned, then the locale is already enabled:</para>\r
-<screen>\r
-code | marc_code | name | description \r
-------+-----------+-----------------+-----------------\r
-fr-CA | fre | French (Canada) | Canadian French\r
-(1 row)\r
-</screen>\r
- <para>If zero rows of output are returned, then the locale is not enabled:</para>\r
-<screen>\r
-code | marc_code | name | description \r
-------+-----------+------+-------------\r
-(0 rows)\r
-</screen>\r
- <para>To enable a locale, use <command>psql</command> to insert a row into the table <literal>config.i18n_locale</literal> as follows:</para>\r
-<screen>\r
-INSERT INTO config.i18n_locale (code, marc_code, name, description)\r
-VALUES ('fr-CA', 'fre', 'French (Canada)', 'Canadian French');\r
-</screen>\r
- </listitem>\r
- </orderedlist>\r
- </simplesect>\r
- <simplesect>\r
- <title>Disabling a Localization</title>\r
- <indexterm><primary>languages</primary><secondary>disabling a localization</secondary></indexterm>\r
- <para>You might not want to offer all of the localizations that are preconfigured in Evergreen. If you choose to disable the dynamic labels for a locale, just delete those \r
- entries from the table <literal>config.i18n_locale</literal> using the <command>psql</command> utility:</para>\r
-<screen>\r
-<userinput>DELETE FROM config.i18n_locale\r
-WHERE code = 'fr-CA';</userinput>\r
-</screen>\r
- </simplesect>\r
- </section>\r
-</chapter>\r
+++ /dev/null
-<?xml version='1.0' encoding='UTF-8'?>\r
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"\r
- xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:id="migratingdata" >\r
- <info> \r
- <title>Migrating Data</title>\r
- <abstract>\r
- <para>Migrating data into Evergreen can be one of the most daunting tasks for an administrator. This chapter will explain some procedures to help to migrate \r
- bibliographic records, copies and patrons into the Evergreen system. This chapter requires advanced ILS Administration experience, knowledge of Evergreen data structures, \r
- as well as knowledge of how to export data from your current system or access to data export files from your current system.</para>\r
- </abstract>\r
- </info> \r
- <section xml:id="migratingbibrecords">\r
- <title>Migrating Bibliographic Records</title>\r
- <indexterm><primary>migrating</primary><secondary>importing bibliographic records</secondary></indexterm>\r
- <para>\r
- One of the most important and challenging tasks is migrating your bibliographic records to a new system. The procedure may be different depending on the system from which you \r
- are migrating and the content of the marc records exported from the existing system. The procedures in this section deal with the process once the data from the existing system \r
- is exported into marc records. It does not cover exporting data from your existing non-Evergreen system.</para>\r
- <para>Several tools for importing bibliographic records into Evergreen can be found in the Evergreen installation folder \r
- (<filename class="directory">/home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/src/extras/import/</filename> ) and are also available from the Evergreen repository \r
- (<link xl:href="http://svn.open-ils.org/trac/ILS/browser/branches/rel_1_6_1/Open-ILS/src/extras/import" xl:title="import scripts - Evergreen repository">\r
- http://svn.open-ils.org/trac/ILS/browser/branches/rel_1_6_1/Open-ILS/src/extras/import</link>).</para> \r
- <simplesect>\r
- <title>Converting MARC records to Evergreen BRE JSON format</title>\r
- <indexterm><primary>BRE JSON</primary></indexterm>\r
- <para>If you are starting with MARC records from your existing system or another source, use the marc2bre.pl script to create the JSON representation of a bibliographic \r
- record entry (hence bre) in Evergreen. <filename>marc2bre.pl</filename> can perform the following functions:</para>\r
- <itemizedlist> \r
- <listitem><para>Converts <systemitem>MARC-8</systemitem> encoded records to <systemitem>UTF-8</systemitem> encoding</para></listitem>\r
- <listitem><para>Converts <systemitem>MARC21</systemitem> to <systemitem>MARCXML21</systemitem></para></listitem>\r
- <listitem><para>Select the unique record number field (common choices are '035' or '001'; check your records as you might be surprised how a supposedly unique field \r
- actually has duplicates, though marc2bre.pl will select a unique identifier for subsequent duplicates)</para></listitem>\r
- <listitem><para>Extracts certain pertinent fields for indexing and display purposes (along with the complete MARCXML21 record)</para></listitem>\r
- <listitem><para>Sets the ID number of the first record from this batch to be imported into the biblio.record_entry table (hint - run the following \r
- <systemitem>SQL</systemitem> to determine what this number should be to avoid conflicts:</para>\r
-<screen>\r
-<userinput>psql -U postgres evergreen</userinput>\r
-<userinput> # SELECT MAX(id)+1 FROM biblio.record_entry;</userinput>\r
-</screen>\r
- </listitem>\r
- <listitem>\r
- <para>If you are processing multiple sets of MARC records with <command>marc2bre.pl</command> before loading the records into the database, you will need to keep track \r
- of the starting ID number for each subsequent batch of records that you are importing. For example, if you are processing three files of MARC records with 10000 \r
- records each into a clean database, you would use <option>–startid 1</option>, <option>–startid 10001</option>, and <option>–startid 20001</option> \r
- parameters for each respective file.</para>\r
- </listitem>\r
- <listitem>\r
- <para>Ignore <quote>trash</quote> fields that you do not want to retain in Evergreen</para>\r
- </listitem>\r
- <listitem>\r
- <para>If you use <filename>marc2bre.pl</filename> to convert your MARC records from the <systemitem>MARC-8</systemitem> encoding to the UTF-8 encoding, it relies\r
- on the <systemitem>MARC::Charset Perl</systemitem> module to complete the conversion. When importing a large set of items, you can speed up the process by using a \r
- utility like <systemitem>marc4j</systemitem> or <systemitem>marcdumper</systemitem> to convert the records \r
- to <systemitem>MARC21XML</systemitem> and <systemitem>UTF-8</systemitem> before running them through <command>marc2bre.pl</command> with the \r
- <option>–marctype=XML</option> flag to tell <command>marc2bre.pl</command> that the records are already in <systemitem>MARC21XML</systemitem> format with \r
- the <systemitem>UTF-8 </systemitem>encoding. If you take this approach, due to a current limitation of <systemitem>MARC::File::XML</systemitem> you have to do a \r
- horrible thing and ensure that there are no namespace prefixes in front of the element names. <filename>marc2bre.pl</filename> cannot parse the following \r
- example:</para>\r
-\r
-<programlisting language="xml">\r
-<![CDATA[\r
-\r
-<?xml version="1.0" encoding="UTF-8" ?>\r
-<marc:collection xmlns:marc="http://www.loc.gov/MARC21/slim" \r
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \r
- xsi:schemaLocation="http://www.loc.gov/MARC/slim \r
-http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd">\r
- <marc:record>\r
- <marc:leader>00677nam a2200193 a 4500</marc:leader>\r
- <marc:controlfield tag="001">H01-0000844</marc:controlfield>\r
- <marc:controlfield tag="007">t </marc:controlfield>\r
- <marc:controlfield tag="008">060420s1950 xx 000 u fre d</marc:controlfield>\r
- <marc:datafield tag="040" ind1=" " ind2=" ">\r
- <marc:subfield code="a">CaOHCU</marc:subfield>\r
- <marc:subfield code="b">fre</marc:subfield>\r
- </marc:datafield>\r
-...\r
-]]>;\r
-</programlisting>\r
- \r
- <para>But marc2bre.pl can parse the same example with the namespace prefixes removed:</para>\r
-<programlisting language="xml">\r
-<![CDATA[\r
-<?xml version="1.0" encoding="UTF-8" ?>\r
-<collection xmlns:marc="http://www.loc.gov/MARC21/slim" \r
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \r
- xsi:schemaLocation="http://www.loc.gov/MARC/slim \r
-http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd">\r
- <record>\r
- <leader>00677nam a2200193 a 4500</leader>\r
- <controlfield tag="001">H01-0000844</controlfield>\r
- <controlfield tag="007">t </controlfield>\r
- <controlfield tag="008">060420s1950 xx 000 u fre d</controlfield>\r
- <datafield tag="040" ind1=" " ind2=" ">\r
- <subfield code="a">CaOHCU</subfield>\r
- <subfield code="b">fre</subfield>\r
- </datafield>\r
-...\r
-]]>;\r
-</programlisting>\r
- </listitem>\r
- </itemizedlist>\r
- </simplesect>\r
- <simplesect>\r
- <title>Converting Records for Import into PostgreSQL</title>\r
- <indexterm><primary>migrating</primary><secondary>import into PostgreSQL</secondary></indexterm>\r
- <para>Once you have your records in Open-ILS <systemitem>JSON</systemitem> ingest format, you then need to use <command>pg_loader.pl</command> to convert these records into a \r
- set of <systemitem>SQL</systemitem> statements that you can use to \r
- load the records into PostgreSQL. The <option>–order</option> and <option>–autoprimary</option> command line options (bre, mrd, mfr, etc) map to class IDs defined in \r
- <filename>/openils/conf/fm_IDL.xml</filename>.</para>\r
- </simplesect> \r
- <simplesect>\r
- <title>Adding Metarecords to the Database</title>\r
- <indexterm><primary>migrating</primary><secondary>adding metarecords</secondary></indexterm>\r
- <para>One you have loaded the records into PostgreSQL, you can create metarecord entries in the <link linkend="metabib.table.metarecord">metabib.metarecord</link> table by running the following <systemitem>SQL</systemitem>:</para>\r
-<screen>\r
-<userinput>psql evergreen</userinput>\r
-<userinput># \i /home/opensrf/Evergreen-ILS-1.6*/src/extras/import/quick_metarecord_map.sql</userinput>\r
-</screen>\r
- <para>Metarecords are required to place holds on items, among other actions.</para>\r
- </simplesect> \r
- </section>\r
-\r
-\r
-\r
-<section xml:id="migrating_records_using_migration_tools">\r
- <title>Migrating Bibliographic Records Using the ESI Migration Tools</title>\r
- <indexterm><primary>migrating</primary><secondary>bibliograohic records</secondary></indexterm> \r
- <para>The following procedure explains how to migrate bibliographic records from marc records into Evergreen. This is a general guide and will need to be adjusted for your \r
- specific environment. It does not cover exporting records from specific proprietary ILS \r
- systems. For assistance with exporting records from your current system please refer to the manuals for your system or you might try to ask for help from the \r
- <link linkend="more_info">Evergreen community</link>.</para>\r
- \r
- <procedure>\r
- <step>\r
- <para>Download the Evergreen <link xl:href="http://git.esilibrary.com/?p=migration-tools.git;a=summary" \r
- xl:title="Equinox migration utilities">migration utilities</link> from the git repository.</para>\r
- <para>Use the command <command>git clone git://git.esilibrary.com/git/migration-tools.git</command> to clone the migration tools.</para>\r
- <para>Install the migration tools:</para>\r
-<screen>\r
-<userinput>\r
-<![CDATA[\r
-cd migration-tools/Equinox-Migration\r
-perl Makefile.PL\r
-make\r
-make test\r
-make install\r
-]]>\r
-</userinput>\r
-</screen>\r
-</step> \r
- <step>\r
- <para>Add environmental variables for migration and import tools. These paths must point to:\r
- <itemizedlist>\r
- <listitem>the import perl scripts bundled with Evergreen </listitem>\r
- <listitem>the folder where you extracted the migration tools</listitem>\r
- <listitem>the location of the Equinox-Migration perl modules </listitem>\r
- <listitem>the location of the Evergreen perl modules (e.g. perl5)</listitem>\r
- </itemizedlist>\r
- </para> \r
-<screen>\r
-<userinput>export PATH=[<emphasis class="italic">path to Evergreen</emphasis>]/Open-ILS/src/extras/import: \\r
-/[<emphasis class="italic">path to migration-tools</emphasis>]/migration-tools:$PATH:.\r
-export PERL5LIB=/openils/lib/perl5: \ \r
-/[<emphasis class="italic">path to migration-tools</emphasis>/Equinox-Migration/lib\r
-</userinput>\r
-</screen>\r
-</step>\r
-<step>\r
- <para>Dump marc records into MARCXML using <systemitem>yaz-marcdump</systemitem></para>\r
-\r
-<screen>\r
-<userinput>\r
-<![CDATA[\r
-echo '<?xml version="1.0" encoding="UTF-8" ?>' > imported_marc_records.xml\r
-yaz-marcdump -f MARC-8 -t UTF-8 -o marcxml imported_marc_records.mrc >> imported_marc_records.xml\r
-]]>\r
-</userinput>\r
-</screen>\r
-</step> \r
-<step>\r
- <para>Test validity of XML file using <systemitem>xmllint</systemitem></para>\r
-<screen>\r
-\r
-<userinput>\r
-<![CDATA[\r
- xmllint --noout imported_marc_records.xml 2> marc.xml.err\r
-]]>\r
-</userinput>\r
-</screen>\r
-</step> \r
-\r
-<step>\r
- <para>Clean up the marc xml file using the <systemitem>marc_cleanup</systemitem> utility:</para>\r
-<screen>\r
-<userinput>\r
-marc_cleanup --marcfile=imported_marc_records.xml --fullauto [--renumber-from #] -ot 001\r
-</userinput> \r
-</screen>\r
- <para>The <option>--renumber-from</option> is required if you have bibliographic records already in your system. Use this to set the starting id number higher \r
- then the last id in the biblio.record_entry table. The marc_cleanup command will generate a file called <filename>clean.marc.xml</filename></para>\r
-</step>\r
-<step>\r
- <para>Create a fingerprinter file using the <systemitem>fingerprinter</systemitem> utility:</para>\r
-<screen>\r
-<userinput>\r
-fingerprinter -o incumbent.fp -x incumbent.ex clean.marc.xml\r
-</userinput> \r
-</screen>\r
- <para><systemitem>fingerprinter</systemitem> is used for deduplification of the incumbent records. The <option>-o</option> option specifies the \r
- output file and the <option>-x</option> option is used to specify the error output file.</para>\r
-</step>\r
-<step>\r
- <para>Create a fingerprinter file for existing Evergreen bibliographic records using the <systemitem>fingerprinter</systemitem> utility if you \r
- have existing bibliographic records in your system previously imported:</para>\r
-<screen>\r
-<userinput>\r
-fingerprinter -o production.fp -x production.fp.ex --marctype=MARC21 existing_marc_records.mrc \\r
---tag=901 --subfield=c\r
-</userinput>\r
-</screen>\r
- <para><systemitem>fingerprinter</systemitem> is used for deduplification of the incumbant records.</para>\r
-</step>\r
-\r
-<step>\r
- <para>Create a merged fingerprint file removing duplicate records.</para>\r
-<screen>\r
-<userinput>\r
-cat cat production.fp incumbent.fp | sort -r > dedupe.fp\r
-match_fingerprints [-t start id] -o records.merge dedupe.fp\r
-</userinput>\r
-</screen>\r
-</step>\r
-\r
-<step>\r
- <para>Create a new import XML file using the <systemitem>extract_loadset</systemitem> utility</para>\r
-<screen>\r
-<userinput>extract_loadset -l 1 -i clean.marc.xml -o merged.xml records.merge</userinput>\r
-</screen>\r
-</step>\r
-\r
-<step>\r
- <para>Extract all of the currently used TCN's an generate the .bre and .ingest files to prepare for the bibliographic record load.</para>\r
-<screen>\r
-<userinput>\r
-psql -U evergreen -c "select tcn_value from biblio.record_entry where not deleted" \\r
-| perl -npe 's/^\s+//;' > used_tcns\r
-marc2bre.pl --idfield 903 [--startid=#] --marctype=XML -f final.xml \\r
---used_tcn_file=used_tcns > evergreen_bre_import_file.bre\r
-</userinput>\r
-</screen>\r
- <note>\r
- <para> The option <option>--startid</option> needs to match the start id used in earlier steps and must be higher than largest id value \r
- in the biblio.record_entry table. the option <option>--idfield</option> should match the marc datafield used to store your records ids.</para>\r
- </note>\r
-</step>\r
-\r
-<step>\r
- <para>Ingest the bibliographic records into the Evergreen database.</para>\r
-<screen>\r
-<userinput>\r
-<![CDATA[\r
-parallel_pg_loader.pl \\r
--or bre \\r
--or mrd \\r
--or mfr \\r
--or mtfe \\r
--or mafe \\r
--or msfe \\r
--or mkfe \\r
--or msefe \\r
--a mrd \\r
--a mfr \\r
--a mtfe \\r
--a mafe \\r
--a msfe \\r
--a mkfe \\r
--a msefe evergreen_bre_import_file.bre > bibrecords.sql\r
-]]>\r
-</userinput>\r
-</screen>\r
- </step>\r
- <step>\r
- <para>Load the records using psql and the sql scripts generated from the previous step.</para>\r
-<screen>\r
-<userinput>\r
-<![CDATA[\r
-psql -U evergreen -h localhost -d evergreen -f bibrecords.sql\r
-psql -U evergreen < ~/Ever*/Open-ILS/src/extras/import/quick_metarecord_map.sql > log.create_metabib\r
-]]>\r
-</userinput>\r
-</screen>\r
- </step>\r
- <step>\r
- <para>Extract holdings from marc records for importing copies into Evergreen using the <systemitem>extract_holdings</systemitem> utility.</para>\r
-<screen>\r
-<userinput>\r
-extract_holdings --marcfile=clean.marc.xml --holding 999 --copyid 999i --map holdings.map\r
-</userinput>\r
-</screen>\r
- <para>This command would extract holdings based on the 949 datafield in the marc records. The copy id is generated from the subfile i in the 999 datafield. You may \r
- need to adjust these options based on the field used for holdings informatiom in your marc records.</para>\r
- <para>The <option>map</option> option <filename>holdings.map</filename> refers to a file to be used for mapping subfields to the holdings data you would like extracted. Here is an example based on mapping holdings data to the 999 data field:</para>\r
-<programlisting>\r
-<![CDATA[\r
-callnum 999 a\r
-barcode 999 i\r
-location 999 l\r
-owning_lib 999 m\r
-circ_modifier 999 t\r
-]]>\r
-</programlisting>\r
- <para>Running the extract holdings script should produce an sql script <filename>HOLDINGS.pg</filename> similar to:</para>\r
-<programlisting language="sql">\r
-BEGIN;\r
-\r
-egid, hseq, l_callnum, l_barcode, l_location, l_owning_lib, l_circ_modifier,\r
-40 0 HD3616.K853 U54 1997 30731100751928 STACKS FENNELL BOOK\r
-41 1 HV6548.C3 S984 1998 30731100826613 STACKS FENNELL BOOK\r
-41 2 HV6548.C3 S984 1998 30731100804958 STACKS BRANTFORD BOOK\r
-...\r
-</programlisting>\r
- \r
- <para>Edit the holdings.pg sql script like so:</para> \r
-<programlisting language="sql">\r
-BEGIN;\r
-\r
-<emphasis class="bold">TRUNCATE TABLE staging_items;</emphasis>\r
-\r
-<emphasis class="bold">INSERT INTO staging_items (</emphasis>egid, hseq, l_callnum, l_barcode, l_location, \r
-l_owning_lib, l_circ_modifier) <emphasis>FROM stdin;</emphasis> \r
-40 0 HD3616.K853 U54 1997 30731100751928 STACKS FENNELL BOOK\r
-41 1 HV6548.C3 S984 1998 30731100826613 STACKS FENNELL BOOK\r
-41 2 HV6548.C3 S984 1998 30731100804958 STACKS BRANTFORD BOOK\r
-<emphasis>\.\r
-\r
-COMMIT;</emphasis>\r
-</programlisting>\r
- <para>This file can be used for importing holdings into Evergreen. the <database class="field">egid</database> is a critical column. It is used to link the volume and \r
- copy to the bibliographic record. Please refer to <link linkend="migratingbibrecordcopies">for the steps to import your holdings into Evergreen.</link></para> \r
- </step>\r
- </procedure>\r
- \r
- </section>\r
- <section xml:id="migratingbibrecordcopies">\r
- <title>Adding Copies to Bibliographic Records</title><indexterm><primary>migrating</primary><secondary>holdings</secondary></indexterm> \r
- <para>Before bibliographic records can be found in an OPAC search copies will need to be created. It is very important to understand how various tables related to each other in regards \r
- to holdings maintenance.</para> \r
- <para>The following procedure will guide you through the process of populating Evergreen with volumes and copies. This is a very simple example. The SQL queries may need to be adjusted \r
- for the specific data in your holdings.</para> \r
- <procedure>\r
- <step>\r
- <para>Create a staging_items staging table to hold the holdings data:</para>\r
-<programlisting language="sql">\r
-CREATE TABLE staging_items (\r
- l_callnum text, -- call number label\r
- hseq int, \r
- egid int, -- biblio.record_entry_id\r
- createdate date,\r
- l_location text,\r
- l_barcode text,\r
- l_circ_modifier text,\r
- l_owning_lib text -- actor.org_unit.shortname\r
-);\r
-</programlisting>\r
- </step> \r
- <step>\r
- <para>Import the items using the HOLDINGS.pg SQL script created using the extract_holdings utility.</para>\r
-<screen>\r
-<userinput>psql -U evergreen -f HOLDINGS.pg evergreen</userinput>\r
-</screen>\r
- <para>the file <filename>HOLDINGS.pg</filename> and/or the COPY query may need to be adjusted for your particular circumstances.</para> \r
- </step>\r
- \r
-\r
- <step>\r
- <para>Generate shelving locations from your staging table.</para>\r
-<programlisting language="sql">\r
-INSERT INTO asset.copy_location (name, owning_lib)\r
-SELECT DISTINCT l.location, ou.id\r
-FROM staging_items l \r
- JOIN actor.org_unit ou ON (l.owning_lib = ou.shortname); \r
-</programlisting>\r
- </step>\r
- <step>\r
- <para>Generate circulation modifiers from your staging table.</para>\r
-<programlisting language="sql">\r
-INSERT INTO config.circ_modifier (code, name, description, sip2_media_type, magnetic_media)\r
- SELECT DISTINCT l_circ_modifier AS code,\r
- l_circ_modifier AS name,\r
- LOWER(l_circ_modifier) AS description,\r
- '001' AS sip2_media_type,\r
- FALSE AS magnetic_media\r
- FROM staging_items\r
- WHERE l_circ_modifier NOT IN (SELECT code FROM config.circ_modifier);\r
-</programlisting>\r
- </step>\r
- <step>\r
- <para>Generate call numbers from your staging table:</para>\r
-<programlisting language="sql">\r
-INSERT INTO asset.call_number (creator,editor,record,label,owning_lib)\r
-SELECT DISTINCT 1, 1, egid, l.callnum, ou.id\r
-FROM staging.staging_items l\r
-JOIN actor.org_unit ou ON (l.owning_lib = ou.shortname);\r
-</programlisting>\r
- </step>\r
- <step>\r
- <para>Generate copies from your staging table:</para>\r
-<programlisting language="sql">\r
-INSERT INTO asset.copy (\r
-circ_lib, creator, editor, create_date, barcode,\r
-STATUS, location, loan_duration, fine_level, circ_modifier, deposit, ref, call_number) \r
-\r
-SELECT DISTINCT ou.id AS circ_lib,\r
- 1 AS creator,\r
- 1 AS editor,\r
- l.l_createdate AS create_date,\r
- l.l_barcode AS barcode,\r
- 0 AS STATUS,\r
- cl.id AS location,\r
- 2 AS loan_duration,\r
- 2 AS fine_level,\r
- l.l_circ_modifier AS circ_modifier,\r
- FALSE AS deposit,\r
- CASE\r
- WHEN l.l_circ_modifier = 'REFERENCE' THEN TRUE\r
- ELSE FALSE\r
- END AS ref, \r
- cn.id AS call_number\r
- FROM staging_items l\r
- JOIN actor.org_unit ou\r
- ON (l.l_owning_lib = ou.shortname)\r
- JOIN asset.copy_location cl\r
- ON (ou.id = cl.owning_lib AND l.l_location = cl.name)\r
- JOIN metabib.real_full_rec m \r
- ON (m.record = l.egid)\r
- JOIN asset.call_number cn\r
- ON (ou.id = cn.owning_lib \r
- AND m.record = cn.record \r
- AND l.l_callnum = cn.label) \r
-</programlisting>\r
- <para>You should now have copies in your Evergreen database and should be able to search and find the bibliographic records with attached copies.</para> \r
- </step>\r
- </procedure>\r
- </section>\r
- <section xml:id="migratingpatrons">\r
- <title>Migrating Patron Data</title>\r
- <indexterm><primary>migrating</primary><secondary>patrons</secondary></indexterm>\r
- <para>\r
- This section will explain the task of migrating your patron data from comma delimited files<indexterm><primary>comma delimited files</primary></indexterm> into Evergreen. \r
- It does not deal with the process of exporting from the non-Evergreen \r
- system since this process may vary depending on where you are extracting your patron records. Patron could come from an ILS or it could come from a student database in the case of \r
- academic records. \r
- </para>\r
- <para>When importing records into Evergreen you will need to populate 3 tables in your Evergreen database:</para>\r
- <itemizedlist>\r
- <listitem><link linkend="actor.table.usr">actor.usr</link> - The main table for user data</listitem>\r
- <listitem><link linkend="actor.table.card">actor.card</link> - Stores the barcode for users; Users can have more than 1 card but only 1 can be active at a given time;</listitem>\r
- <listitem><link linkend="actor.table.usr-address">actor.usr_address</link> - Used for storing address information; A user can have more than one address.</listitem>\r
- </itemizedlist>\r
- <para>Before following the procedures below to import patron data into Evergreen, it is a good idea to examine the fields in these tables in order to decide on a strategy \r
- for data to include \r
- in your import. It is important to understand the data types and constraints on each field.</para>\r
- <procedure>\r
- <step>\r
- <para>Export the patron data from your existing ILS or from another source into a comma delimited file. The comma delimited file used for importing\r
- the records should use Unicode (UTF8) <indexterm><primary>Unicode</primary></indexterm> character encoding.</para>\r
- </step>\r
- <step>\r
- <para>Create a staging table.<indexterm><primary>staging table</primary></indexterm> A staging table will allow you to tweak the data before importing. \r
- Here is an example sql statement:</para>\r
-<indexterm><primary>sql</primary></indexterm> \r
-<programlisting language="sql">\r
-CREATE TABLE students (\r
- student_id int, barcode text, last_name text, first_name text, email text, address_type text, street1 text, street2 text, \r
- city text, province text, country text, postal_code text, phone text, profile int DEFAULT 2, \r
- ident_type int, home_ou int, claims_returned_count int DEFAULT 0, usrname text, \r
- net_access_level int DEFAULT 2, password text\r
-); \r
-</programlisting>\r
- <para>Note the <varname>DEFAULT</varname> variables. These allow you to set default for your library or to populate required fields if you \r
- data allows <systemitem>NULL</systemitem> values where fields are required in Evergreen.</para>\r
- <para>The data field <database class="field">profile</database> in the above SQL script refers to the user group and should be an\r
- integer referencing the <database class="field">id</database> field in <link linkend="permission.table.grp-tree">\r
- <database class="table">permission.grp_tree</database></link>. \r
- Setting this value will effect the permissions for the user. See the values in <database class="table">permission.grp_tree</database> for \r
- possibilities.</para> \r
- <para> <database class="field">ident_type</database> is the identification type used for identiying users. This is a integer value referencing \r
- <database class="table">config.identification_type</database> and should match the id values of that table. The default values are \r
- <literal>1</literal> for Drivers License, <literal>2</literal> for SSN or <literal>3</literal> for other.</para>\r
- <para><database class="field">home_ou</database> is the home organizational unit for the user. This value needs to match the corresponding \r
- <database class="field">id</database> in the <link linkend="actor.table.org-unit"><database class="table">actor.org_unit</database></link> \r
- table.</para> \r
- </step>\r
- <step>\r
- <para>Copy records into staging table from a comma delimited file.</para>\r
-<programlisting language="sql">\r
-COPY students (student_id, last_name, first_name, email, address_type, street1, street2, city, province, country, postal_code, phone) \r
- FROM '/home/opensrf/patrons.csv' \r
- WITH CSV HEADER; \r
-</programlisting>\r
- <para>The above script wil vary depending on the format of your patron load file (<filename>patrons.csv</filename>). You may want to review \r
- <link xl:href="http://www.postgresql.org/docs/9.0/static/sql-copy.html" xl:title="PostgreSQL - COPY">PostgreSQL documentation</link></para> \r
- </step>\r
- <step>\r
- <para>Formatting of some fields to fit Evergreen filed formatting may be required. Here is an example of sql to adjust phone numbers in the staging \r
- table to fit the evergreen field:</para>\r
-<programlisting language="sql">\r
-UPDATE students phone = replace(replace(replace(rpad(substring(phone from 1 for 9), 10, '-') || \r
-substring(phone from 10), '(', ''), ')', ''), ' ', '-');\r
-</programlisting>\r
- <para>Data <quote>massaging</quote> will be required to fit formats used in Evergreen.</para>\r
- </step>\r
- <step>\r
- <para>Insert records from the staging table into the <link linkend="actor.table.usr"><database class="table">actor.usr</database> </link> Evergreen table:</para>\r
-<programlisting language="sql">\r
- INSERT INTO actor.usr (\r
- profile, usrname, email, passwd, ident_type, ident_value, first_given_name, \r
- family_name, day_phone, home_ou, claims_returned_count, net_access_level) \r
- SELECT profile, students.usrname, email, password, ident_type, student_id, \r
- first_name, last_name, phone, home_ou, claims_returned_count, net_access_level \r
- FROM students;\r
-</programlisting> \r
- </step>\r
- <step>\r
- <para>insert records into <link linkend="actor.table.card"><database class="table">actor.card </database></link> from <link linkend="actor.table.usr">\r
- <database class="table">actor.usr </database></link>.</para>\r
-<programlisting language="sql">\r
-INSERT INTO actor.card (usr, barcode) \r
- SELECT actor.usr.id, students.barcode \r
- FROM students \r
- INNER JOIN actor.usr \r
- ON students.usrname = actor.usr.usrname;\r
-</programlisting> \r
- <para>This assumes a one to one card patron relationship. If your patron data import has multiple cards assigned to one patron more complex import scripts may be required which look for inactive or active flags.</para> \r
- </step>\r
- <step>\r
- <para>Update actor.usr.card field with actor.card.id to associate active card with the user:</para>\r
-<programlisting language="sql">\r
-UPDATE actor.usr \r
- SET card = actor.card.id \r
- FROM actor.card \r
- WHERE actor.card.usr = actor.usr.id;\r
-</programlisting> \r
- </step>\r
- <step>\r
- <para>Insert records into <link linkend="actor.table.usr-address">actor.usr_address</link> to add address information for users:</para>\r
-<programlisting language="sql">\r
-INSERT INTO actor.usr_address (usr, street1, street2, city, state, country, post_code) \r
- SELECT actor.usr.id, students.street1, students.street2, students.city, students.province, \r
- students.country, students.postal_code \r
- FROM students \r
- INNER JOIN actor.usr ON students.usrname = actor.usr.usrname;\r
-</programlisting> \r
- </step>\r
- <step>\r
- <para>update <link linkend="actor.table.usr-address">actor.usr.address</link> with address id from address table.</para>\r
-<programlisting language="sql">\r
-UPDATE actor.usr \r
- SET mailing_address = actor.usr_address.id, billing_address = actor.usr_address.id \r
- FROM actor.usr_address \r
- WHERE actor.usr.id = actor.usr_address.usr;\r
-</programlisting> \r
- <para>This assumes 1 address per patron. More complex scenarios may require more sophisticated SQL.</para> \r
- </step>\r
- </procedure>\r
- <simplesect>\r
- <title>Creating an sql Script for Importing Patrons</title>\r
- <para>The procedure for importing patron can be automated with the help of an sql script. Follow these steps to create an import script:</para>\r
- \r
- <procedure>\r
- <step>\r
- <para>Create an new file and name it <filename>import.sql</filename></para>\r
-\r
- </step>\r
-\r
- <step>\r
- <para>Edit the file to look similar to this:</para>\r
-<programlisting>\r
-BEGIN;\r
-\r
--- Create staging table.\r
-CREATE TABLE students (\r
- student_id int, barcode text, last_name text, first_name text, email text, address_type text, street1 text, street2 text, \r
- city text, province text, country text, postal_code text, phone text, profile int, \r
- ident_type int, home_ou int, claims_returned_count int DEFAULT 0, usrname text, \r
- net_access_level int DEFAULT 2, password text\r
-); \r
-\r
---Copy records from your import text file\r
-COPY students (student_id, last_name, first_name, email, address_type, street1, street2, city, province, country, postal_code, phone, password) \r
- FROM '/home/opensrf/patrons.csv' \r
- WITH CSV HEADER; \r
-\r
-\r
---Insert records from the staging table into the actor.usr table.\r
-INSERT INTO actor.usr (\r
- profile, usrname, email, passwd, ident_type, ident_value, first_given_name, family_name, \r
- day_phone, home_ou, claims_returned_count, net_access_level) \r
- SELECT profile, students.usrname, email, password, ident_type, student_id, first_name, \r
- last_name, phone, home_ou, claims_returned_count, net_access_level FROM students;\r
-\r
---Insert records from the staging table into the actor.usr table.\r
-INSERT INTO actor.card (usr, barcode) \r
- SELECT actor.usr.id, students.barcode \r
- FROM students \r
- INNER JOIN actor.usr \r
- ON students.usrname = actor.usr.usrname;\r
-\r
---Update actor.usr.card field with actor.card.id to associate active card with the user:\r
-UPDATE actor.usr \r
- SET card = actor.card.id \r
- FROM actor.card \r
- WHERE actor.card.usr = actor.usr.id;\r
-\r
---INSERT records INTO actor.usr_address from staging table.\r
-INSERT INTO actor.usr_address (usr, street1, street2, city, state, country, post_code) \r
- SELECT actor.usr.id, students.street1, students.street2, students.city, students.province, \r
- students.country, students.postal_code \r
- FROM students \r
- INNER JOIN actor.usr ON students.usrname = actor.usr.usrname;\r
-\r
-\r
---Update actor.usr mailing address with id from actor.usr_address table.:\r
-UPDATE actor.usr \r
- SET mailing_address = actor.usr_address.id, billing_address = actor.usr_address.id \r
- FROM actor.usr_address \r
- WHERE actor.usr.id = actor.usr_address.usr;\r
-\r
-COMMIT;\r
-</programlisting>\r
- <para>Placing the sql statements between <code>BEGIN;</code> and <code>COMMIT;</code> creates a transaction block so that if any sql statements fail, the \r
- entire process is canceled and the database is rolled back to its original state. Lines beginning with <code>--</code> are comments to let you you what \r
- each sql statement is doing and are not processed.</para> \r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Batch Updating Patron Data</title>\r
- <indexterm><primary>migrating</primary><secondary>batch updating patrons</secondary></indexterm>\r
- <para>For academic libraries, doing batch updates to add new patrons to the Evergreen database is a critical task. The above procedures and \r
- import script can be easily adapted to create an update script for importing new patrons from external databases. If the data import file contains only new patrons, then, \r
- the above procedures will work well to insert those patrons. However, if the data load contains all patrons, a second staging table and a procedure to remove existing patrons from that second staging table may be required before importing the new patrons. Moreover, additional steps to update address information and perhaps delete \r
- inactive patrons may also be desired depending on the requirements of the institution.</para>\r
- <para>After developing the scripts to import and update patrons have been created, another important task for library staff is to develop an import strategy and schedule \r
- which suits the needs of the library. This could be determined by registration dates of your institution in the case of academic libraries. It is important to balance \r
- the convenience of patron loads and the cost of processing these loads vs staff adding patrons manually.</para> \r
- </simplesect> \r
- </section>\r
- <section xml:id="emptydatabase">\r
- <title>Restoring your Evergreen Database to an Empty State</title>\r
- <para>If you've done a test import of records and you want to quickly get Evergreen back to a pristine state, you can create a clean Evergreen database schema by performing the \r
- following:</para>\r
- <procedure>\r
- <step> \r
-<screen>\r
-<userinput>cd ILS/Open-ILS/src/sql/Pg/</userinput>\r
-</screen>\r
- </step>\r
- <step> \r
- <para>Rebuild the database schema:</para>\r
-<screen>\r
-<userinput>./build-db.sh [db-hostname> [db-port] [db-name] [db-user] [db-password] [db-version]</userinput>\r
-</screen>\r
- <caution><para>This will remove all of your data from the database and restore the default values.</para></caution> \r
- </step>\r
- </procedure>\r
- </section>\r
- <section xml:id="exportingbibrecordsintoMARC">\r
- <title>Exporting Bibliographic Records into MARC files</title>\r
- <indexterm><primary>migrating</primary><secondary>exporting bibliographic records</secondary><tertiary>MARC</tertiary></indexterm>\r
- <para>The following procedure explains how to export Evergreen bibliographic records into MARC files using the <command>marc_export</command> support script. All steps should be \r
- performed by the <systemitem class="username">opensrf</systemitem> user from your Evergreen server.</para>\r
- <procedure>\r
- <step> \r
- <para>Create a text file list of the Bibliographic record IDs you would like to export from Evergreen. One way to do this is using SQL:</para>\r
-<programlisting language="sql">\r
-SELECT DISTINCT bre.id FROM biblio.record_entry AS bre\r
- JOIN asset.call_number AS acn ON acn.record = bre.id \r
- WHERE bre.deleted='false' and owning_lib=101 \g /home/opensrf/records.txt;\r
-</programlisting>\r
- <para>This query creates a file called <filename>records.txt</filename> containing a column of distinct IDs of items owned by the organizational unit with the \r
- <database class="field">id</database> <literal>101</literal>.</para>\r
- </step>\r
- <step>\r
- <para>Navigate to the support-scripts folder</para>\r
-<screen>\r
-<userinput>cd /home/opensrf/Evergreen-ILS*/Open-ILS/src/support-scripts/</userinput>\r
-</screen>\r
- </step>\r
- <step>\r
- <para>Run <command>marc_export</command>, using the ID file you created in step 1 to define which files to export.</para>\r
-<screen>\r
-<userinput>cat /home/opensrf/records.txt | ./marc_export -i -c /openils/conf/opensrf_core.xml \\r
--x /openils/conf/fm_IDL.xml -f XML --timeout 5 > exported_files.xml\r
-</userinput>\r
-</screen>\r
- <para>The example above exports the records into MARCXML format.</para>\r
- <note>\r
- <para>For help or for more options when running <command>marc_export</command>, run <command>marc_export</command> with the <option>-h</option> option:</para>\r
-<screen>\r
-<userinput>./marc_export -h</userinput>\r
-</screen>\r
- </note>\r
- \r
- </step>\r
- <note>\r
- <para>Processing time for exporting records depends on several factors such as the number of records you are exporting. It is recommended that you divide the \r
- export ID files (<filename>records.txt</filename>) into a manageable number of records if you are exporting a large number of records.</para> \r
- </note>\r
- </procedure>\r
- </section> \r
- <section xml:id="importingauthorityrecords">\r
- <title>Importing Authority Records</title>\r
- <indexterm><primary>migrating</primary><secondary>importing authority records</secondary></indexterm>\r
- <para>The following procedure explains how to export Evergreen bibliographic records into MARC files using the marc_export support script. All steps should be performed by the \r
- <systemitem class="username">opensrf</systemitem> user from your Evergreen server.</para>\r
- <simplesect>\r
- <title>Importing Authority Records from Command Line</title>\r
- <para>The major advantages of the command line approach are its speed and its convenience for system administrators who can perform bulk loads of authority records in a \r
- controlled environment.</para> \r
- <procedure>\r
-\r
- <step> \r
- <para>Run <command>marc2are.pl</command> against the authority records, specifying the user name, password, MARC type (USMARC or XML). Use \r
- <varname>STDOUT</varname> redirection \r
- to either pipe the output directly into the next command or into an output file for inspection. For example, to process a file with authority records in MARCXML format\r
- named <filename>auth_small.xml</filename> using the default user name and password, and directing the output into a file named <filename>auth.are</filename>:</para>\r
-<screen>\r
-<userinput>cd Open-ILS/src/extras/import/</userinput>\r
-<userinput>perl marc2are.pl --user admin --pass open-ils --marctype XML auth_small.xml > auth.are</userinput>\r
-</screen>\r
- <note><para>The MARC type will default to USMARC if the <option>--marctype</option> option is not specified.</para></note>\r
- </step>\r
- <step> \r
- <para>Run <command>pg_loader.pl</command> to generate the SQL necessary for importing the authority records into your system. To save time for very large batches of records, you could \r
- simply pipe the output of <command>marc2are.pl</command> directly into <command>pg_loader.pl</command>.</para>\r
-<screen>\r
-<userinput>cd Open-ILS/src/extras/import/</userinput>\r
-<userinput> perl pg_loader.pl --auto are --order are auth.are > auth_load.sql</userinput>\r
-</screen>\r
- \r
- </step>\r
- <step> \r
- <para>Load the authority records from the SQL file that you generated in the last step into your Evergreen database using the psql tool. Assuming the default user \r
- name, host name, and database name for an Evergreen instance, that command looks like:</para>\r
-<screen>\r
-<userinput>psql -U evergreen -h localhost -d evergreen -f auth_load.sql</userinput>\r
-</screen>\r
- \r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Importing authority records using the MARC Batch Import/Export interface from the Staff Client</title>\r
- <para>Good for loading batches of up to 5,000 records (roughly) at a time, the major advantages to importing authority records using the MARC Batch Import/Export interface are \r
- that it does not require command-line or direct database access – good for both security in that it minimizes the number of people who need this access and for spreading the \r
- effort around to others in the library – and it does most of the work (for example, figuring out whether the batch of records is in XML or USMARC format) for you.</para> \r
- <para>To import a set of MARC authority records from the MARC Batch Import/Export interface:</para>\r
- <procedure>\r
- <step> \r
- <para>From the Evergreen staff client, select <menuchoice><guimenu>Cataloging</guimenu><guimenuitem>MARC Batch Import/Export</guimenuitem></menuchoice>. \r
- The <guilabel>Evergreen MARC File Upload</guilabel> screen opens, with <guilabel>Import Records</guilabel> as the highlighted tab.</para>\r
- </step>\r
- <step> \r
- <para>From the <guimenu>Bibliographic records</guimenu> drop-down menu, select <guimenuitem>Authority records</guimenuitem>.</para>\r
- \r
- </step>\r
- <step> \r
- <para>Enter a name for the queue (batch import job) in the <guilabel>Create a new upload queue</guilabel> field.</para>\r
- \r
- </step>\r
- <step> \r
- <para>Select the <guilabel>Auto-Import Non-Colliding Records</guilabel> checkbox.</para>\r
- \r
- </step>\r
- <step> \r
- <para>Click the <guibutton>Browse…</guibutton> button to select the file of MARC authorities to import.</para>\r
- \r
- </step>\r
- <step> \r
- <para>Click the <guibutton>Upload</guibutton> button to begin importing the records. The screen displays <guilabel>Uploading…</guilabel>\r
- <guilabel>Processing…</guilabel> to show that the records are being transferred to the server, then displays a progress bar to show the actual import \r
- progress. When the staff client displays the progress bar, you can disconnect your staff client safely. Very large batches of records might time out at this \r
- stage.</para>\r
- \r
- </step>\r
- <step> \r
- <para>Once the import is finished, the staff client displays the results of the import process. You can manually display the import progress by selecting \r
- the <guilabel>Inspect Queue</guilabel> tab of the MARC Batch Import/Export interface and selecting the queue name. By default, the staff client does not \r
- display records that were imported successfully; it only shows records that conflicted with existing entries in the database. The screen shows the overall \r
- status of the import process in the top right-hand corner, with the <guilabel>Total</guilabel> and <guilabel>Imported</guilabel> number of records for the \r
- queue.</para>\r
- </step>\r
- </procedure>\r
-\r
- </simplesect>\r
-\r
- </section>\r
-</chapter>\r
- \r
- \r
-\r
-\r
- \r
-\r
-\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<chapter version="5.0" xml:id="serversideinstallation" xml:lang="EN" xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xl="http://www.w3.org/1999/xlink">
- <info>
- <title>Server-side Installation of Evergreen Software</title>
- <abstract>
- <para>This section describes installation of the Evergreen server-side software and
- its associated components. Installation, configuration, testing and verification of
- the software is straightforward if you follow some simple directions.</para>
- </abstract>
- </info>
- <para>Installing, configuring and testing the Evergreen server-side software is straightforward with the current
- stable software release. See <xref linkend="serversideinstallation-all"/> for instructions tailored to
- installing on some particular distributions of the <systemitem class="osname">Linux</systemitem> operating
- system.</para>
- <para>The current version of the Evergreen server-side software runs as a native application on any of several
- well-known <systemitem class="osname">Linux</systemitem> distributions
- (e.g., <systemitem class="osname">Ubuntu</systemitem> and <systemitem class="osname">Debian</systemitem>).
- It does not currently run as a native application on the <systemitem class="osname">Microsoft Windows</systemitem>
- operating system (e.g., <systemitem class="osname">WindowsXP</systemitem>, <systemitem class="osname">WindowsXP
- Professional</systemitem>, <systemitem class="osname">Windows7</systemitem>), but the software can still be
- installed and run on <systemitem class="osname">Windows</systemitem> via a so-called
- <emphasis>virtualized</emphasis> Linux-guest Operating System (using, for example,
- <application>"VirtualBox"</application> or <application>"VMware"</application>
- to emulate a <systemitem class="osname">Linux</systemitem>
- environment). It can also be installed to run on other <systemitem class="osname">Linux</systemitem>
- systems via virtualized environments (using, for example, <application>"VirtualBox"</application> or
- <application>"VMware"</application>). More information on virtualized environments can be found in
- <xref linkend="serversideinstallation-virtual"/>.</para>
- <para>Installation of the Evergreen Staff Client software is reviewed in <xref linkend="staffclientinstallation"/>. </para>
- <para>The Evergreen server-side software has dependencies on particular versions of certain major software
- sub-components. Successful installation of Evergreen software requires that software versions agree with those
- listed here:</para>
- <table xml:id="serversideinstall-software-dependencies">
- <?dbfo keep-together="always" ?>
- <title>Evergreen Software Dependencies</title>
- <indexterm>
- <primary>Evergreen software dependencies</primary>
- </indexterm>
- <tgroup align="left" cols="3" colsep="1" rowsep="1">
- <colspec colname="Evergreen" colnum="1" colwidth="1.0*"/>
- <colspec colname="OpenSRF" colnum="2" colwidth="1.0*"/>
- <colspec colname="PostgreSQL" colnum="3" colwidth="1.0*"/>
- <thead>
- <row>
- <entry>Evergreen</entry>
- <entry>OpenSRF</entry>
- <entry>PostgreSQL</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>2.0</entry>
- <entry>1.6.3</entry>
- <entry>8.4</entry>
- </row>
- <row>
- <entry>1.6.1.x</entry>
- <entry>1.4.0</entry>
- <entry>8.2 / 8.3</entry>
- </row>
- <row>
- <entry>1.6.0.x</entry>
- <entry>1.2</entry>
- <entry>8.2 / 8.3</entry>
- </row>
- <row>
- <entry>1.4.x</entry>
- <entry>1.0</entry>
- <entry>8.1 / 8.2</entry>
- </row>
- <row>
- <entry>1.2.x</entry>
- <entry>0.9</entry>
- <entry>8.1 / 8.2</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- <section xml:id="serversideinstallation-all">
- <title>Installing Server-Side Software</title>
- <para>This section describes the installation of the major components of Evergreen server-side software.</para>
- <para>As far as possible, you should perform the following steps in the exact order given since the
- success of many steps relies on the successful completion of earlier steps. You should make backup
- copies of files and environments when you are instructed to do so. In the event of installation problems
- those copies can allow you to back out of a step gracefully and resume the installation from a known
- state. See <xref linkend="backingup"/> for further information.</para>
- <para>Of course, after you successfully complete and test the entire Evergreen installation you should
- take a final snapshot backup of your system(s). This can be the first in the series of regularly
- scheduled system backups that you should probably also begin.</para>
- <section xml:id="serversideinstallation-opensrf-2.0.1">
- <indexterm>
- <primary>OpenSRF</primary>
- <secondary>installation</secondary>
- </indexterm>
- <title>Installing OpenSRF 2.0.x On <systemitem class="osname">Ubuntu</systemitem> or
- <systemitem class="osname">Debian</systemitem></title>
- <indexterm>
- <primary>Linux</primary>
- <secondary>Debian</secondary>
- </indexterm>
- <indexterm>
- <primary>Linux</primary>
- <secondary>Ubuntu</secondary>
- </indexterm>
- <para>This section describes the installation of the latest version of the Open Service Request
- Framework (OpenSRF), a major component of the Evergreen server-side software, on
- <systemitem class="osname">Ubuntu</systemitem> or <systemitem class="osname">Debian</systemitem>
- systems. Evergreen software is integrated with and depends on the OpenSRF software
- system.</para>
- <para>Follow the steps outlined here and run the specified tests to ensure that OpenSRF is
- properly installed and configured. Do <emphasis><emphasis role="bold">not</emphasis></emphasis>
- continue with any further Evergreen installation steps
- until you have verified that OpenSRF has been successfully installed and tested.</para>
- <note>
- <para>The following steps have been tested on the x86 (32-bit) architecture of
- <systemitem class="osname">Debian Squeeze (6.0)</systemitem>,
- <systemitem class="osname">Ubuntu Lucid Lynx (10.04)</systemitem>, and on
- <systemitem class="osname">Fedora 13</systemitem> and
- <systemitem class="osname">Fedora 14</systemitem>.</para>
- <para>In the following instructions, you are asked to perform certain steps as
- either the <systemitem class="username">root</systemitem> user, the
- <systemitem class="username">opensrf</systemitem> user, or the
- <systemitem class="username">postgres</systemitem> user.</para>
- <itemizedlist>
- <listitem>
- <para><systemitem class="osname">Debian</systemitem> -- To become the
- <systemitem class="username">root</systemitem> user, issue the command
- <command>su -</command> and enter the password of the
- <systemitem class="username">root</systemitem> user.</para>
- </listitem>
- <listitem>
- <para><systemitem class="osname">Ubuntu</systemitem> -- To become the
- <systemitem class="username">root</systemitem> user, issue the command
- <command>sudo su -</command> and enter the password of the
- <systemitem class="username">root</systemitem> user.</para>
- </listitem>
- </itemizedlist>
- <para>To switch from the <systemitem class="username">root</systemitem> user to a
- different user, issue the command <command>su - USERNAME</command>. For example, to
- switch from the <systemitem class="username">root</systemitem> user to the
- <systemitem class="username">opensrf</systemitem> user, issue the command
- <command>su - opensrf</command>. Once you have become a non-root user, to become
- the <systemitem class="username">root</systemitem> user again, simply issue the command
- <command>exit</command>.</para>
- </note>
- <procedure>
- <step>
- <title>Add New <systemitem class="username">opensrf</systemitem> User</title>
- <para>As the <systemitem class="username">root</systemitem> user, add the
- <systemitem class="username">opensrf</systemitem> user to the system.
- In the following example, the default shell for the
- <systemitem class="username">opensrf</systemitem> user is automatically set
- to <command>/bin/bash</command> to inherit a reasonable environment:</para>
- <screen>
- <userinput>
- # as the root user:
- useradd -m -s /bin/bash opensrf
- passwd opensrf</userinput>
- </screen>
- </step>
- <step>
- <title>Download and Unpack Latest OpenSRF Version</title>
- <indexterm>
- <primary>OpenSRF</primary>
- <secondary>download</secondary>
- </indexterm>
- <para>The latest version of OpenSRF can be found here:
- <ulink url="http://evergreen-ils.org/downloads/opensrf-2.0.1.tar.gz"></ulink> .
- As the <systemitem class="username">opensrf</systemitem> user, change to
- the directory <filename class="directory">/home/opensrf</filename> then download
- and extract OpenSRF. The new subdirectory
- <filename class="directory">/home/opensrf/opensrf-2.0.1</filename> will be created:</para>
- <screen>
- <userinput>
- # as the opensrf user:
- cd /home/opensrf
- wget http://evergreen-ils.org/downloads/opensrf-2.0.1.tar.gz
- tar zxf opensrf-2.0.1.tar.gz</userinput>
- </screen>
- </step>
- <step>
- <title>Install Prerequisites to Build OpenSRF</title>
- <para>In this section you will install and configure a set of prerequisites that will be
- used to build OpenSRF. In a following step you will actually build the OpenSRF software
- using the <command>make</command> utility.</para>
- <para>As the <systemitem class="username">root</systemitem> user, enter the commands show
- below to build the prerequisites from the software distribution that you just downloaded
- and unpacked. Remember to replace <emphasis>[DISTRIBUTION]</emphasis> in the following
- example with the keyword corresponding to the name of one of the
- <systemitem class="osname">Linux</systemitem> distributions listed in the
- distribution keywords table <xref linkend="serversideinstallation-keywords-opensrf"/> .
- For example, to install the prerequisites for Ubuntu version 10.04 (Lucid Lynx) you would
- enter this command: <command>make -f src/extras/Makefile.install ubuntu-lucid</command> .</para>
- <screen>
- <userinput>
- # as the root user:
- cd /home/opensrf/opensrf-2.0.1
- make -f src/extras/Makefile.install [DISTRIBUTION]</userinput>
- </screen>
- <table xml:id="serversideinstallation-keywords-opensrf">
- <?dbfo keep-together="always" ?>
- <title>Keyword Targets for OpenSRF <application>"make"</application> Command</title>
- <tgroup align="left" cols="2" colsep="1" rowsep="1">
- <colspec colname="keyword" colnum="1" colwidth="1.0*"/>
- <colspec colname="linux_version" colnum="2" colwidth="3.0*"/>
- <thead>
- <row>
- <entry>Keyword</entry>
- <entry>Linux Version</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>debian-squeeze</entry>
- <entry>Debian "Squeeze" (6.0)</entry>
- </row>
- <row>
- <entry>debian-etch</entry>
- <entry>Debian "Etch" (4.0)</entry>
- </row>
- <row>
- <entry>debian-lenny</entry>
- <entry>Debian "Lenny" (5.0)</entry>
- </row>
- <row>
- <entry>ubuntu-hardy</entry>
- <entry>Ubuntu "Hardy Heron" (8.04)</entry>
- </row>
- <row>
- <entry>ubuntu-karmic</entry>
- <entry>Ubuntu "Karmic Koala" (9.10)</entry>
- </row>
- <row>
- <entry>ubuntu-lucid</entry>
- <entry>Ubuntu "Lucid Lynx" (10.04)</entry>
- </row>
- <row>
- <entry>fedora13</entry>
- <entry>Fedora "Goddard" (13)</entry>
- </row>
- <row>
- <entry>fedora13</entry>
- <entry>Fedora "Laughlin" (14)</entry>
- </row>
- <row>
- <entry>centos</entry>
- <entry>CentOS 5</entry>
- </row>
- <row>
- <entry>rhel</entry>
- <entry>Red Hat Enterprise Linux 5</entry>
- </row>
- <row>
- <entry>gentoo</entry>
- <entry>Gentoo</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- <indexterm>
- <primary>Linux</primary>
- <secondary>Debian</secondary>
- </indexterm>
- <indexterm>
- <primary>Linux</primary>
- <secondary>Fedora</secondary>
- </indexterm>
- <indexterm>
- <primary>Linux</primary>
- <secondary>Ubuntu</secondary>
- </indexterm>
- <indexterm>
- <primary>Linux</primary>
- <secondary>CentOS</secondary>
- </indexterm>
- <indexterm>
- <primary>Linux</primary>
- <secondary>Red Hat</secondary>
- </indexterm>
- <indexterm>
- <primary>Linux</primary>
- <secondary>Gentoo</secondary>
- </indexterm>
- <para>This will install a number of packages on the system that are required by OpenSRF,
- including some Perl modules from CPAN. You can say <literal>No</literal> to the initial
- CPAN configuration prompt to allow it to automatically configure itself to download and
- install Perl modules from CPAN. The CPAN installer will ask you a number of times whether
- it should install prerequisite modules - say <literal>Yes</literal>.</para>
- </step>
- <step>
- <title>Build OpenSRF</title>
- <para>In this section you will configure, build and install the OpenSRF
- components that support other Evergreen services.</para>
- <substeps>
- <step>
- <title>Configure OpenSRF</title>
- <indexterm>
- <primary>OpenSRF</primary>
- <secondary>configure</secondary>
- </indexterm>
- <para>As the <systemitem class="username">opensrf</systemitem>
- user, return to the new OpenSRF build directory and use the
- <command>configure</command> utility to prepare for the next
- step of compiling and linking the software. If you wish to
- include support for Python and Java, add the configuration
- options <option>--enable-python</option> and
- <option>--enable-java</option>, respectively:</para>
- <screen>
- <userinput>
- # as the opensrf user:
- cd /home/opensrf/opensrf-2.0.1
- ./configure --prefix=/openils --sysconfdir=/openils/conf
- make</userinput>
- </screen>
- <para>This step will take several minutes to complete.</para>
- </step>
- <step>
- <title>Compile, Link and Install OpenSRF</title>
- <para>As the <systemitem class="username">root</systemitem>
- user, return to the new OpenSRF build directory and use the
- <command>make</command> utility to compile, link and install
- OpenSRF:</para>
- <screen>
- <userinput>
- # as the root user:
- cd /home/opensrf/opensrf-2.0.1
- make install</userinput>
- </screen>
- <para>This step will take several minutes to complete.</para>
- </step>
- <step>
- <title>Update the System Dynamic Library Path</title>
- <para>You must update the system dynamic library path to force
- your system to recognize the newly installed libraries. As the
- <systemitem class="username">root</systemitem> user, do this by
- creating the new file
- <filename>/etc/ld.so.conf.d/osrf.conf</filename> containing two
- new library paths, then execute the command
- <command>ldconfig</command> to automatically read the file and
- modify the system dynamic library path:</para>
- <screen>
- <userinput>
- # as the root user:
- echo "/openils/lib" > /etc/ld.so.conf.d/osrf.conf
- echo "/usr/local/lib" >> /etc/ld.so.conf.d/osrf.conf
- ldconfig</userinput>
- </screen>
- </step>
- <step xml:id="serversideinstallation-definedomains">
- <title>Define Public and Private OpenSRF Domains</title>
- <para>For security purposes, OpenSRF uses Jabber domains to separate services
- into public and private realms. On a single-server system the easiest way to
- define public and private OpenSRF domains is to define separate host names by
- adding entries to the file <filename>/etc/hosts</filename>.</para>
- <para>In the following steps we will use the example domains
- <systemitem class="domainname">public.localhost</systemitem> for the public
- domain and <systemitem class="domainname">private.localhost</systemitem>
- for the private domain. In an upcoming step, you will configure two special
- <systemitem class="service">ejabberd</systemitem> users
- to handle communications for these two domains.</para>
- <para>As the <systemitem class="username">root</systemitem> user, edit the file
- <filename>/etc/hosts</filename> and add the following example domains:</para>
- <indexterm>
- <primary>Jabber</primary>
- </indexterm>
- <screen>
- <userinput>
- # as the root user:
- 127.0.1.2 public.localhost public
- 127.0.1.3 private.localhost private</userinput>
- </screen>
- </step>
- <step>
- <title>Change File Ownerships</title>
- <para>Finally, as the <systemitem class="username">root</systemitem>
- user, change the ownership of all files installed in the
- directory <filename class="directory">/openils</filename> to the
- user <systemitem class="username">opensrf</systemitem>:</para>
- <screen>
- <userinput>
- # as the root user:
- chown -R opensrf:opensrf /openils</userinput>
- </screen>
- </step>
- </substeps>
- </step>
- <step xml:id="stop-ejabberd-service">
- <title>Stop the <systemitem class="service">ejabberd</systemitem> Service</title>
- <indexterm>
- <primary>ejabberd</primary>
- </indexterm>
- <para>Before continuing with configuration of <systemitem class="service">ejabberd</systemitem>
- you must stop that service. As the <systemitem class="username">root</systemitem> user,
- execute the following command to stop the service:</para>
- <screen>
- <userinput>
- # as the root user:
- /etc/init.d/ejabberd stop</userinput>
- </screen>
- <para>If <systemitem class="service">ejabberd</systemitem> reports that it
- is already stopped, there may have been a problem when it started back
- in the installation step. If there are any remaining daemon processes such as
- <systemitem class="daemon">beam</systemitem> or
- <systemitem class="daemon">epmd</systemitem>
- you may need to perform the following commands to kill them:</para>
- <screen>
- <userinput>
- # as the root user:
- epmd -kill
- killall beam; killall beam.smp
- rm /var/lib/ejabberd/*
- echo 'ERLANG_NODE=ejabberd@localhost' >> /etc/default/ejabberd</userinput>
- </screen>
- </step>
- <step>
- <title>Edit the <systemitem class="service">ejabberd</systemitem> configuration</title>
- <para>You must make several configuration changes for the
- <systemitem class="service">ejabberd</systemitem> service before
- it is started again.
- As the <systemitem class="username">root</systemitem> user, edit the file
- <filename>/etc/ejabberd/ejabberd.cfg</filename> and make the following changes:</para>
- <substeps>
- <step>
- <para>Change the line:</para>
- <literal>{hosts, ["localhost"]}.</literal>
- <para>to instead read:</para>
- <literal>{hosts, ["localhost", "private.localhost", "public.localhost"]}.</literal>
- <para/>
- </step>
- <step>
- <para>Change the line for older versions of
- <systemitem class="service">ejabberd</systemitem>:</para>
- <literal>{max_user_sessions, 10}</literal>
- <para>to instead read:</para>
- <literal>{max_user_sessions, 10000}</literal>
- <para/>
- <para>Change the line for newer versions of
- <systemitem class="service">ejabberd</systemitem>:</para>
- <literal>{access, max_user_sessions, [{10, all}]}</literal>
- <para>to instead read:</para>
- <literal>{access, max_user_sessions, [{10000, all}]}</literal>
- </step>
- <step>
- <para>Change all three occurrences of:</para>
- <literal>max_stanza_size</literal>
- <para>to instead read:</para>
- <literal>2000000</literal>
- </step>
- <step>
- <para>Change both occurrences of:</para>
- <literal>maxrate</literal>
- <para>to instead read:</para>
- <literal>500000</literal>
- </step>
- <step>
- <para>Comment out the line:</para>
- <literal>{mod_offline, []}</literal>
- <para>by placing two <literal>%</literal> comment signs in front
- so it instead reads:</para>
- <literal>%%{mod_offline, []}</literal>
- </step>
- </substeps>
- </step>
- <step xml:id="serversideinstallation-opensrf-continued">
- <title>Restart the <systemitem class="service">ejabberd</systemitem> service</title>
- <para>As the <systemitem class="username">root</systemitem> user, restart the
- <systemitem class="service">ejabberd</systemitem> service to test the
- configuration changes and to register your users:</para>
- <screen>
- <userinput>
- # as the root user:
- /etc/init.d/ejabberd start</userinput>
- </screen>
- </step>
- <step>
- <title>Register <systemitem class="username">router</systemitem> and
- <systemitem class="username">opensrf</systemitem> as
- <systemitem class="service">ejabberd</systemitem> users</title>
- <para>The two <systemitem class="service">ejabberd</systemitem> users
- <systemitem class="username">router</systemitem> and
- <systemitem class="username">opensrf</systemitem> must be registered
- and configured to manage OpenSRF router service and communications
- for the two domains <literal>public.localhost</literal> and
- <literal>private.localhost</literal> that you added to the file
- <filename>/etc/hosts</filename> in a previous step
- (see <xref linkend="serversideinstallation-definedomains"/>).
- The users include:</para>
- <itemizedlist>
- <listitem>
- <para>the <systemitem class="username">router</systemitem> user,
- to whom all requests to connect to an OpenSRF service will be
- routed;</para>
- </listitem>
- <listitem>
- <para>the <systemitem class="username">opensrf</systemitem> user,
- which clients use to connect to OpenSRF services (you may name
- the user anything you like, but we use
- <literal>opensrf</literal> in these examples)</para>
- </listitem>
- </itemizedlist>
- <para>As the <systemitem class="username">root</systemitem> user, execute the
- <command>ejabberdctl</command> utility as shown below to register and create passwords
- for the users <systemitem class="username">router</systemitem> and
- <systemitem class="username">opensrf</systemitem> on each domain (remember to replace
- <emphasis>NEWPASSWORD</emphasis> with the appropriate password):</para>
- <screen>
- <userinput>
- # as the root user:
- # Note: the syntax for registering a user with ejabberdctl is:
- # ejabberdctl register USER DOMAIN PASSWORD
- ejabberdctl register router private.localhost NEWPASSWORD
- ejabberdctl register router public.localhost NEWPASSWORD
- ejabberdctl register opensrf private.localhost NEWPASSWORD
- ejabberdctl register opensrf public.localhost NEWPASSWORD</userinput>
- </screen>
- <para>The users <systemitem class="username">router</systemitem> and
- <systemitem class="username">opensrf</systemitem> and their respective passwords
- will be used again in <xref linkend="serversideinstallation-passwords"/> when
- we modify the OpenSRF configuration file
- <filename>/openils/conf/opensrf_core.xml</filename> .</para>
- <note>
- <para>
- There appears to be a problem with <command>ejabberdctl</command> in
- that it does not escape input correctly, so a password like
- <literal>'0P3N$SRF'</literal> will be created as <literal>'0P3N'</literal>.
- A bug against ejabberd has been filed. To register a password using
- <command>ejabberdctl</command> with special shell characters until such
- time as that bug is resolved, the workaround is to specify a
- double-escaped character at the command line, for example,
- <literal>'0P3N\\\\$RF'</literal> .</para>
- </note>
- </step>
- <step xml:id="serversideinstallation-opensrf-createconfig">
- <title>Create OpenSRF configuration files</title>
- <para>As the <systemitem class="username">opensrf</systemitem> user,
- execute the following commands to create the new configuration files
- <filename>/openils/conf/opensrf_core.xml</filename> and
- <filename>/openils/conf/opensrf.xml</filename> from the example templates:</para>
- <screen>
- <userinput>
- # as the opensrf user:
- cd /openils/conf
- cp opensrf.xml.example opensrf.xml
- cp opensrf_core.xml.example opensrf_core.xml</userinput>
- </screen>
- </step>
- <step xml:id="serversideinstallation-passwords">
- <title>Update usernames and passwords in the OpenSRF configuration file</title>
- <para>As the <systemitem class="username">opensrf</systemitem> user, edit the
- OpenSRF configuration file <filename>/openils/conf/opensrf_core.xml</filename>
- and update the usernames and passwords to match the values shown in the
- following table. The left-hand side of
- <xref linkend="serversideinstallation-xpath-table-1"/> shows common XPath
- syntax to indicate the approximate position within the XML file that needs
- changes. The right-hand side of the table shows the replacement values:</para>
- <table xml:id="serversideinstallation-xpath-table-1">
- <?dbfo keep-together="always" ?>
- <title>Sample XPath syntax for editing 'opensrf_core.xml'</title>
- <tgroup align="left" cols="2" colsep="1" rowsep="1">
- <colspec colname="Xpath" colnum="1" colwidth="1.6*"/>
- <colspec colname="Value" colnum="2" colwidth="2.0*"/>
- <thead>
- <row>
- <entry>XPath location</entry>
- <entry>Value</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>/config/opensrf/username</entry>
- <entry>
- <systemitem class="username">opensrf</systemitem>
- </entry>
- </row>
- <row>
- <entry>/config/opensrf/passwd </entry>
- <entry><systemitem class="domainname">private.localhost</systemitem>
- password for
- <systemitem class="username">opensrf</systemitem> user
- </entry>
- </row>
- <row>
- <entry>/config/gateway/username</entry>
- <entry>
- <systemitem class="username">opensrf</systemitem>
- </entry>
- </row>
- <row>
- <entry>/config/gateway/passwd</entry>
- <entry><systemitem class="domainname">public.localhost</systemitem>
- password for
- <systemitem class="username">opensrf</systemitem> user
- </entry>
- </row>
- <row>
- <entry>/config/routers/router/transport/username,
- first entry where server == public.localhost</entry>
- <entry>
- <systemitem class="username">router</systemitem>
- </entry>
- </row>
- <row>
- <entry>/config/routers/router/transport/password,
- first entry where server == public.localhost</entry>
- <entry><systemitem class="domainname">public.localhost</systemitem>
- password for
- <systemitem class="username">router</systemitem> user
- </entry>
- </row>
- <row>
- <entry>/config/routers/router/transport/username,
- second entry where server == private.localhost</entry>
- <entry>
- <systemitem class="username">router</systemitem>
- </entry>
- </row>
- <row>
- <entry>/config/routers/router/transport/password,
- second entry where server == private.localhost</entry>
- <entry><systemitem class="domainname">private.localhost</systemitem>
- password for
- <systemitem class="username">router</systemitem> user
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- <para>You may also need to modify the file to specify the domains from which
- <systemitem class="service">OpenSRF</systemitem> will accept connections,
- and to which it will make connections.
- If you are installing <application>OpenSRF</application> on a single server
- and using the <systemitem class="domainname">private.localhost</systemitem> and
- <systemitem class="domainname">public.localhost</systemitem> domains,
- these will already be set to the correct values. Otherwise, search and replace
- to match values for your own systems.</para>
- </step>
- <step>
- <title>Set the location of the persistent database</title>
- <para>As the <systemitem class="username">opensrf</systemitem> user, edit the
- file <filename>/openils/conf/opensrf.xml</filename>, then find and verify that
- the element <literal>dbfile</literal> (near the end of the file) is set to the
- location of the persistent database. If necessary, change the default line:</para>
- <literal>/openils/var/persist.db</literal>
- <para>to instead read:</para>
- <literal>/tmp/persist.db</literal>
- <para>Following is a sample modification of that portion of the file:</para>
- <programlisting language="xml"><![CDATA[
-<!-- Example of an app-specific setting override -->
-<opensrf.persist>
- <app_settings>
- <dbfile>/tmp/persist.db</dbfile>
- </app_settings>
-</opensrf.persist>
-]]></programlisting>
- </step>
- <step xml:id="serversideinstallation-srfsh">
- <title>Create configuration files for users needing <command>srfsh</command></title>
- <para>In this section you will set up a special configuration file for each user
- who will need to run the <command>srfsh</command> (pronounced <emphasis>surf
- shell</emphasis>) utility.</para>
- <indexterm>
- <primary>srfsh</primary>
- </indexterm>
- <para>The software installation will automatically create the utility
- <command>srfsh</command>, a command line diagnostic tool for testing and
- interacting with <application>OpenSRF</application>. It will be used
- in a future step to complete and test the Evergreen installation. See
- <xref linkend="serversideinstallation-testing"/> for further information.</para>
- <para>As the <systemitem class="username">root</systemitem> user, copy the
- sample configuration file <filename>/openils/conf/srfsh.xml.example</filename>
- to the home directory of each user who will use <command>srfsh</command>.
- For instance, do the following for the
- <systemitem class="username">opensrf</systemitem> user:</para>
- <screen>
- <userinput>
- # as the root user:
- cp /openils/conf/srfsh.xml.example /home/opensrf/.srfsh.xml</userinput>
- </screen>
- <para>Edit each user's file <filename>~/.srfsh.xml</filename> and make the
- following changes:</para>
- <itemizedlist>
- <listitem>
- <para>Modify <literal>domain</literal> to be the router hostname
- (following our domain examples,
- <systemitem class="domainname">private.localhost</systemitem> will give
- <command>srfsh</command> access to all OpenSRF services, while
- <systemitem class="domainname">public.localhost</systemitem>
- will only allow access to those OpenSRF services that are
- publicly exposed).</para>
- </listitem>
- <listitem>
- <para>Modify <literal>username</literal> and
- <literal>password</literal> to match the
- <literal>opensrf</literal> Jabber user for the chosen
- domain</para>
- </listitem>
- <listitem>
- <para>Modify <literal>logfile</literal> to be the full path for
- a log file to which the user has write access</para>
- </listitem>
- <listitem>
- <para>Modify <literal>loglevel</literal> as needed for testing</para>
- </listitem>
- <listitem>
- <para>Change the owner of the file to match the owner of the
- home directory</para>
- </listitem>
- </itemizedlist>
- <para>Following is a sample of the file:</para>
- <programlisting language="xml"><![CDATA[
-<?xml version="1.0"?>
-<!-- This file follows the standard bootstrap config file layout -->
-<!-- found in opensrf_core.xml -->
-<srfsh>
-<router_name>router</router_name>
-<domain>private.localhost</domain>
-<username>opensrf</username>
-<passwd>SOMEPASSWORD</passwd>
-<port>5222</port>
-<logfile>/tmp/srfsh.log</logfile>
-<!-- 0 None, 1 Error, 2 Warning, 3 Info, 4 debug, 5 Internal (Nasty) -->
-<loglevel>4</loglevel>
-</srfsh>
-]]></programlisting>
- </step>
- <step>
- <title>Modify the environmental variable <envar>PATH</envar> for the
- <systemitem class="username">opensrf</systemitem> user</title>
- <para>As the <systemitem class="username">opensrf</systemitem> user, modify the
- environmental variable <envar>PATH</envar> by adding a new file path to the
- <systemitem class="username">opensrf</systemitem> user's shell configuration
- file <filename>~/.bashrc</filename>:</para>
- <screen>
- <userinput>
- # as the opensrf user:
- echo "export PATH=/openils/bin:\$PATH" >> ~/.bashrc</userinput>
- </screen>
- </step>
- <step>
- <title>Start OpenSRF</title>
- <para>As the <systemitem class="username">root</systemitem> user, start the
- <systemitem class="service">ejabberd</systemitem> and
- <systemitem class="service">memcached</systemitem> services:</para>
- <screen>
- <userinput>
- # as the root user:
- /etc/init.d/ejabberd start
- /etc/init.d/memcached start</userinput>
- </screen>
- <para>Then as the <systemitem class="username">opensrf</systemitem> user,
- start OpenSRF as follows:</para>
- <screen>
- <userinput>
- # as the opensrf user:
- osrf_ctl.sh -l -a start_all</userinput>
- </screen>
- <para>The flag <option>-l</option> forces Evergreen to use
- <systemitem class="domainname">localhost</systemitem> (your current system)
- as the hostname. The flag <option>-a start_all</option> starts the
- OpenSRF <systemitem class="service">router</systemitem> ,
- <systemitem class="service">Perl</systemitem> , and
- <systemitem class="service">C</systemitem> services.</para>
- <itemizedlist>
- <listitem>
- <para>You can also start Evergreen without the
- <option>-l</option> flag, but the <command>osrf_ctl.sh</command>
- utility must know the fully qualified domain name for the system
- on which it will execute. That hostname was probably specified
- in the configuration file <filename>opensrf.xml</filename> which
- you configured in a previous step.</para>
- </listitem>
- <listitem>
- <para>If you receive an error message similar to
- <emphasis>osrf_ctl.sh: command not found</emphasis>, then your
- environment variable <envar>PATH</envar> does not include the
- directory <filename class="directory">/openils/bin</filename>.
- As the <systemitem class="username">opensrf</systemitem> user,
- edit the configuration file <filename>~/.bashrc</filename> and
- add the following line:
- <literal>export PATH=$PATH:/openils/bin</literal></para>
- </listitem>
- </itemizedlist>
- </step>
- <step>
- <title>Test connections to OpenSRF</title>
- <para>Once you have installed and started OpenSRF, as the
- <systemitem class="username">root</systemitem> user test your connection to
- <systemitem class="service">OpenSRF</systemitem> with the <command>srfsh</command>
- utility and try to call the <command>add</command> method on the OpenSRF
- <systemitem class="service">math</systemitem> service:</para>
- <screen>
- <userinput>
- # as the root user:
- /openils/bin/srfsh</userinput>
- <computeroutput>
- srfsh# <userinput>request opensrf.math add 2 2</userinput></computeroutput>
- <computeroutput>
- Received Data: 4
- ------------------------------------
- Request Completed Successfully
- Request Time in seconds: 0.007519
- ------------------------------------</computeroutput>
- </screen>
- <para>For other <command>srfsh</command> commands, type in
- <userinput>help</userinput> at the prompt.</para>
- </step>
- <step>
- <title>Stop OpenSRF</title>
- <para>After OpenSRF has started, you can stop it at any time by using the
- <command>osrf_ctl.sh</command> again. As the
- <systemitem class="username">opensrf</systemitem>
- user, stop OpenSRF as follows:</para>
- <screen>
- <userinput>
- # as the opensrf user:
- osrf_ctl.sh -l -a stop_all</userinput>
- </screen>
- </step>
- </procedure>
- </section>
- <section xml:id="serversideinstallation-ubuntudebian">
- <title>Installing Evergreen 2.x On <systemitem class="osname">Ubuntu</systemitem> or
- <systemitem class="osname">Debian</systemitem></title>
- <indexterm>
- <primary>Linux</primary>
- <secondary>Debian</secondary>
- </indexterm>
- <indexterm>
- <primary>Linux</primary>
- <secondary>Ubuntu</secondary>
- </indexterm>
- <para>This section outlines the installation process for the latest stable
- version of Evergreen on <systemitem class="osname">Ubuntu</systemitem> or
- <systemitem class="osname">Debian</systemitem> systems. See
- <xref linkend="serversideinstallation-fedora"/> for description of a similar
- installation on a <systemitem class="osname">Fedora 14</systemitem> system.</para>
- <para>In this section you will download, unpack, install, configure and test the Evergreen
- system, including the Evergreen server and the PostgreSQL database system. You will make several
- configuration changes and adjustments to the software, including updates to configure the system
- for your own locale, and some updates needed to work around a few known issues.</para>
- <note>
- <para>The following steps have been tested on the x86 (32-bit) and x86-64 (64-bit)
- architectures. There may be differences between the Desktop and Server editions of
- <systemitem class="osname">Ubuntu</systemitem>. These instructions assume the Server
- edition.</para>
- <para>In the following instructions, you are asked to perform certain steps as
- either the <systemitem class="username">root</systemitem> user, the
- <systemitem class="username">opensrf</systemitem> user, or the
- <systemitem class="username">postgres</systemitem> user.</para>
- <itemizedlist>
- <listitem>
- <para><systemitem class="osname">Debian</systemitem> -- To become the
- <systemitem class="username">root</systemitem> user, issue the command
- <command>su -</command> and enter the password of the
- <systemitem class="username">root</systemitem> user.</para>
- </listitem>
- <listitem>
- <para><systemitem class="osname">Ubuntu</systemitem> -- To become the
- <systemitem class="username">root</systemitem> user, issue the command
- <command>sudo su -</command> and enter the password of the
- <systemitem class="username">root</systemitem> user.</para>
- </listitem>
- </itemizedlist>
- <para>To switch from the <systemitem class="username">root</systemitem> user to a
- different user, issue the command <command>su - USERNAME</command>. For example, to
- switch from the <systemitem class="username">root</systemitem> user to the
- <systemitem class="username">opensrf</systemitem> user, issue the command
- <command>su - opensrf</command>. Once you have become a non-root user, to become the
- <systemitem class="username">root</systemitem> user again, simply issue the command
- <command>exit</command>.</para>
- </note>
- <procedure>
- <step>
- <title>Install OpenSRF</title>
- <para>Evergreen software is integrated with and depends on the Open Service
- Request Framework (OpenSRF) software system. For further information on
- installing, configuring and testing OpenSRF, see
- <xref linkend="serversideinstallation-opensrf-2.0.1"/>.</para>
- <para>Follow the steps outlined in that section and run the specified tests to
- ensure that OpenSRF is properly installed and configured. Do
- <emphasis><emphasis role="bold">not</emphasis></emphasis> continue with
- any further Evergreen installation steps until you have verified that OpenSRF
- has been successfully installed and tested.</para>
- </step>
- <step>
- <title>Download and Unpack Latest Evergreen Version</title>
- <para>The latest version of Evergreen can be found here:
- <ulink url="http://evergreen-ils.org/downloads/Evergreen-ILS-2.0.9.tar.gz"></ulink> .
- As the <systemitem class="username">opensrf</systemitem> user, change to
- the directory <filename class="directory">/home/opensrf</filename> then download
- and extract Evergreen. The new subdirectory
- <filename class="directory">/home/opensrf/Evergreen-ILS-2.0.9</filename>
- will be created:</para>
- <screen>
- <userinput>
- # as the opensrf user:
- cd /home/opensrf
- wget http://evergreen-ils.org/downloads/Evergreen-ILS-2.0.9.tar.gz
- tar zxf Evergreen-ILS-2.0.9.tar.gz</userinput>
- </screen>
- </step>
- <step xml:id="serversideinstallation-installprereq">
- <title>Install Prerequisites to Build Evergreen</title>
- <para>In this section you will install and configure a set of prerequisites that will be
- used later in <xref linkend="serversideinstallation-configure"/> and
- <xref linkend="serversideinstallation-compile"/> to build the Evergreen software
- using the <command>make</command> utility.</para>
- <para>As the <systemitem class="username">root</systemitem> user, enter the commands show
- below to build the prerequisites from the software distribution that you just downloaded
- and unpacked. Remember to replace <emphasis>[DISTRIBUTION]</emphasis> in the following
- example with the keyword corresponding to the name of one of the
- <systemitem class="osname">Linux</systemitem> distributions listed in the in the
- distribution keywords table <xref linkend="serversideinstallation-keywords-evergreen"/>.
- For example, to install the prerequisites for Ubuntu version 10.05 (Lucid Lynx) you would
- enter this command: <command>make -f Open-ILS/src/extras/Makefile.install
- ubuntu-lucid</command>.</para>
- <screen>
- <userinput>
- # as the root user:
- cd /home/opensrf/Evergreen-ILS-2.0.9
- make -f Open-ILS/src/extras/Makefile.install [DISTRIBUTION]</userinput>
- </screen>
-
- <table xml:id="serversideinstallation-keywords-evergreen">
- <?dbfo keep-together="always" ?>
- <title>Keyword Targets for Evergreen <application>"make"</application> Command</title>
- <tgroup align="left" cols="2" colsep="1" rowsep="1">
- <colspec colname="keyword" colnum="1" colwidth="1.0*"/>
- <colspec colname="linux_version" colnum="2" colwidth="3.0*"/>
- <thead>
- <row>
- <entry>Keyword</entry>
- <entry>Linux Version</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>debian-squeeze</entry>
- <entry>Debian "Squeeze" (6.0)</entry>
- </row>
- <row>
- <entry>debian-lenny</entry>
- <entry>Debian "Lenny" (5.0)</entry>
- </row>
- <row>
- <entry>ubuntu-hardy</entry>
- <entry>Ubuntu "Hardy Heron" (8.04)</entry>
- </row>
- <row>
- <entry>ubuntu-lucid</entry>
- <entry>Ubuntu "Lucid Lynx" (10.04)</entry>
- </row>
- <row>
- <entry>fedora13</entry>
- <entry>Fedora "Goddard" (13)</entry>
- </row>
- <row>
- <entry>centos</entry>
- <entry>CentOS 5</entry>
- </row>
- <row>
- <entry>rhel</entry>
- <entry>Red Hat Enterprise Linux 5</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- <indexterm>
- <primary>Linux</primary>
- <secondary>Debian</secondary>
- </indexterm>
- <indexterm>
- <primary>Linux</primary>
- <secondary>Fedora</secondary>
- </indexterm>
- <indexterm>
- <primary>Linux</primary>
- <secondary>Ubuntu</secondary>
- </indexterm>
- <indexterm>
- <primary>Linux</primary>
- <secondary>CentOS</secondary>
- </indexterm>
- <indexterm>
- <primary>Linux</primary>
- <secondary>Red Hat</secondary>
- </indexterm>
- </step>
- <step performance="optional">
- <title>(OPTIONAL) Install the PostgreSQL Server</title>
- <indexterm>
- <primary>databases</primary>
- <secondary>PostgreSQL</secondary>
- </indexterm>
- <para>Since the PostgreSQL server is usually a standalone server in multi-server
- production systems, the prerequisite installer Makefile in the previous section
- (see <xref linkend="serversideinstallation-installprereq"/>)
- does not automatically install PostgreSQL. You must install the PostgreSQL server
- yourself, either on the same system as Evergreen itself or on another system.
- If your PostgreSQL server is on a different system, just skip this step.
- If your PostgreSQL server will be on the same system as your Evergreen
- software, you can install the required PostgreSQL server packages as described
- in <xref linkend="InstallingPostgreSQL"/>, or you can visit the official
- web site <link xl:href="http://www.postgresql.org/">http://www.postgresql.org</link>
- for more information.</para>
- <note>
- <para>PostgreSQL version 8.4 is the minimum supported version to work
- with Evergreen 2.0. If you have an older version of PostgreSQL,
- you should upgrade before installing Evergreen. To find your current version
- of PostgreSQL, as the <systemitem class="username">postgres</systemitem>
- user execute the command <command>psql</command>, then type
- <userinput>SELECT version();</userinput> to get detailed information
- about your version of PostgreSQL.</para>
- </note>
- </step>
- <step performance="optional">
- <title>Install Perl Modules on PostgreSQL Server</title>
- <para>If PostgreSQL is running on the same system as your Evergreen software,
- then the Perl modules will automatically be available. Just skip this step.
- Otherwise, continue if your PostgreSQL server is running on another system
- and install several Perl modules there. As the
- <systemitem class="username">root</systemitem> user, ensure the gcc compiler
- is installed, then install the following Perl modules:</para>
- <screen>
- <userinput>
- aptitude install gcc libxml-libxml-perl libxml-libxslt-perl
- perl -MCPAN -e shell
- <prompt>cpan></prompt> Business::ISBN
- <prompt>cpan></prompt> install JSON::XS
- <prompt>cpan></prompt> Library::CallNumber::LC
- <prompt>cpan></prompt> install MARC::Record
- <prompt>cpan></prompt> install MARC::File::XML
- <prompt>cpan></prompt> cpan UUID::Tiny</userinput>
- </screen>
- <para>For more information on installing Perl Modules vist the official
- <link xl:href="http://www.cpan.org/">CPAN</link> site.</para>
- <indexterm>
- <primary>Perl</primary>
- <secondary>CPAN</secondary>
- </indexterm>
- </step>
- <step>
- <title>Update the System Dynamic Library Path</title>
- <para>You must update the system dynamic library path to force your system to recognize
- the newly installed libraries. As the <systemitem class="username">root</systemitem> user,
- do this by creating the new file <filename>/etc/ld.so.conf.d/osrf.conf</filename>
- containing two new library paths, then run the command <command>ldconfig</command> to
- automatically read the file and modify the system dynamic library path:</para>
- <screen>
- <userinput>
- # as the root user:
- echo "/usr/local/lib" > /etc/ld.so.conf.d/osrf.conf
- echo "/usr/local/lib/dbd" >> /etc/ld.so.conf.d/osrf.conf
- ldconfig</userinput>
- </screen>
- </step>
- <step performance="optional">
- <title>Restart the PostgreSQL Server</title>
- <para>If PostgreSQL is running on the same system as the rest of Evergreen, as
- the <systemitem class="username">root</systemitem> user you must restart
- PostgreSQL to re-read the new library paths just configured. If PostgreSQL is
- running on another system, you may skip this step.
- As the <systemitem class="username">opensrf</systemitem> user,
- execute the following command (remember to replace
- <emphasis>PGSQL_VERSION</emphasis> with your installed PostgreSQL version,
- for example <literal>8.4</literal>):</para>
- <screen>
- <userinput>
- # as the opensrf user:
- /etc/init.d/postgresql-PGSQL_VERSION restart</userinput>
- </screen>
- </step>
- <step xml:id="serversideinstallation-configure">
- <title>Configure Evergreen</title>
- <para>In this step you will use the <command>configure</command> and
- <command>make</command> utilities to configure Evergreen so it can be compiled
- and linked later in <xref linkend="serversideinstallation-compile"/>.</para>
- <para>As the <systemitem class="username">opensrf</systemitem> user, return to
- the Evergreen build directory and execute these commands:</para>
- <screen>
- <userinput>
- # as the opensrf user:
- cd /home/opensrf/Evergreen-ILS-2.0.9
- ./configure --prefix=/openils --sysconfdir=/openils/conf
- make</userinput>
- </screen>
- </step>
- <step xml:id="serversideinstallation-compile">
- <title>Compile, Link and Install Evergreen</title>
- <para>In this step you will actually compile, link and install Evergreen and the
- default Evergreen Staff Client.</para>
- <para>As the <systemitem class="username">root</systemitem> user, return to the
- Evergreen build directory and use the <command>make</command> utility as shown
- below:</para>
- <screen>
- <userinput>
- # as the root user:
- cd /home/opensrf/Evergreen-ILS-2.0.9
- make STAFF_CLIENT_BUILD_ID=rel_2_0_9 install</userinput>
- </screen>
- <para>The Staff Client will also be automatically built, but you must remember
- to set the variable <envar>STAFF_CLIENT_BUILD_ID</envar> to match the version of the
- Staff Client you will use to connect to the Evergreen server.</para>
- <para>The above commands will create a new subdirectory
- <filename class="directory">/openils/var/web/xul/rel_2_0_9</filename>
- containing the Staff Client.</para>
- <para>To complete the Staff Client installation, as the
- <systemitem class="username">root</systemitem> user execute the following commands to
- create a symbolic link named <emphasis>server</emphasis> in the head of the Staff Client
- directory <filename class="directory">/openils/var/web/xul</filename> that points to the
- subdirectory <filename class="directory">/server</filename> of the new Staff Client
- build:</para>
- <screen>
- <userinput>
- # as the root user:
- cd /openils/var/web/xul
- ln -sf rel_2_0_9/server server</userinput>
- </screen>
- </step>
- <step>
- <title>Copy the OpenSRF Configuration Files</title>
- <para>In this step you will replace some OpenSRF configuration files that you set up in
- <xref linkend="serversideinstallation-opensrf-createconfig"/> when you installed and
- tested OpenSRF.</para>
- <para>You must copy several example OpenSRF configuration files into place after first
- creating backup copies for troubleshooting purposes, then change all the file ownerships
- to <systemitem class="username">opensrf</systemitem>.
- As the <systemitem class="username">root</systemitem> user, execute the following
- commands:</para>
- <screen>
- <userinput>
- # as the root user:
- cd /openils/conf
- cp opensrf.xml opensrf.xml.BAK
- cp opensrf_core.xml opensrf_core.xml.BAK
- cp opensrf.xml.example opensrf.xml
- cp opensrf_core.xml.example opensrf_core.xml
- cp oils_web.xml.example oils_web.xml
- chown -R opensrf:opensrf /openils/</userinput>
- </screen>
- </step>
- <step>
- <title>Create and Configure PostgreSQL Database</title>
- <indexterm>
- <primary>databases</primary>
- <secondary>PostgreSQL</secondary>
- </indexterm>
- <para>In this step you will create the Evergreen database. In the commands
- below, remember to adjust the path of the <emphasis role="bold">contrib</emphasis>
- repository to match your PostgreSQL server
- layout. For example, if you built PostgreSQL from source the path would be
- <filename class="directory">/usr/local/share/contrib</filename> , and if you
- installed the PostgreSQL 8.4 server packages on <systemitem class="osname">Ubuntu</systemitem>,
- the path would be
- <systemitem class="directory">/usr/share/postgresql/8.4/contrib/</systemitem> .</para>
- <substeps>
- <step>
- <title>Create and configure the database</title>
- <para>As the <systemitem class="username">postgres</systemitem>
- user on the PostgreSQL system create the PostgreSQL database,
- then set some internal paths:</para>
- <screen>
- <userinput>
- # as the postgres user:
- createdb evergreen -E UTF8 -T template0
- createlang plperl evergreen
- createlang plperlu evergreen
- createlang plpgsql evergreen</userinput>
- </screen>
- <para>Continue as the <systemitem class="username">postgres</systemitem>
- user and execute the SQL scripts as shown below (remember to adjust the
- paths as needed, where <emphasis>PGSQL_VERSION</emphasis> is
- your installed PostgreSQL version, for example
- <literal>"8.4"</literal>).</para>
- <screen>
- <userinput>
- # as the postgres user:
- psql -f /usr/share/postgresql/PGSQL_VERSION/contrib/tablefunc.sql evergreen
- psql -f /usr/share/postgresql/PGSQL_VERSION/contrib/tsearch2.sql evergreen
- psql -f /usr/share/postgresql/PGSQL_VERSION/contrib/pgxml.sql evergreen</userinput>
- </screen>
- </step>
- <step xml:id="serversideinstallation-postgresqlcreateuser">
- <title>Create <systemitem class="username">evergreen</systemitem>
- PostgreSQL user</title>
- <para>As the <systemitem class="username">postgres</systemitem>
- user on the PostgreSQL system, create a new PostgreSQL user
- named <systemitem class="username">evergreen</systemitem> and
- assign a password (remember to replace <emphasis>NEWPASSWORD</emphasis>
- with an appropriate new password):</para>
- <screen>
- <userinput>
- # as the postgres user:
- createuser -P -s evergreen</userinput>
- <computeroutput>
- Enter password for new role: <userinput>NEWPASSWORD</userinput>
- Enter it again: <userinput>NEWPASSWORD</userinput></computeroutput>
- </screen>
- </step>
- <step>
- <title>Create database schema</title>
- <para>In this step you will create the database schema and configure your
- system with the corresponding database authentication details for the
- <emphasis>evergreen</emphasis> database user that you just created in
- <xref linkend="serversideinstallation-postgresqlcreateuser"/>.</para>
- <para>As the <systemitem class="username">root</systemitem> user, enter
- the following commands and replace <emphasis>HOSTNAME, PORT,
- PASSWORD</emphasis> and <emphasis>DATABASENAME</emphasis> with appropriate
- values:</para>
- <screen>
- <userinput>
- # as the root user:
- cd /home/opensrf/Evergreen-ILS-2.0.9
- perl Open-ILS/src/support-scripts/eg_db_config.pl --update-config \
- --service all --create-schema --create-offline \
- --hostname HOSTNAME --port PORT \
- --user evergreen --password PASSWORD \
- --database DATABASENAME --admin-user ADMIN-USER \
- --admin-pass ADMIN-PASSWORD </userinput>
- </screen>
- <para>On most systems, <emphasis>HOSTNAME</emphasis> will be
- <emphasis role="bold">localhost</emphasis> and
- <emphasis>PORT</emphasis> will be <emphasis role="bold">5432</emphasis>.
- Of course, values for <emphasis>PASSWORD</emphasis> and
- <emphasis>DATABASENAME</emphasis> must match the values you used in
- <xref linkend="serversideinstallation-postgresqlcreateuser"/>.
- The <option>admin-user</option> and <option>admin-pass</option> options will
- specify the Evergreen administrator account's username and password. This was
- changed for security reasons, it was previously admin/open-ils</para>
- <para>As the command executes, you may see warnings similar to:
- <literal>ERROR: schema SOMENAME does not exist</literal> (in fact,
- you may see one warning per schema) but they can be safely ignored.</para>
- <note>If you are entering the above command on a single line, do not
- include the <literal>\</literal> (backslash) characters. If you are using
- the <command>bash</command> shell, these should only be used at the end of
- a line at a <command>bash</command> prompt to indicate that the command is
- continued on the next line.</note>
- </step>
- </substeps>
- </step>
- <step>
- <title>Configure the Apache web server</title>
- <indexterm>
- <primary>web server</primary>
- <secondary>Apache</secondary>
- </indexterm>
- <para>In this step you will configure the Apache web server to support Evergreen
- software.</para>
- <para>First, you must enable some built-in Apache modules and install some
- additional Apache configuration files. Then you will create a new Security
- Certificate. Finally, you must make several changes to the Apache configuration
- file.</para>
- <substeps>
- <step>
- <title>Enable the required Apache Modules</title>
- <para>As the <systemitem class="username">root</systemitem>
- user, enable some modules in the Apache server, then copy the
- new configuration files to the Apache server directories:</para>
- <indexterm>
- <primary>Apache modules</primary>
- </indexterm>
- <screen>
- <userinput>
- # as the root user:
- a2enmod ssl # enable mod_ssl
- a2enmod rewrite # enable mod_rewrite
- a2enmod expires # enable mod_expires</userinput>
- </screen>
- <para>As the commands execute, you may see warnings similar to:
- <literal>Module SOMEMODULE already enabled</literal> but you can
- safely ignore them.</para>
- </step>
- <step>
- <title>Copy Apache configuration files</title>
- <para>You must copy the Apache configuration files from the
- Evergreen installation directory to the Apache directory. As the
- <systemitem class="username">root</systemitem> user, perform the
- following commands:</para>
- <screen>
- <userinput>
- # as the root user:
- cd /home/opensrf/Evergreen-ILS-2.0.9
- cp Open-ILS/examples/apache/eg.conf /etc/apache2/sites-available/
- cp Open-ILS/examples/apache/eg_vhost.conf /etc/apache2/
- cp Open-ILS/examples/apache/startup.pl /etc/apache2/</userinput>
- </screen>
- </step>
- <step xml:id="serversideinstallation-createsslcertificate">
- <title>Create a Security Certificate</title>
- <para>In this step you will create a new Security Certificate (SSL Key)
- for the Apache server using the <command>openssl</command> command. For a
- public production server you must configure or purchase a signed SSL
- certificate, but for now you can just use a self-signed certificate and
- accept the warnings in the Staff Client and browser during testing and
- development. As the <systemitem class="username">root</systemitem> user,
- perform the following commands:</para>
- <screen>
- <userinput>
- # as the root user:
- mkdir /etc/apache2/ssl
- cd /etc/apache2/ssl
- openssl req -new -x509 -days 365 -nodes -out server.crt -keyout server.key</userinput>
- </screen>
- <para>You will be prompted for several items of information; enter
- the appropriate information for each item. The new files
- <filename>server.crt</filename> and <filename>server.key</filename> will
- be created in the directory
- <filename class="directory">/etc/apache2/ssl</filename> .</para>
- <note>This step generates a self-signed SSL certificate. You must install
- a proper SSL certificate for a public production system to avoid warning
- messages when users login to their account through the OPAC or when staff
- login through the Staff Client. For further information on
- installing a proper SSL certificate, see
- <xref linkend="serversideinstallation-ssl"/>.</note>
- </step>
- <step xml:id="serversideinstallation-modify-apache">
- <title>Update Apache configuration files</title>
- <para>You must make several changes to an Apache configuration file.</para>
- <para>As the <systemitem class="username">root</systemitem> user
- edit the file <filename>/etc/apache2/sites-available/eg.conf</filename>
- and make the following changes:</para>
- <itemizedlist>
- <listitem>
- <para>In the section
- <literal><Directory "/openils/var/cgi-bin"></literal>
- replace the line:</para>
- <literal>Allow from 10.0.0.0/8</literal>
- <para>with the line:</para>
- <literal>Allow from all</literal>
- <warning>This change allows access to your configuration
- CGI scripts from any workstation on any network. This is
- only a temporary change to expedite testing and should be
- removed after you have finished and successfully tested
- the Evergreen installation. See
- <xref linkend="serversideinstallation-postinstallation"/>
- for further details on removing this change after the
- Evergreen installation is complete.
- </warning>
- </listitem>
- <listitem>
- <para>Comment out the line:</para>
- <literal>Listen 443</literal>
- <para>since it conflicts with the same declaration in
- the configuration file:</para>
- <para><filename>/etc/apache2/ports.conf</filename>.</para>
- </listitem>
- <listitem>
- <para>The following updates are needed to allow the logs
- to function properly, but it may break other Apache
- applications on your server:</para>
- <para>As the <systemitem class="username">root</systemitem> user, edit the Apache configuration file <filename>/etc/apache2/envvars</filename> and
- change the lines:</para>
- <screen>
- <userinput>
- export APACHE_RUN_USER=www-data
- export APACHE_RUN_GROUP=www-data</userinput>
- </screen>
- <para>to instead read:</para>
- <screen>
- <userinput>
- export APACHE_RUN_USER=opensrf
- export APACHE_RUN_GROUP=opensrf</userinput>
- </screen>
- </listitem>
- <listitem>
- <para>As the
- <systemitem class="username">root</systemitem> user,
- edit the Apache configuration file
- <filename>/etc/apache2/apache2.conf</filename> and
- modify the value for <literal>KeepAliveTimeout</literal>
- and <literal>MaxKeepAliveRequests</literal> to match
- the following:</para>
- <screen>
- <userinput>
- KeepAliveTimeout 1
- MaxKeepAliveRequests 100</userinput>
- </screen>
- </listitem>
- <listitem>
- <para>Further configuration changes to Apache may be
- necessary for busy systems. These changes increase the
- number of Apache server processes that are started to
- support additional browser connections.</para>
- <para>As the
- <systemitem class="username">root</systemitem> user,
- edit the Apache configuration file
- <filename>/etc/apache2/apache2.conf</filename>, locate
- and modify the section related to <emphasis>prefork
- configuration</emphasis> to suit the load on your
- system:</para>
- <programlisting language="xml"><![CDATA[
-<IfModule mpm_prefork_module>
- StartServers 20
- MinSpareServers 5
- MaxSpareServers 15
- MaxClients 150
- MaxRequestsPerChild 10000
-</IfModule>
-]]></programlisting>
- </listitem>
- </itemizedlist>
- </step>
- <step>
- <title>Enable the Evergreen web site</title>
- <para>Finally, you must enable the Evergreen web site. As the
- <systemitem class="username">root</systemitem> user, execute the
- following Apache configuration commands to disable the default
- <emphasis>It Works</emphasis> web page and enable the Evergreen
- web site, and then restart the Apache server:</para>
- <screen>
- <userinput>
- # as the root user:
- # disable/enable web sites
- a2dissite default
- a2ensite eg.conf
- # restart the server
- /etc/init.d/apache2 reload</userinput>
- </screen>
- </step>
- </substeps>
- </step>
- <step xml:id="serversideinstallation-opensrf-config">
- <title>Update the OpenSRF Configuration File</title>
- <para>As the <systemitem class="username">opensrf</systemitem> user, edit the
- OpenSRF configuration file <filename>/openils/conf/opensrf_core.xml</filename>
- to update the Jabber usernames and passwords, and to specify the domain from
- which we will accept and to which we will make connections.</para>
- <para>If you are installing Evergreen on a single server and using the
- <systemitem class="domainname">private.localhost</systemitem> /
- <systemitem class="domainname">public.localhost</systemitem> domains,
- these will already be set to the correct values. Otherwise, search and replace
- to match your customized values.</para>
- <para>The left-hand side of <xref linkend="serversideinstallation-xpath-table-2"/>
- shows common XPath syntax to indicate the approximate position within the XML
- file that needs changes. The right-hand side of the table shows the replacement
- values:</para>
- <table xml:id="serversideinstallation-xpath-table-2">
- <?dbfo keep-together="always" ?>
- <title>Sample XPath syntax for editing 'opensrf_core.xml'</title>
- <tgroup align="left" cols="2" colsep="1" rowsep="1">
- <colspec colname="Xpath" colnum="1" colwidth="1.6*"/>
- <colspec colname="Value" colnum="2" colwidth="2.0*"/>
- <thead>
- <row>
- <entry>XPath location</entry>
- <entry>Value</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>/config/opensrf/username</entry>
- <entry>
- <systemitem class="username">opensrf</systemitem>
- </entry>
- </row>
- <row>
- <entry>/config/opensrf/passwd </entry>
- <entry><systemitem class="domainname">private.localhost</systemitem>
- password for
- <systemitem class="username">opensrf</systemitem> user
- </entry>
- </row>
- <row>
- <entry>/config/gateway/username</entry>
- <entry>
- <systemitem class="username">opensrf</systemitem>
- </entry>
- </row>
- <row>
- <entry>/config/gateway/passwd</entry>
- <entry><systemitem class="domainname">public.localhost</systemitem>
- password for
- <systemitem class="username">opensrf</systemitem> user
- </entry>
- </row>
- <row>
- <entry>/config/routers/router/transport/username,
- first entry where server == public.localhost</entry>
- <entry>
- <systemitem class="username">router</systemitem>
- </entry>
- </row>
- <row>
- <entry>/config/routers/router/transport/password,
- first entry where server == public.localhost</entry>
- <entry><systemitem class="domainname">public.localhost</systemitem>
- password for
- <systemitem class="username">router</systemitem> user
- </entry>
- </row>
- <row>
- <entry>/config/routers/router/transport/username,
- second entry where server == private.localhost</entry>
- <entry>
- <systemitem class="username">router</systemitem>
- </entry>
- </row>
- <row>
- <entry>/config/routers/router/transport/password,
- second entry where server == private.localhost</entry>
- <entry><systemitem class="domainname">private.localhost</systemitem>
- password for
- <systemitem class="username">router</systemitem> user
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </step>
- <step performance="optional">
- <title>(OPTIONAL) Create Configuration Files for Users Needing <command>srfsh</command></title>
- <para>When OpenSRF was installed in <xref linkend="serversideinstallation-opensrf"/>, the
- software installation automatically created a utility named <command>srfsh</command> (surf
- shell). This is a command line diagnostic tool for testing and interacting with
- OpenSRF. It will be used in a future step to complete and test the Evergreen installation.
- Earlier in <xref linkend="serversideinstallation-srfsh"/> you also created a configuration
- file <filename>~/.srfsh.xml</filename> for each user that might need to use the utility.
- See <xref linkend="serversideinstallation-testing"/> for further information.</para>
- </step>
- <step xml:id="serversideinstallation-opensrf-env">
- <title>Modify the OpenSRF Environment</title>
- <para>In this step you will make some minor modifications to the OpenSRF environment:</para>
- <itemizedlist>
- <listitem>
- <para>As the <systemitem class="username">opensrf</systemitem> user,
- modify the shell configuration file <filename>~/.bashrc</filename> for
- user <systemitem class="username">opensrf</systemitem> by adding a Perl
- environmental variable, then execute the shell configuration file to load
- the new variables into your current environment.</para>
- <screen>
- <userinput>
- # as the opensrf user:
- echo "export PERL5LIB=/openils/lib/perl5:\$PERL5LIB" >> ~/.bashrc
- . ~/.bashrc</userinput>
- </screen>
- <note>In a multi-server environment, you must add any
- modifications to <filename>~/.bashrc</filename> to the top of the file
- <emphasis>before</emphasis> the line <literal>[ -z "$PS1" ] &&
- return </literal>. This will allow headless (scripted) logins to load the
- correct environment.</note>
- </listitem>
- </itemizedlist>
- </step>
- <step performance="optional">
- <title>(OPTIONAL) Enable and Disable Language Localizations</title>
- <para>You can load translations such as Armenian (hy-AM), Canadian French
- (fr-CA), and others into the database to complete the translations available in
- the OPAC and Staff Client. For further information, see
- <xref linkend="languagesandlocalization"/>.</para>
- </step>
- </procedure>
- </section>
- <section xml:id="serversideinstallation-fedora">
- <title>Installing Evergreen 2.x On <systemitem class="osname">Fedora 13</systemitem> or
- <systemitem class="osname">Fedora 14</systemitem></title>
- <indexterm>
- <primary>Linux</primary>
- <secondary>Fedora</secondary>
- </indexterm>
- <para>This section outlines the installation process for the latest stable version of
- Evergreen on a <systemitem class="osname">Fedora 14</systemitem> system.
- See <xref linkend="serversideinstallation-ubuntudebian"/> for description of a
- similar installation on <systemitem class="osname">Ubuntu</systemitem> or
- <systemitem class="osname">Debian</systemitem> systems.</para>
- <para>In the following section you will download, unpack, install, configure and test the Evergreen
- system, including the Evergreen server and the PostgreSQL database system. You will make several
- configuration changes and adjustments to the software, including updates to configure the system
- for your own locale, and some updates needed to work around a few known issues.</para>
- <note>
- <para>The following steps have been tested on the x86 (32-bit) and x86_64
- (64-bit) architecture of a <systemitem class="osname">Fedora 14</systemitem>
- image as of 2011-01-27.</para>
- <para>In the following instructions, you are asked to perform certain steps as
- either the <systemitem class="username">root</systemitem> user, the
- <systemitem class="username">opensrf</systemitem> user, or the
- <systemitem class="username">postgres</systemitem> user.</para>
- <itemizedlist>
- <listitem>
- <para><systemitem class="osname">Fedora</systemitem> -- To become the
- <systemitem class="username">root</systemitem> user, issue the command
- <command>su -</command> and enter the password of the
- <systemitem class="username">root</systemitem> user.</para>
- </listitem>
- </itemizedlist>
- <para>To switch from the <systemitem class="username">root</systemitem> user to a
- different user, issue the command <command>su - USERNAME</command>. For example, to
- switch from the <systemitem class="username">root</systemitem> user to the
- <systemitem class="username">opensrf</systemitem> user, issue the command
- <command>su - opensrf</command>. Once you have become a non-root user, to become the
- <systemitem class="username">root</systemitem> user again, simply issue the command
- <command>exit</command>.</para>
- </note>
- <procedure>
- <step xml:id="serversideinstallation-opensrf-2.0">
- <title>Install OpenSRF</title>
- <para>Evergreen software is integrated with and depends on the Open Service
- Request Framework (OpenSRF) software system. For further information on
- installing, configuring and testing OpenSRF, see
- <xref linkend="serversideinstallation-opensrf-2.0.1"/>.</para>
- <para>Follow the steps outlined in that section and run the specified tests to
- ensure that OpenSRF is properly installed and configured. Do
- <emphasis><emphasis role="bold">not</emphasis></emphasis> continue with
- any further Evergreen installation steps until you have verified that OpenSRF
- has been successfully installed and tested.</para>
- </step>
- <step>
- <title>Download and Unpack Latest Evergreen Version</title>
- <para>The latest version of Evergreen can be found here:
- <ulink url="http://evergreen-ils.org/downloads/Evergreen-ILS-2.0.9.tar.gz"></ulink> .
- As the <systemitem class="username">opensrf</systemitem> user, change to
- the directory <filename class="directory">/home/opensrf</filename> then
- download and extract Evergreen. The new subdirectory
- <filename class="directory">/home/opensrf/Evergreen-ILS-2.0.9</filename>
- will be created:</para>
- <screen>
- <userinput>
- # as the opensrf user:
- cd /home/opensrf
- wget http://evergreen-ils.org/downloads/Evergreen-ILS-2.0.9.tar.gz
- tar zxf Evergreen-ILS-2.0.9.tar.gz</userinput>
- </screen>
- </step>
- <step xml:id="serversideinstallation-installprereq-2.0">
- <title>Install Prerequisites to Build Evergreen</title>
- <para>In this section you will install and configure a set of prerequisites that will be
- used later in <xref linkend="serversideinstallation-configure-2.0"/> and
- <xref linkend="serversideinstallation-compile-2.0"/> to build the Evergreen software
- using the <command>make</command> utility.</para>
- <para>As the <systemitem class="username">root</systemitem> user, enter the commands show
- below to build the prerequisites from the software distribution that you just downloaded
- and unpacked. Remember to replace <emphasis>[DISTRIBUTION]</emphasis> in the following
- example with the keyword corresponding to the name of one of the
- <systemitem class="osname">Linux</systemitem> distributions listed in the following
- distribution list. For example, to install the prerequisites for
- <systemitem class="osname">Fedora 13</systemitem> or
- <systemitem class="osname">Fedora 14</systemitem>, you would enter the command:
- <command>make -f Open-ILS/src/extras/Makefile.install fedora13</command>.</para>
- <screen>
- <userinput>
- # as the root user:
- cd /home/opensrf/Evergreen-ILS-2.0.9
- make -f Open-ILS/src/extras/Makefile.install [DISTRIBUTION]</userinput>
- </screen>
- </step>
- <step performance="optional">
- <title>(OPTIONAL) Install the PostgreSQL Server</title>
- <indexterm>
- <primary>databases</primary>
- <secondary>PostgreSQL</secondary>
- </indexterm>
- <para>Since the PostgreSQL server is usually a standalone server in multi-server
- production systems, the prerequisite installer Makefile in the previous section
- (see <xref linkend="serversideinstallation-installprereq-2.0"/>)
- does not automatically install PostgreSQL. You must install the PostgreSQL server
- yourself, either on the same system as Evergreen itself or on another system.
- If your PostgreSQL server is on a different system, just skip this step.
- If your PostgreSQL server will be on the same system as your Evergreen
- software, you can install the required PostgreSQL server packages as described
- in <xref linkend="InstallingPostgreSQL"/>, or you can visit the official
- web site <link xl:href="http://www.postgresql.org/">http://www.postgresql.org</link>
- for more information.</para>
- <note>
- <para>PostgreSQL version 8.4 is the minimum supported version to work
- with Evergreen 2.0. If you have an older version of PostgreSQL,
- you should upgrade before installing Evergreen. To find your current version
- of PostgreSQL, as the <systemitem class="username">postgres</systemitem>
- user execute the command <command>psql</command>, then type
- <userinput>SELECT version();</userinput> to get detailed information
- about your version of PostgreSQL.</para>
- </note>
- </step>
- <step performance="optional">
- <title>Install Perl Modules on PostgreSQL Server</title>
- <para>If PostgreSQL is running on the same system as your Evergreen software,
- then the Perl modules will automatically be available. Just skip this step.
- Otherwise, continue if your PostgreSQL server is running on another system,
- and install several Perl modules there. As the
- <systemitem class="username">root</systemitem> user, ensure the gcc compiler
- is installed, then install the following Perl modules:</para>
- <screen>
- <userinput>
- yum install gcc
- perl -MCPAN -e shell
- <prompt>cpan></prompt> install JSON::XS
- <prompt>cpan></prompt> install MARC::Record
- <prompt>cpan></prompt> install MARC::File::XML</userinput>
- </screen>
- <para>For more information on installing Perl Modules vist the official
- <link xl:href="http://www.cpan.org/">CPAN</link> site.</para>
- <indexterm>
- <primary>Perl</primary>
- <secondary>CPAN</secondary>
- </indexterm>
- </step>
- <step xml:id="serversideinstallation-configure-2.0">
- <title>Configure Evergreen</title>
- <para>In this step you will use the <command>configure</command> and
- <command>make</command> utilities to configure Evergreen so it can be compiled
- and linked later in <xref linkend="serversideinstallation-compile-2.0"/>.</para>
- <para>As the <systemitem class="username">opensrf</systemitem> user, return to
- the Evergreen build directory and execute these commands:</para>
- <screen>
- <userinput>
- # as the opensrf user:
- cd /home/opensrf/Evergreen-ILS-2.0.9
- ./configure --prefix=/openils --sysconfdir=/openils/conf
- make</userinput>
- </screen>
- </step>
- <step xml:id="serversideinstallation-compile-2.0">
- <title>Compile, Link and Install Evergreen</title>
- <para>In this step you will actually compile, link and install Evergreen and the
- default Evergreen Staff Client.</para>
- <para>As the <systemitem class="username">root</systemitem> user, return to the
- Evergreen build directory and use the <command>make</command> utility as shown
- below:</para>
- <screen>
- <userinput>
- # as the root user:
- cd /home/opensrf/Evergreen-ILS-2.0.9
- make STAFF_CLIENT_BUILD_ID=rel_2_0_9 install</userinput>
- </screen>
- <para>The Staff Client will also be automatically built, but you must remember
- to set the variable <envar>STAFF_CLIENT_BUILD_ID</envar> to match the version of the
- Staff Client you will use to connect to the Evergreen server.</para>
- <para>The above commands will create a new subdirectory
- <filename class="directory">/openils/var/web/xul/rel_2_0_9</filename>
- containing the Staff Client.</para>
- <para>To complete the Staff Client installation, as the
- <systemitem class="username">root</systemitem> user execute the following commands
- to create a symbolic link named <emphasis>server</emphasis> in the head of the
- Staff Client directory <filename class="directory">/openils/var/web/xul</filename>
- that points to the subdirectory <filename class="directory">/server</filename>
- of the new Staff Client build:</para>
- <screen>
- <userinput>
- # as the root user:
- cd /openils/var/web/xul
- ln -sf rel_2_0_9/server server</userinput>
- </screen>
- </step>
- <step>
- <title>Copy the OpenSRF Configuration Files</title>
- <para>In this step you will replace some OpenSRF configuration files that you set up
- earlier in <xref linkend="serversideinstallation-opensrf-2.0"/> when you installed
- and tested OpenSRF.</para>
- <para>You must copy several example OpenSRF configuration files into place after first
- creating backup copies for troubleshooting purposes, then change all the file ownerships
- to <systemitem class="username">opensrf</systemitem>.
- As the <systemitem class="username">root</systemitem> user, execute the following
- commands:</para>
- <screen>
- <userinput>
- # as the root user:
- cd /openils/conf
- cp opensrf.xml opensrf.xml.BAK
- cp opensrf_core.xml opensrf_core.xml.BAK
- cp opensrf.xml.example opensrf.xml
- cp opensrf_core.xml.example opensrf_core.xml
- cp oils_web.xml.example oils_web.xml
- chown -R opensrf:opensrf /openils/</userinput>
- </screen>
- </step>
- <step>
- <title>Create and Configure PostgreSQL Database</title>
- <indexterm>
- <primary>databases</primary>
- <secondary>PostgreSQL</secondary>
- </indexterm>
- <para>In this step you will create the Evergreen database. In the
- commands below, remember to adjust the path of the
- <emphasis role="bold">contrib</emphasis> repository to match your
- PostgreSQL server layout. For example, if you built PostgreSQL from
- source the path would be
- <filename class="directory">/usr/local/share/contrib</filename>
- , and if you installed the PostgreSQL 8.4 server packages on
- <systemitem class="osname">Ubuntu</systemitem>, the path would be
- <systemitem class="directory">/usr/share/postgresql/8.4/contrib/</systemitem> .</para>
- <substeps>
- <step>
- <title>Start the PostgreSQL service</title>
- <para>As the <systemitem class="username">root</systemitem>
- user on the PostgreSQL system, initialize the PostgreSQL cluster
- and start the PostgreSQL service:</para>
- <screen>
- <userinput>
- # as the root user:
- service initdb postgresql
- /etc/init.d/postgresql start</userinput>
- </screen>
- </step>
- <step>
- <title>Create and configure the database</title>
- <para>As the <systemitem class="username">postgres</systemitem>
- user on the PostgreSQL system create the PostgreSQL database,
- then set some internal paths:</para>
- <screen>
- <userinput>
- # as the postgres user:
- createdb evergreen -E UTF8 -T template0
- createlang plperl evergreen
- createlang plperlu evergreen
- createlang plpgsql evergreen</userinput>
- </screen>
- <para>Continue as the <systemitem class="username">postgres</systemitem>
- user and execute the SQL scripts as shown below (remember to adjust the
- paths as needed, where <emphasis>PGSQL_VERSION</emphasis> is
- your installed PostgreSQL version, for example
- <literal>"8.4"</literal>).</para>
- <screen>
- <userinput>
- # as the postgres user:
- psql -f /usr/share/postgresql/PGSQL_VERSION/contrib/tablefunc.sql evergreen
- psql -f /usr/share/postgresql/PGSQL_VERSION/contrib/tsearch2.sql evergreen
- psql -f /usr/share/postgresql/PGSQL_VERSION/contrib/pgxml.sql evergreen</userinput>
- </screen>
- </step>
- <step xml:id="serversideinstallation-postgresqlcreateuser-2.0">
- <title>Create <systemitem class="username">evergreen</systemitem>
- PostgreSQL user</title>
- <para>As the <systemitem class="username">postgres</systemitem>
- user on the PostgreSQL system, create a new PostgreSQL user
- named <systemitem class="username">evergreen</systemitem> and
- assign a password (remember to replace <emphasis>NEWPASSWORD</emphasis>
- with an appropriate new password):</para>
- <screen>
- <userinput>
- # as the postgres user:
- createuser -P -s evergreen</userinput>
- <computeroutput>
- Enter password for new role: <userinput>NEWPASSWORD</userinput>
- Enter it again: <userinput>NEWPASSWORD</userinput></computeroutput>
- </screen>
- </step>
- <step>
- <title>Enable IPv4 and IPv6 connections</title>
- <para>As the root user, enable IPv4 and IPv6 connections to the
- PostgreSQL server. For a single-server instance, enable
- password-protected connections from the Evergreen user to the
- Evergreen database on localhost by adding the following lines to
- <filename>/var/lib/pgsql/data/pg_hba.conf</filename>:</para>
- <screen>
- <userinput>
- # as the root user:
-
- # IPv4 local connections:
- host evergreen evergreen 127.0.0.1/32 md5
- # IPv6 local connections:
- host evergreen evergreen ::1/128 md5</userinput>
- </screen>
- <para>Then, as the root user, restart the PostgreSQL server to
- make that configuration take effect:</para>
- <screen>
- <userinput>
- # as the root user:
- /etc/init.d/postgresql restart</userinput>
- </screen>
- </step>
- <step>
- <title>Create database schema</title>
- <para>In this step you will create the database schema and configure your
- system with the corresponding database authentication details for the
- <emphasis>evergreen</emphasis> database user that you just created in
- <xref linkend="serversideinstallation-postgresqlcreateuser-2.0"/>.</para>
- <para>As the <systemitem class="username">root</systemitem> user, enter
- the following commands and replace <emphasis>HOSTNAME, PORT,
- PASSWORD</emphasis> and <emphasis>DATABASENAME</emphasis> with appropriate
- values:</para>
- <screen>
- <userinput>
- # as the root user:
- cd /home/opensrf/Evergreen-ILS-2.0.9
- perl Open-ILS/src/support-scripts/eg_db_config.pl --update-config \
- --service all --create-schema --create-offline \
- --hostname HOSTNAME --port PORT \
- --user evergreen --password PASSWORD \
- --database DATABASENAME --admin-user ADMIN-USER \
- --admin-pass ADMIN-PASSWORD </userinput>
- </screen>
- <para>On most systems, <emphasis>HOSTNAME</emphasis> will be
- <emphasis role="bold">localhost</emphasis> and
- <emphasis>PORT</emphasis> will be <emphasis role="bold">5432</emphasis>.
- Of course, values for <emphasis>PASSWORD</emphasis> and
- <emphasis>DATABASENAME</emphasis> must match the values you used in
- <xref linkend="serversideinstallation-postgresqlcreateuser-2.0"/>.
- The <option>admin-user</option> and <option>admin-pass</option> options will
- specify the Evergreen administrator account's username and password. This was
- changed for security reasons, it was previously admin/open-ils</para>
- <para>As the command executes, you may see warnings similar to:
- <literal>ERROR: schema SOMENAME does not exist</literal> (in fact,
- you may see one warning per schema) but they can be safely ignored.</para>
- <note>If you are entering the above command on a single line, do not
- include the <literal>\</literal> (backslash) characters. If you are using
- the <command>bash</command> shell, these should only be used at the end of
- a line at a <command>bash</command> prompt to indicate that the command is
- continued on the next line.</note>
- </step>
- </substeps>
- </step>
- <step>
- <title>Configure the Apache web server</title>
- <indexterm>
- <primary>web server</primary>
- <secondary>Apache</secondary>
- </indexterm>
- <para>In this step you will configure the Apache web server to support Evergreen
- software.</para>
- <para>First, you must install some additional Apache configuration files. Then you will
- create a new Security Certificate. Finally, you must make several changes to Apache
- configuration files.</para>
- <substeps>
- <step>
- <title>Copy Apache configuration files</title>
- <para>You must copy the Apache configuration files from the
- Evergreen installation directory to the Apache directory. As the
- <systemitem class="username">root</systemitem> user, perform the
- following commands:</para>
- <screen>
- <userinput>
- # as the root user:
- cd /home/opensrf/Evergreen-ILS-2.0.9
- cp Open-ILS/examples/apache/eg.conf /etc/httpd/conf.d/
- cp Open-ILS/examples/apache/eg_vhost.conf /etc/httpd/
- cp Open-ILS/examples/apache/startup.pl /etc/httpd/</userinput>
- </screen>
- </step>
- <step xml:id="serversideinstallation-createsslcertificate-2.0">
- <title>Create a Security Certificate</title>
- <para>In this step you will create a new Security Certificate (SSL Key)
- for the Apache server using the <command>openssl</command> command. For a
- public production server you must configure or purchase a signed SSL
- certificate, but for now you can just use a self-signed certificate and
- accept the warnings in the Staff Client and browser during testing and
- development. As the <systemitem class="username">root</systemitem> user,
- perform the following commands:</para>
- <screen>
- <userinput>
- # as the root user:
- mkdir /etc/httpd/ssl
- cd /etc/httpd/ssl
- openssl req -new -x509 -days 365 -nodes -out server.crt -keyout server.key</userinput>
- </screen>
- <para>You will be prompted for several items of information; enter
- the appropriate information for each item. The new files
- <filename>server.crt</filename> and <filename>server.key</filename> will
- be created in the directory
- <filename class="directory">/etc/httpd/ssl</filename> .</para>
- <note>This step generates a self-signed SSL certificate. You must install
- a proper SSL certificate for a public production system to avoid warning
- messages when users login to their account through the OPAC or when staff
- login through the Staff Client. For further information on
- installing a proper SSL certificate, see
- <xref linkend="serversideinstallation-ssl"/>.</note>
- </step>
- <step xml:id="serversideinstallation-modify-apache-2.0">
- <title>Update Apache configuration files</title>
- <para>You must make several changes to two Apache configuration files.</para>
- <para>As the <systemitem class="username">root</systemitem>
- user, edit the file <filename>/etc/httpd/conf.d/eg.conf</filename>
- and make the following changes:</para>
- <itemizedlist>
- <listitem>
- <para>Change all instances of <literal>apache2</literal>
- to <literal>httpd</literal> .</para>
- </listitem>
- <listitem>
- <para>In the section
- <literal><Directory "/openils/var/cgi-bin"></literal>
- replace the line:</para>
- <literal>Allow from 10.0.0.0/8</literal>
- <para>with the line:</para>
- <literal>Allow from all</literal>
- <warning>This change allows access to your configuration
- CGI scripts from any workstation on any network. This is
- only a temporary change to expedite testing and should be
- removed after you have finished and successfully tested
- the Evergreen installation. See
- <xref linkend="serversideinstallation-postinstallation"/>
- for further details on removing this change after the
- Evergreen installation is complete.
- </warning>
- </listitem>
- <listitem>
- <para>Comment out the line:</para>
- <literal>Listen 443</literal>
- <para>since it conflicts with the same declaration in
- the configuration file:</para>
- <para><filename>/etc/httpd/conf.d/ssl.conf</filename>.</para>
- </listitem>
- </itemizedlist>
- <para>
- As the <systemitem class="username">root</systemitem> user, edit the
- Apache configuration file <filename>/etc/httpd/conf.d/httpd.conf</filename>
- and make the following changes:</para>
- <itemizedlist>
- <listitem>
- Change <literal>User apache</literal> to
- <literal>User opensrf</literal></listitem>
- <listitem>
- Change <literal>KeepAlive</literal> to
- <literal>On</literal></listitem>
- <listitem>
- Change <literal>KeepAliveTimeout</literal> to
- <literal>1</literal></listitem>
- </itemizedlist>
- </step>
- </substeps>
- </step>
- <step>
- <title>Update the System Dynamic Library Path</title>
- <para>You must update the system dynamic library path to force your
- system to recognize the library <literal>dbdpgsql.so</literal>. As the
- <systemitem class="username">root</systemitem> user, do this by creating
- the new file <filename>/etc/ld.so.conf.d/eg.conf</filename> containing two
- new library paths, then run the command <command>ldconfig</command> to
- automatically read the file and modify the system dynamic library
- path:</para>
- <screen>
- <userinput>
- # as the root user:
- echo "/usr/lib/dbd" > /etc/ld.so.conf.d/eg.conf
- echo "/usr/lib64/dbd/" >> /etc/ld.so.conf.d/eg.conf
- ldconfig</userinput>
- </screen>
- </step>
- <step xml:id="serversideinstallation-opensrf-config-2.0">
- <title>Update the OpenSRF Configuration File</title>
- <para>As the <systemitem class="username">opensrf</systemitem> user, edit the
- OpenSRF configuration file <filename>/openils/conf/opensrf_core.xml</filename>
- and update the Jabber usernames and passwords, and specify the domain from
- which we will accept and to which we will make connections.</para>
- <para>If you are installing Evergreen on a single server and using the
- <systemitem class="domainname">private.localhost</systemitem> /
- <systemitem class="domainname">public.localhost</systemitem> domains,
- these will already be set to the correct values. Otherwise, search and replace
- to match your customized values.</para>
- <para>See the table <xref linkend="serversideinstallation-xpath-table-2"/>
- for examples of the XPath syntax you will find in this XML file. The syntax
- indicates the approximate position within the file that needs changes.</para>
- </step>
- <step xml:id="serversideinstallation-opensrf-env-2.0">
- <title>Modify the OpenSRF Environment</title>
- <para>In this step you will make some minor modifications to the OpenSRF environment:</para>
- <itemizedlist>
- <listitem>
- <para>As the <systemitem class="username">opensrf</systemitem> user,
- modify the shell configuration file <filename>~/.bashrc</filename> for
- user <systemitem class="username">opensrf</systemitem> by adding a Perl
- environmental variable, then execute the shell configuration file to load
- the new variables into your current environment:</para>
- <screen>
- <userinput>
- # as the opensrf user:
- echo "export PERL5LIB=/openils/lib/perl5:\$PERL5LIB" >> ~/.bashrc
- . ~/.bashrc</userinput>
- </screen>
- <note>In a multi-server environment, you must add any
- modifications to <filename>~/.bashrc</filename> to the top of the file
- <emphasis>before</emphasis> the line <literal>[ -z "$PS1" ] &&
- return </literal>. This will allow headless (scripted) logins to load the
- correct environment.</note>
- </listitem>
- </itemizedlist>
- </step>
- <step>
- <title>Configuring Fedora Security</title>
- <para><systemitem class="osname">Fedora</systemitem> is a very secure
- system out of the box, including a very restrictive firewall and an
- automatically enabled set of SELinux system policies to prevent
- unauthorized access to system resources. Unfortunately, these secure
- system policies can interfere with the normal operation of
- applications like Evergreen.</para>
- <para>Until a person with the required SELinux skills can offer a
- nuanced set of policies appropriate for Evergreen, the simplest way to
- test and develop against a <systemitem class="osname">Fedora</systemitem>
- server is to completely disable the firewall and SELinux policies.</para>
- <substeps>
- <step>
- <title>Disabling the Fedora firewall</title>
- <para>To disable the <systemitem class="osname">Fedora</systemitem>
- firewall until your next reboot, issue the
- following command as the root user:</para>
- <screen>
- <userinput>
- # as the root user:
- /etc/init.d/iptables stop</userinput>
- </screen>
- <para>To disable the <systemitem class="osname">Fedora</systemitem>
- firewall permanently, issue the following
- command as the root user:</para>
- <screen>
- <userinput>
- # as the root user:
- chkconfig iptables off</userinput>
- </screen>
- <para>This change will take effect when you reboot your system.</para>
- </step>
- <step>
- <title>Disabling the SELinux policies</title>
- <para>To disable the SELinux policies until your next reboot, issue
- the following command as the root user:</para>
- <screen>
- <userinput>
- # as the root user:
- /usr/sbin/setenforce 0</userinput>
- </screen>
- <para>To disable the SELinux policies permanently, as the root user
- edit the file <filename>/etc/sysconfig/selinux</filename> and make the
- following change:</para>
- <screen>
- <userinput>
- # as the root user:
- SELINUX=permissive</userinput>
- </screen>
- <para>This change will take effect when you reboot your system.</para>
- </step>
- </substeps>
- </step>
- </procedure>
- </section>
- <section xml:id="serversideinstallation-starting">
- <title>Starting Evergreen</title>
- <para>In this section you will learn how to start the Evergreen services.
- For completeness, instructions for stopping Evergreen can be found later in
- <xref linkend="serversideinstallation-stopping"/>.</para>
- <procedure>
- <step>
- <para>As the <systemitem class="username">root</systemitem> user,
- start the <systemitem class="service">ejabberd</systemitem>,
- <systemitem class="service">memcached</systemitem>, and
- <systemitem class="service">PostgreSQL</systemitem> services
- (if they aren't already running) as follows:</para>
- <screen>
- <userinput>
- # as the root user:
- /etc/init.d/ejabberd start
- /etc/init.d/memcached start
- /etc/init.d/postgresql start</userinput>
- </screen>
- </step>
- <step>
- <para>If you want to have these services run automatically every time
- you boot your server, issue the following commands as the root
- user:</para>
- <screen>
- <userinput>
- # as the root user:
- chkconfig --levels 2345 ejabberd on
- chkconfig --levels 2345 memcached on
- chkconfig --levels 2345 postgresql on</userinput>
- </screen>
- </step>
- <step>
- <para>As the <systemitem class="username">opensrf</systemitem> user,
- start the OpenSRF <systemitem class="service">router</systemitem> ,
- <systemitem class="service">Perl</systemitem>, and <systemitem class="service">C</systemitem> services. The <option>-l</option> flag in
- the following command is only necessary if you want to force Evergreen to
- treat the hostname as <literal>'localhost'</literal>. You should not
- use the '-l' flag if you configured <filename>opensrf.xml</filename>
- using the real hostname of your machine as returned by: <literal>perl
- -ENet::Domain 'print Net::Domain::hostfqdn() . “\n”;'</literal> .
- As the opensrf user, execute this command:</para>
- <screen>
- <userinput>
- # as the opensrf user:
- osrf_ctl.sh -l -a start_all</userinput>
- </screen>
- <itemizedlist>
- <listitem>
- <para>If you receive an error message similar to
- <emphasis>osrf_ctl.sh: command not found</emphasis>, then your
- environment variable <envar>PATH</envar> does not include the
- directory <filename class="directory">/openils/bin</filename>.
- As the <systemitem class="username">opensrf</systemitem> user,
- edit the configuration file <filename>~/.bashrc</filename> and
- add the following line:
- <literal>export PATH=$PATH:/openils/bin</literal></para>
- </listitem>
- <listitem>
- <para>If you receive an error message similar to <emphasis>Can't
- locate OpenSRF/System.pm in @INC ... BEGIN failed--compilation
- aborted</emphasis>, then your environment variable
- <emphasis role="bold">PERL5LIB</emphasis> does not include the
- directory <filename class="directory">/openils/lib/perl5</filename>.
- This should have been set by <filename>~/.bashrc</filename> when you
- logged in as the <systemitem class="username">opensrf</systemitem>
- user, but you can manually set it using the following command:
- <literal>export PERL5LIB=$PERL5LIB:/openils/lib/perl5</literal></para>
- </listitem>
- </itemizedlist>
- </step>
- <step>
- <para>In this step you will generate the Web files needed by the Staff Client
- and catalog, as well as update the proximity of locations in the Organizational
- Unit tree (which allows <emphasis>Holds</emphasis> to work properly).</para>
- <para>You must do this the first time you start Evergreen and after making any
- changes to the library hierarchy.</para>
- <para>As the <systemitem class="username">opensrf</systemitem> user, execute the
- following command and review the results as shown in this example:</para>
- <screen>
- <userinput>
- # as the opensrf user:
- cd /openils/bin
- ./autogen.sh -c /openils/conf/opensrf_core.xml -u</userinput>
- <computeroutput>
- Updating Evergreen organization tree and IDL using '/openils/conf/opensrf_core.xml'
- Updating fieldmapper
- Updating web_fieldmapper
- Updating OrgTree
- removing OrgTree from the cache for locale hy-AM...
- removing OrgTree from the cache for locale cs-CZ...
- removing OrgTree from the cache for locale en-CA...
- removing OrgTree from the cache for locale en-US...
- removing OrgTree from the cache for locale fr-CA...
- removing OrgTree from the cache for locale ru-RU...
- Updating OrgTree HTML
- Updating locales selection HTML
- Updating Search Groups
- Refreshing proximity of org units
- Successfully updated the organization proximity
- Done</computeroutput>
- </screen>
- </step>
- <step>
- <para>As the <systemitem class="username">root</systemitem> user, restart the
- Apache Web server:</para>
- <screen>
- <userinput>
- # as the root user:
- /etc/init.d/httpd restart</userinput>
- </screen>
- <note>If the Apache Web server was running when you started the OpenSRF
- services, you might not be able to successfully log into the OPAC or Staff
- Client until the Apache Web server has been restarted.</note>
- </step>
- </procedure>
- </section>
- <section xml:id="serversideinstallation-testing">
- <title>Testing Your Evergreen Installation</title>
- <para>This section describes several simple tests you can perform to verify that the Evergreen
- server-side software has been installed and configured properly and is running as
- expected.</para>
- <simplesect xml:id="serversideinstallation-testing-connections">
- <title>Testing Connections to Evergreen</title>
- <para>Once you have installed and started Evergreen, test your connection to Evergreen. Start the
- <command>srfsh</command> application and try logging onto the Evergreen server using the default
- administrator username and password. Following is sample output generated by executing
- <command>srfsh</command> after a successful Evergreen installation. For help with
- <command>srfsh</command> commands, type <userinput>help</userinput> at the prompt.
- As the <systemitem class="username">opensrf</systemitem> user,
- execute the following command and review the results as shown in this example to test
- your Evergreen connection:</para>
- <screen>
- <userinput>
- # as the opensrf user:
- /openils/bin/srfsh</userinput>
- <computeroutput>
- srfsh% <userinput>login admin open-ils</userinput>
- Received Data: "250bf1518c7527a03249858687714376"
- ------------------------------------
- Request Completed Successfully
- Request Time in seconds: 0.045286
- ------------------------------------
- Received Data: {
- "ilsevent":0,
- "textcode":"SUCCESS",
- "desc":" ",
- "pid":21616,
- "stacktrace":"oils_auth.c:304",
- "payload":{
- "authtoken":"e5f9827cc0f93b503a1cc66bee6bdd1a",
- "authtime":420
- }
- }
- ------------------------------------
- Request Completed Successfully
- Request Time in seconds: 1.336568
- ------------------------------------</computeroutput>
- </screen>
- <para>If this does not work, try the following:</para>
- <itemizedlist>
- <listitem>
- <para>As the <systemitem class="username">opensrf</systemitem> user, run the
- utility <filename>settings-tester.pl</filename> to review your Evergreen
- installation for any system configuration problems:</para>
- <screen>
- <userinput>
- # as the opensrf user:
- cd /home/opensrf
- ./Evergreen-ILS-2.0.9/Open-ILS/src/support-scripts/settings-tester.pl</userinput>
- </screen>
- <para>If the output of <command>settings-tester.pl</command> does not help
- you find the problem, please do not make any significant changes to your
- configuration.</para>
- </listitem>
- <listitem>
- <para>Follow the steps in the troubleshooting guide in
- <xref linkend="troubleshooting"/>.</para>
- </listitem>
- <listitem>
- <para>If you have followed the entire set of installation steps listed here
- closely, you are probably extremely close to a working system. Gather your
- configuration files and log files and contact the
- <ulink url="http://open-ils.org/listserv.php">Evergreen Development Mailing List</ulink>
- for assistance before making any drastic changes to your system
- configuration.</para>
- </listitem>
- </itemizedlist>
- </simplesect>
- <simplesect xml:id="serversideinstallation-running-staffclient">
- <title>Testing the Staff Client on Linux</title>
- <para>In this section you will confirm that a basic login on the Staff Client works
- properly.</para>
- <para>Run the Evergreen Staff Client on your <systemitem class="osname">Fedora</systemitem>
- system by using the application
- <emphasis>XULRunner</emphasis> (installed automatically and by default with Firefox
- version 3.0 and later on Ubuntu and Debian distributions).</para>
- <para>As the <systemitem class="username">root</systemitem> user, start the Staff Client
- as shown:</para>
- <screen>
- <userinput>
- # as the root user:
- xulrunner /home/opensrf/Evergreen-ILS-2.0.9/Open-ILS/xul/staff_client/build/application.ini</userinput>
- </screen>
- <para>A login screen for the Staff Client similar to this should appear:</para>
- <mediaobject>
- <alt>Logging into the Staff Client</alt>
- <imageobject>
- <imagedata fileref="../media/serversideinstallation-staffclient-running-1.png" format="PNG" scalefit="1" width="70%"/>
- </imageobject>
- </mediaobject>
- <para>First, add the name of your Evergreen server to the field
- <literal>Hostname</literal> in the <literal>Server</literal> section. You will
- probably want to use <literal>127.0.0.1</literal>. After adding the server
- name, click <guibutton>Re-Test Server</guibutton>. You should now see the
- messages <literal>200:OK</literal> in the fields <literal>Status</literal> and
- <literal>Version</literal>.</para>
- <para>Because this is the initial run of the Staff Client, you will see a warning in the
- upper-right saying: <emphasis role="bold">Not yet configured for the specified
- server</emphasis>. To continue, you must assign a workstation name.</para>
- <para>Try to log into the Staff Client with the admin username and password you created
- during installation. If the login is successful, you will see the following
- screen:</para>
- <mediaobject>
- <alt>Logging into the Staff Client</alt>
- <imageobject>
- <imagedata fileref="../media/serversideinstallation-staffclient-running-4.png" format="PNG" scalefit="1" width="70%"/>
- </imageobject>
- </mediaobject>
- <para>Otherwise, you may need to click <guibutton>'Add SSL Exception'</guibutton> in the
- main window. You should see a popup window titled <literal>Add Security Exception</literal>:</para>
- <mediaobject>
- <alt>Adding an SSL Exception in the Staff Client</alt>
- <imageobject>
- <imagedata fileref="../media/serversideinstallation-staffclient-running-2.png" format="PNG" scalefit="1" width="70%"/>
- </imageobject>
- </mediaobject>
- <para>Click <guibutton>'Get Certificate'</guibutton>, then click <guibutton>'Confirm
- Security Exception'</guibutton>, then click <guibutton>'Re-Test Server'</guibutton> in the
- main window and try to log in again.</para>
- </simplesect>
- <simplesect xml:id="serversideinstallation-starting-apache-server">
- <title>Testing the Apache Web Server</title>
- <para>In this section you will test the Apache configuration file(s), then restart the
- Apache web server.</para>
- <para>As the <emphasis role="bold">root</emphasis> user, execute the following
- commands. The use of <emphasis>restart</emphasis> will force the new Evergreen
- modules to be reloaded even if the Apache server is already running.
- Any problems found with your configuration files should be displayed:</para>
- <screen>
- <userinput>
- # as the root user:
- /etc/init.d/httpd configtest && /etc/init.d/httpd restart</userinput>
- </screen>
- </simplesect>
- <simplesect xml:id="serversideinstallation-stopping">
- <title>Stopping Evergreen</title>
- <para>In <xref linkend="serversideinstallation-starting"/> you learned how to start the
- Evergreen services. For completeness, following are instructions for stopping the
- Evergreen services.</para>
- <para>As the <systemitem class="username">opensrf</systemitem> user, stop all Evergreen
- services by using the following command:</para>
- <screen>
- <userinput>
- # as the opensrf user
- # stop the server; use "-l" to force hostname to be "localhost"
- osrf_ctl.sh -l -a stop_all</userinput>
- </screen>
- <note>You can also stop Evergreen services <emphasis role="bold">without</emphasis> the
- <option>-l</option> flag, but the <command>osrf_ctl.sh</command> utility must know the
- fully qualified domain name for the system on which it will execute. That hostname may
- have been specified in the configuration file <filename>opensrf.xml</filename>, which
- you configured in a previous step.</note>
- </simplesect>
- </section>
- <section xml:id="serversideinstallation-postinstallation">
- <title>Post-Installation Chores</title>
- <para>There are several additional steps you may need to complete after Evergreen has been
- successfully installed and tested. Some steps may not be needed (e.g., setting up support for
- Reports).</para>
- <section>
- <title>Remove temporary Apache configuration changes</title>
- <para>You modified the Apache configuration file
- <filename>/etc/apache2/sites-available/eg.conf</filename> in an earlier step as a
- temporary measure to expedite testing (see
- <xref linkend="serversideinstallation-modify-apache"/> for further information).
- Those changes must now be reversed in order to deny unwanted access to your
- CGI scripts from users on other public networks.</para>
- <warning>
- <para>
- <emphasis>This temporary network update was done to expedite
- testing. You <emphasis role="bold">must</emphasis> correct
- this for a public production system.</emphasis>
- </para>
- </warning>
- <para>As the <systemitem class="username">root</systemitem> user, edit the configuration
- file again and comment out the line <literal>Allow from all</literal> and uncomment the
- line <literal>Allow from 10.0.0.0/8</literal>, then change it to match your network
- address scheme.</para>
- </section>
- <section xml:id="serversideinstallation-ssl">
- <title>Configure a permanent SSL key</title>
- <para>You used the command <command>openssl</command> in an earlier step to
- temporarily create a new SSL key for the Apache server (see
- <xref linkend="serversideinstallation-createsslcertificate-2.0"/> for further
- information). This self-signed security certificate was adequate during
- testing and development, but will continue to generate warnings in the Staff
- Client and browser. For a public production server you should configure or
- purchase a signed SSL certificate.</para>
- <para>There are several open source software solutions that provide schemes to
- generate and maintain public key security certificates for your library
- system. Some popular projects are listed below; please review them for
- background information on why you need such a system and how you can provide
- it:</para>
- <itemizedlist>
- <listitem>
- <ulink url="http://www.openca.org/projects/openca/">http://www.openca.org/projects/openca/</ulink>
- </listitem>
- <listitem>
- <ulink url="http://sourceforge.net/projects/ejbca/">http://sourceforge.net/projects/ejbca/</ulink>
- </listitem>
- <listitem>
- <ulink url="http://pki.fedoraproject.org">http://pki.fedoraproject.org</ulink>
- </listitem>
- </itemizedlist>
- <warning>
- <para>
- <emphasis>The temporary SSL key was only created to expedite
- testing. You should install a proper SSL certificate for a public
- production system.</emphasis>
- </para>
- </warning>
- </section>
- <section>
- <title>(OPTIONAL) IP-Redirection</title>
- <para>By default, Evergreen is configured so searching the OPAC always starts in the
- top-level (regional) library rather than in a second-level (branch) library. Instead,
- you can use "IP-Redirection" to change the default OPAC search location to use the IP
- address range assigned to the second-level library where the seach originates. You must
- configure these IP ranges by creating the configuration file
- <filename>/openils/conf/lib_ips.txt</filename> and modifying the Apache startup script
- <filename>/etc/apache2/startup.pl</filename>.</para>
- <para>First, copy the sample file
- <filename>/home/opensrf/Evergreen-ILS-2.0.0/Open-ILS/examples/lib_ips.txt.example</filename>
- to <filename>/openils/conf/lib_ips.txt</filename>. The example file contains the single
- line: <literal>"MY-LIB 127.0.0.1 127.0.0.254"</literal>. You must modify the file to use
- the IP address ranges for your library system. Add new lines to represent the IP address
- range for each branch library. Replace the values for <literal>MY-LIB</literal> with the
- values for each branch library found in the table
- <literal>actor.org_unit</literal>.</para>
- <para>Finally, modify the Apache startup script
- <filename>/etc/apache2/startup.pl</filename> by uncommenting two lines as shown, then
- restarting the Apache server:</para>
- <programlisting language="xml"><![CDATA[
-# - Uncomment the following 2 lines to make use of the IP redirection code
-# - The IP file should contain a map with the following format:
-# - actor.org_unit.shortname <start_ip> <end_ip>
-# - e.g. LIB123 10.0.0.1 10.0.0.254
-use OpenILS::WWW::Redirect qw(/openils/conf/opensrf_core.xml);
-OpenILS::WWW::Redirect->parse_ips_file('/openils/conf/lib_ips.txt');
-]]></programlisting>
- </section>
- <section>
- <title>(OPTIONAL) Set Up Support For Reports</title>
- <para>Evergreen reports are extremely powerful but require some simple configuration.
- See <xref linkend="report_starting_reporter_service"/> for information on starting and
- stopping the Reporter daemon processes.</para>
- </section>
- </section>
- </section>
-</chapter>
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<chapter xml:id="sipserver" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
- <info>\r
- <title>SIP Server</title>\r
- </info>\r
- <para><systemitem class="protocol">SIP</systemitem>, standing for <systemitem class="protocol">Standard Interchange Protocol</systemitem>, was developed by the \r
- <orgname class="corporation">3M</orgname>corporation to be a common protocol for data transfer between ILS' \r
- (referred to in <systemitem class="protocol">SIP</systemitem> as an <emphasis>ACS</emphasis>, or <emphasis>Automated Circulation System</emphasis>)\r
- <indexterm><primary>Automated Circulation System</primary></indexterm> and a \r
- third party device. Originally, the protocol was developed for \r
- use with 3M SelfCheck (often abbreviated SC, not to be confused with Staff Client) systems, but has since expanded to other companies and devices. It is now common to find \r
- <systemitem class="protocol">SIP</systemitem> in use in several other vendors' SelfCheck systems<indexterm><primary>SelfCheck</primary></indexterm>, as well as other non-SelfCheck devices. \r
- Some examples include:</para>\r
- <itemizedlist>\r
- <listitem>Patron Authentication (computer access, subscription databases)</listitem>\r
- <listitem>Automated Material Handling (AMH) <indexterm><primary>Automated Material Handling (AMH)</primary></indexterm>- The automated sorting of items, often to bins or \r
- book carts, based on shelving location or other programmable criteria</listitem>\r
- </itemizedlist>\r
- \r
- <section xml:id="Installing_SIP_Server">\r
- <info>\r
- <title>Installing the <systemitem class="protocol">SIP</systemitem> Server</title>\r
- </info>\r
- <para>This is a rough intro to installing the <systemitem class="protocol">SIP</systemitem> server for Evergreen.</para>\r
- <simplesect xml:id="Gettingthecode">\r
- <title>Getting the code</title>\r
- <para>Current <systemitem class="protocol">SIP</systemitem> code lives at github:</para>\r
- <screen><userinput>cd /opt</userinput></screen>\r
- <screen><userinput>git clone git://github.com/atz/SIPServer.git SIPServer</userinput></screen>\r
- <para>Or use the old style:</para>\r
- <screen><userinput>$ cd /opt</userinput></screen>\r
- <screen><userinput>$ sudo cvs -d:pserver:anonymous@openncip.cvs.sourceforge.net:/cvsroot/openncip login</userinput></screen>\r
- <para>When prompted for the CVS password, just hit Enter (sudo password may be req'd)</para>\r
- <screen><userinput>$ sudo cvs -z3 -d:pserver:anonymous@openncip.cvs.sourceforge.net:/cvsroot/openncip co -P SIPServer</userinput></screen>\r
- \r
- </simplesect>\r
- <simplesect xml:id="Configuring_Server">\r
- <title>Configuring the Server</title>\r
- <procedure>\r
- <step>\r
- <para>Type the following commands from the command prompt:</para><indexterm><primary>configuration files</primary><secondary>oils_sip.xml</secondary></indexterm>\r
- <screen><userinput>$ sudo su opensrf</userinput></screen>\r
- <screen><userinput>$ cd /openils/conf</userinput></screen>\r
- <screen><userinput>$ cp oils_sip.xml.example oils_sip.xml</userinput></screen>\r
- </step>\r
- <step>\r
- <para>Edit <filename>oils_sip.xml</filename><indexterm><primary>configuration files</primary><secondary>oils_sip.xml</secondary></indexterm>. \r
- Change the commented out <server-params> section to this:</para>\r
-<programlisting>\r
-<server-params\r
-min_servers='1'\r
-min_spare_servers='0'\r
-max_servers='25'\r
-/>\r
-</programlisting>\r
- </step>\r
- <step>\r
- <para> max_servers will directly correspond to the number of allowed <systemitem class="protocol">SIP</systemitem> clients. Set the number accordingly, but \r
- bear in mind that too many connections can \r
- exhaust memory. On a 4G RAM/4 CPU server (that is also running evergreen), it is not recommended to exceed 100 \r
- <systemitem class="protocol">SIP</systemitem> client connections.</para> \r
- </step>\r
- </procedure> \r
- </simplesect>\r
- <simplesect xml:id="Adding_SIP_users">\r
- <title>Adding <systemitem class="protocol">SIP</systemitem> Users</title>\r
- <procedure>\r
- <step>\r
- <para>Type the following commands from the command prompt:</para><indexterm><primary>configuration files</primary><secondary>oils_sip.xml</secondary></indexterm>\r
- <screen><userinput>$ sudo su opensrf</userinput></screen>\r
- <screen><userinput>$ cd /openils/conf</userinput></screen>\r
- <screen><userinput>$ cp oils_sip.xml.example oils_sip.xml</userinput></screen>\r
- </step>\r
- <step>\r
- <para> in the <accounts> section, add <systemitem class="protocol">SIP</systemitem> client login information. Make sure that all \r
- <varname><logins></varname> use the same institution attribute, and make \r
- sure the institution is listed in <varname><institutions></varname>. All attributes in the <varname><login></varname> section will be \r
- used by the <systemitem class="protocol">SIP</systemitem> client.</para>\r
- \r
- </step>\r
- <step>\r
- <para> In Evergreen, create a new profile group called <systemitem class="groupname">SIP</systemitem>. \r
- This group should be a sub-group of <systemitem class="groupname">Users</systemitem> \r
- (not <systemitem class="groupname">Staff</systemitem> or <systemitem class="groupname">Patrons</systemitem>). \r
- Set Editing Permission as <emphasis role="bold">group_application.user.sip_client</emphasis> and give the group the following permissions:</para>\r
- <literallayout>\r
- COPY_CHECKIN\r
- COPY_CHECKOUT\r
- RENEW_CIRC \r
- VIEW_CIRCULATIONS\r
- VIEW_COPY_CHECKOUT_HISTORY \r
- VIEW_PERMIT_CHECKOUT\r
- VIEW_USER\r
- VIEW_USER_FINES_SUMMARY\r
- VIEW_USER_TRANSACTIONS\r
- </literallayout>\r
- <para>OR use SQL like:</para>\r
-<screen>\r
-<userinput>\r
-INSERT INTO permission.grp_tree (id,name,parent,description,application_perm) \r
-VALUES (8, 'SIP', 1, 'SIP2 Client Systems', 'group_application.user.sip_client');\r
- \r
-INSERT INTO\r
- permission.grp_perm_map (grp, perm, depth, grantable)\r
-SELECT\r
- g.id, p.id, 0, FALSE\r
-FROM\r
- permission.grp_tree g,\r
- permission.perm_list p\r
-WHERE\r
- g.name = 'SIP' AND\r
- p.code IN (\r
- 'COPY_CHECKIN',\r
- 'COPY_CHECKOUT',\r
- 'RENEW_CIRC',\r
- 'VIEW_CIRCULATIONS',\r
- 'VIEW_COPY_CHECKOUT_HISTORY',\r
- 'VIEW_PERMIT_CHECKOUT',\r
- 'VIEW_USER',\r
- 'VIEW_USER_FINES_SUMMARY',\r
- 'VIEW_USER_TRANSACTIONS'\r
-);\r
-</userinput>\r
-</screen>\r
- \r
- <para>Verify:</para>\r
-<screen>\r
-<userinput>\r
-SELECT *\r
-FROM permission.grp_perm_map JOIN permission.perm_list ON\r
-permission.grp_perm_map.perm=permission.perm_list.id\r
-WHERE grp=8;\r
-</userinput>\r
-</screen>\r
- \r
- <para>Keep in mind that the id <emphasis role="bold">(8)</emphasis> may not necessarily be available on your system.</para> \r
- </step>\r
- <step>\r
- <para>For each account created in the <login> section of <filename>oils_sip.xml</filename>, create a user (via the staff client user editor) \r
- that has the same username \r
- and password and put that user into the <systemitem class="groupname">SIP</systemitem> group.</para>\r
- <note><para>The expiration date will affect the <systemitem class="groupname">SIP</systemitem> users' connection so you might want to make a note of \r
- this somewhere.</para></note> \r
- </step>\r
- </procedure> \r
- </simplesect>\r
- <simplesect xml:id="Running_SIP_server">\r
- <title>Running the server</title>\r
- <para>To start the <systemitem class="protocol">SIP</systemitem> server type the following commands from the command prompt:</para>\r
- <screen><userinput>$ sudo su opensrf</userinput></screen>\r
- <screen><userinput>$ oils_ctl.sh -d /openils/var/run -s /openils/conf/oils_sip.xml -a [start|stop|restart]_sip</userinput></screen> \r
- </simplesect>\r
- <simplesect xml:id="Logging-SIP">\r
- <title>Logging-SIP</title><indexterm><primary>SIP</primary></indexterm>\r
- <simplesect>\r
- <title><systemitem class="service">Syslog</systemitem></title>\r
- <para>It is useful to log <systemitem class="protocol">SIP</systemitem> requests to a separate file especially during initial setup by modifying your \r
- syslog config file.</para><indexterm><primary>syslog</primary></indexterm>\r
- <procedure>\r
- <step>\r
- <para>Edit syslog.conf.</para>\r
- <screen><userinput>$ sudo vi /etc/syslog.conf # maybe /etc/rsyslog.conf</userinput></screen> \r
- </step>\r
- <step>\r
- <para>Add this:</para>\r
- <programlisting>local6.* -/var/log/SIP_evergreen.log</programlisting> \r
- </step>\r
- <step>\r
- <para><systemitem class="service">Syslog</systemitem> expects the logfile to exist so create the file.</para>\r
- <screen><userinput>$ sudo touch /var/log/SIP_evergreen.log</userinput></screen> \r
- </step>\r
- <step>\r
- <para>Restart <systemitem class="service">sysklogd</systemitem>.</para>\r
- <screen><userinput>$ sudo /etc/init.d/sysklogd restart</userinput></screen> \r
- </step>\r
- </procedure> \r
- </simplesect>\r
- <simplesect>\r
- <title><systemitem class="service">Syslog-NG</systemitem></title>\r
- \r
- <procedure>\r
- <step>\r
- <para>Edit logging config.</para><indexterm><primary>syslog-NG</primary></indexterm>\r
- <screen><userinput>sudo vi /etc/syslog-ng/syslog-ng.conf</userinput></screen> \r
- </step>\r
- <step>\r
- <para>Add:</para>\r
-<programlisting>\r
-# SIP2 for Evergreen\r
-filter f_eg_sip { level(warn, err, crit) and facility(local6); };\r
-destination eg_sip { file("/var/log/SIP_evergreen.log"); };\r
-log { source(s_all); filter(f_eg_sip); destination(eg_sip); };\r
-</programlisting> \r
- </step>\r
- <step>\r
- <para><systemitem class="service">Syslog-ng</systemitem> expects the logfile to exist so create the file.</para>\r
- <screen><userinput>$ sudo touch /var/log/SIP_evergreen.log</userinput></screen> \r
- </step>\r
- <step>\r
- <para>Restart <systemitem class="service">syslog-ng</systemitem></para>\r
- <screen><userinput>$ sudo /etc/init.d/syslog-ng restart</userinput></screen> \r
- </step>\r
- </procedure> \r
- </simplesect>\r
- </simplesect> \r
- <simplesect xml:id="Testing_SIP_Connection">\r
- <title>Testing Your <systemitem class="protocol">SIP</systemitem> Connection</title><indexterm><primary>SIP</primary></indexterm>\r
- <itemizedlist>\r
- <listitem>\r
- <para>In the top level CVS checkout of the SIPServer code.</para>\r
- <screen><userinput>$ cd SIPServer/t</userinput></screen>\r
- </listitem>\r
- <listitem>\r
- <para> Edit <filename>SIPtest.pm</filename>, change the <varname>$instid</varname>, <varname>$server</varname>, <varname>$username</varname>, and \r
- <varname>$password</varname> variables. This will be enough to test connectivity. \r
- To run all tests, you'll need to change all the variables in the Configuration section.</para>\r
- <screen><userinput>$ PERL5LIB=../ perl 00sc_status.t</userinput></screen>\r
- <para>This should produce something like:</para>\r
-<screen>\r
-1..4\r
-ok 1 - Invalid username\r
-ok 2 - Invalid username\r
-ok 3 - login\r
-ok 4 - SC status\r
-</screen>\r
- </listitem> \r
- <listitem>\r
- <para> Don't be dismayed at <emphasis role="bold">Invalid Username</emphasis>. That's just one of the many tests that are run.</para>\r
- </listitem> \r
- </itemizedlist>\r
- </simplesect>\r
- <simplesect xml:id="SIP-More_Testing">\r
- <title>More Testing</title>\r
- <procedure>\r
- <step>\r
- <para>Once you have opened up either the <systemitem class="protocol">SIP</systemitem> OR <systemitem class="protocol">SIP2</systemitem> ports to be \r
- accessible from outside you can do some testing via <systemitem class="protocol">telnet</systemitem>. You can try this with localhost \r
- if you so wish, but we want to prove that <systemitem class="protocol">SIP2</systemitem> works from non-localhost. \r
- Replace <varname>$instid</varname>, <varname>$server</varname>, <varname>$barcode</varname>, <varname>$username</varname>, \r
- and <varname>$password</varname> variables below as necessary.</para>\r
- <note><para>We are using <systemitem>6001</systemitem> here which is associated with <systemitem class="protocol">SIP2</systemitem> as per our configuration.</para></note><indexterm><primary>telnet</primary></indexterm>\r
-<screen>\r
-<userinput>$ telnet $server 6001</userinput>\r
-Connected to $server.\r
-Escape character is '^]'.\r
-<userinput>9300CN**$username**|CO**$password**|CP**$instid**</userinput>\r
-</screen> \r
- <para>You should get back.</para>\r
- <screen>941</screen>\r
- </step>\r
- <step>\r
- <para>Now just copy in the following line (with variables replaced) you don't need to hit enter, just paste!</para>\r
- <screen>2300120080623 172148AO**$instid**|AA**$barcode**|AC$password|AD**$password**</screen>\r
- <para>You will get back the patron information for $barcode (something similar to the what's below).</para>\r
-<screen>24 Y 00120100113 170738AEFirstName MiddleName LastName|AA**$barcode**|BLY|CQY\r
-|BHUSD|BV0.00|AFOK|AO**$instid**|\r
-</screen>\r
- <para>The response declares it is a valid patron <varname>BLY</varname> with a valid password <varname>CQY</varname> and shows the user's \r
- <varname>$name</varname>.</para>\r
- </step>\r
- </procedure>\r
- </simplesect>\r
- </section>\r
- <section xml:id="SIP_Communication">\r
- <info>\r
- <title><systemitem class="protocol">SIP</systemitem> Communication</title><indexterm><primary>SIP</primary></indexterm>\r
- </info>\r
- <para><systemitem class="protocol">SIP</systemitem> generally communicates over a <systemitem class="protocol">TCP</systemitem> connection (either raw sockets or over \r
- <systemitem class="protocol">telnet</systemitem>), but can also communicate via serial connections and other methods. In Evergreen, \r
- the most common deployment is a <systemitem class="protocol">RAW</systemitem> socket connection on port <systemitem>6001</systemitem>.</para>\r
- <para><systemitem class="protocol">SIP</systemitem> communication consists of strings of messages, each message request and response begin with a 2-digit \r
- <quote>command</quote> - Requests usually being an odd \r
- number and responses usually increased by 1 to be an even number. The combination numbers for the request command and response is often referred to as a \r
- <emphasis>Message Pair</emphasis> (for example, a 23 command is a request for patron status, a 24 response is a patron status, and the message pair 23/24 is \r
- patron status message pair). The table in the next section shows the message pairs and a description of them.</para>\r
- <para>For clarification, the <quote>Request</quote> is from the device (selfcheck or otherwise) to the ILS/ACS. The response is… the response \r
- to the request ;).</para>\r
- <para>Within each request and response, a number of fields (either a fixed width or separated with a <emphasis role="bold">|</emphasis> [pipe symbol] and preceeded with a \r
- 2-character field identifier) \r
- are used. The fields vary between message pairs.</para>\r
- <informaltable>\r
- <tgroup cols="4">\r
- <colspec colnum="1" colname="pair" colwidth="0.5*"/>\r
- <colspec colnum="2" colname="name" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="supported" colwidth="1.0*"/>\r
- <colspec colnum="4" colname="details" colwidth="3.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Pair</entry>\r
- <entry>Name</entry>\r
- <entry>Supported?</entry>\r
- <entry>Details</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- <row>\r
- <entry>01</entry>\r
- <entry>Block Patron</entry>\r
- <entry>Yes</entry>\r
- <entry><link linkend='SIP_Block_Patron'>01_Block_Patron</link> - ACS responds with 24 Patron Status Response</entry>\r
- </row>\r
- <row>\r
- <entry>09/10</entry>\r
- <entry>Checkin</entry>\r
- <entry>Yes (with extensions)</entry>\r
- <entry><link linkend='SIP_Checkin'>09/10_Checkin</link></entry>\r
- </row>\r
- <row>\r
- <entry>11/12</entry>\r
- <entry>Checkout</entry>\r
- <entry>Yes (no renewals)</entry>\r
- <entry><link linkend='SIP_Checkout'>11/12_Checkout</link></entry>\r
- </row>\r
- <row>\r
- <entry>15/16</entry>\r
- <entry>Hold</entry>\r
- <entry>No</entry>\r
- <entry><link linkend='SIP_Hold'>15/16_Hold</link></entry>\r
- </row>\r
- <row>\r
- <entry>17/18</entry>\r
- <entry>Item Information</entry>\r
- <entry>Yes (no extensions)</entry>\r
- <entry><link linkend='SIP_Item_Information'>17/18_Item_Information</link></entry>\r
- </row>\r
- <row>\r
- <entry>19/20</entry>\r
- <entry>Item Status Update</entry>\r
- <entry>No</entry>\r
- <entry><link linkend='SIP_Item_Status_Update'>19/20_Item_Status_Update</link> - Returns Patron Enable response, but doesn't make any changes in EG</entry>\r
- </row>\r
- <row>\r
- <entry>23/24</entry>\r
- <entry>Patron Status</entry>\r
- <entry>Yes</entry>\r
- <entry><link linkend='SIP_Patron_Status'>23/24_Patron_Status</link> - 63/64 <quote>Patron Information</quote> preferred</entry>\r
- </row>\r
- <row>\r
- <entry>25/26</entry>\r
- <entry>Patron Enable</entry>\r
- <entry>No</entry>\r
- <entry><link linkend='SIP_Patron_Enable'>25/26_Patron_Enable</link> - Used during system testing and validation</entry>\r
- </row>\r
- <row>\r
- <entry>29/30</entry>\r
- <entry>Renew</entry>\r
- <entry>NO (maybe?)</entry>\r
- <entry><link linkend='SIP_Renew'>29/30_Renew</link></entry>\r
- </row>\r
- <row>\r
- <entry>35/36</entry>\r
- <entry>End Session</entry>\r
- <entry>Yes</entry>\r
- <entry><link linkend='SIP_End_Session'>35/36_End_Session</link></entry>\r
- </row>\r
- <row>\r
- <entry>37/38</entry>\r
- <entry>Fee Paid</entry>\r
- <entry>No</entry>\r
- <entry><link linkend='SIP_Fee_Paid'>37/38_Fee_Paid</link></entry>\r
- </row>\r
- <row>\r
- <entry>63/64</entry>\r
- <entry>Patron Information</entry>\r
- <entry>Yes (no extensions)</entry>\r
- <entry><link linkend='SIP_Patron_Information'>63/64_Patron_Information</link></entry>\r
- </row>\r
- <row>\r
- <entry>65/66</entry>\r
- <entry>Renew All</entry>\r
- <entry>No</entry>\r
- <entry><link linkend='SIP_Renew_All'>65/66_Renew_All</link></entry>\r
- </row>\r
- <row>\r
- <entry>93/94</entry>\r
- <entry>Login</entry>\r
- <entry>Yes</entry>\r
- <entry><link linkend='SIP_Login'>93/94_Login</link> - Must be first command to Evergreen ACS (via socket) or <systemitem class="protocol">SIP</systemitem> will terminate</entry>\r
- </row>\r
- <row>\r
- <entry>97/96</entry>\r
- <entry>Resend last message</entry>\r
- <entry>Yes</entry>\r
- <entry><link linkend='SIP_Resend'>97/96_Resend</link></entry>\r
- </row>\r
- <row>\r
- <entry>99/98</entry>\r
- <entry>SC/ACS Status</entry>\r
- <entry>Yes</entry>\r
- <entry><link linkend='SIP_SC_ACS_Status'>99/98_SC_and_ACS_Status</link></entry>\r
- </row>\r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <simplesect xml:id="SIP_Block_Patron">\r
- <title>01 Block Patron</title>\r
- <para>A selfcheck will issue a <command>Block Patron</command> command if a patron leaves their card in a selfcheck machine or if the selfcheck detects tampering (such as attempts \r
- to disable multiple items during a single item checkout, multiple failed pin entries, etc).</para><indexterm><primary>SelfCheck</primary></indexterm>\r
- <para>In Evergreen, this command does the following:</para>\r
- <itemizedlist>\r
- <listitem>User alert message: <emphasis>CARD BLOCKED BY SELF-CHECK MACHINE</emphasis> (this is independent of the AL \r
- <emphasis>Blocked Card Message</emphasis> field).</listitem>\r
- <listitem>Card is marked inactive.</listitem>\r
- </itemizedlist>\r
- <para>The request looks like:</para>\r
- <screen>01<card retained><date>[fields AO, AL, AA, AC]</screen>\r
- <para><emphasis>Card Retained</emphasis>: A single character field of <emphasis>Y</emphasis> or <emphasis>N</emphasis> - tells the ACS whether the SC has \r
- retained the card (ex: left in the machine) or not.</para> \r
- <para><emphasis>Date</emphasis>: An 18 character field for the date/time when the block occurred.</para> \r
- <para><emphasis>Format</emphasis>: YYYYMMDDZZZZHHMMSS (ZZZZ being zone - 4 blanks when local time, <quote> Z</quote> (3 blanks and a Z) represents UTC(GMT/Zulu)</para>\r
- <para><emphasis>Fields</emphasis>: See <link linkend='SIP_Fields'>Fields</link> for more details.</para>\r
- <para>The response is a 24 <quote>Patron Status Response</quote> with the following:</para>\r
- <itemizedlist>\r
- <listitem>Charge privileges denied</listitem>\r
- <listitem>Renewal privileges denied</listitem>\r
- <listitem>Recall privileges denied (hard-coded in every 24 or 64 response)</listitem>\r
- <listitem>hold privileges denied</listitem>\r
- <listitem>Screen Message 1 (AF): <emphasis>blocked</emphasis></listitem>\r
- <listitem>Patron</listitem>\r
-\r
- </itemizedlist>\r
- </simplesect>\r
- <simplesect xml:id="SIP_Checkin">\r
- <title>09/10 Checkin</title>\r
- <para>The request looks like:</para>\r
- <screen>09<No block (Offline)><xact date><return date>[Fields AP,AO,AB,AC,CH,BI]</screen>\r
- <para><emphasis>No Block (Offline)</emphasis>: A single character field of <emphasis>Y</emphasis> or <emphasis>N</emphasis> - Offline transactions are not currently \r
- supported so send <emphasis>N</emphasis>.</para> \r
- <para><emphasis>xact date</emphasis>: an 18 character field for the date/time when the checkin occurred. Format: YYYYMMDDZZZZHHMMSS (ZZZZ being zone - \r
- 4 blanks when local time, <quote> Z</quote> (3 blanks and a Z) represents UTC(GMT/Zulu)</para> \r
- <para><emphasis>Fields</emphasis>: See <link linkend='SIP_Fields'>Fields</link> for more details.</para>\r
- <para>The response is a 10 <quote>Checkin Response</quote> with the following:</para>\r
- <screen>10<resensitize><magnetic media><alert><xact date>[Fields AO,AB,AQ,AJ,CL,AA,CK,CH,CR,CS,CT,CV,CY,DA,AF,AG]</screen>\r
- <para>Example (with a remote hold):</para>\r
- <screen>09N20100507 16593720100507 165937APCheckin Bin 5|AOBR1|AB1565921879|ACsip_01|</screen>\r
-<screen>\r
-101YNY20100623 165731AOBR1|AB1565921879|AQBR1|AJPerl 5 desktop reference|CK001|CSQA76.73.P33V76 1996\r
-|CTBR3|CY373827|DANicholas Richard Woodard|CV02|\r
-</screen>\r
- <para>Here you can see a hold alert for patron <varname>CY</varname> <emphasis>373827</emphasis>, named <varname>DA</varname> <emphasis>Nicholas Richard Woodard</emphasis>, \r
- to be picked up at <varname>CT</varname> <quote>BR3</quote>. Since the transaction is happening \r
- at <varname>AO</varname> <quote>BR1</quote>, the alert type <varname>CV</varname> is 02 for <emphasis>hold at remote library</emphasis>. \r
- The possible values for <varname>CV</varname> are:</para>\r
- <itemizedlist>\r
- <listitem>00: unknown</listitem>\r
- <listitem>01: local hold</listitem>\r
- <listitem>02: remote hold</listitem>\r
- <listitem>03: ILL transfer (not used by EG)</listitem>\r
- <listitem>04: transfer</listitem>\r
- <listitem>99: other</listitem>\r
- </itemizedlist>\r
- <note>\r
- <para>the logic for Evergreen to determine the content is magnetic_media comes from either legacy circ scripts or search_config_circ_modifier. \r
- The default is non-magnetic.<indexterm><primary>magnetic media</primary></indexterm> \r
- The same is true for media_type (default 001). Evergreen does not populate the collection_code because it does not really have any, but it will provide the \r
- call_number where available.</para>\r
- <para>Unlike the <varname>item_id</varname> (barcode), the <varname>title_id</varname> is actually a title string, unless the configuration forces the return of \r
- the bib ID.</para>\r
- <para>Don't be confused by the different branches that can show up in the same response line.</para>\r
- <itemizedlist>\r
- <listitem><varname>AO</varname> is where the transaction took place,</listitem>\r
- <listitem><varname>AQ</varname> is the <quote>permanent location</quote>, and</listitem>\r
- <listitem><varname>CT</varname> is the <emphasis>destination location</emphasis> (i.e., pickup lib for a hold or target lib for a transfer).</listitem>\r
- </itemizedlist>\r
- </note>\r
- </simplesect>\r
- <simplesect xml:id="SIP_Checkout">\r
- <title>11/12 Checkout</title>\r
- </simplesect>\r
- <simplesect xml:id="SIP_Hold">\r
- <title>15/16 Hold</title>\r
- <para>Not yet supported.</para>\r
- </simplesect>\r
- <simplesect xml:id="SIP_Item_Information">\r
- <title>17/18 Item Information</title>\r
- <para>The request looks like:</para>\r
- <screen>17<xact_date>[fields: AO,AB,AC]</screen>\r
- <para>The request is very terse. <varname>AC</varname> is optional.</para>\r
- <para>The following response structure is for <systemitem class="protocol">SIP2</systemitem>. (Version 1 of the protocol had only 6 total fields.)</para>\r
-<screen>\r
-18<circulation_status><security_marker><fee_type><xact_date>\r
-[fields: CF,AH,CJ,CM,AB,AJ,BG,BH,BV,CK,AQ,AP,CH,AF,AG,+CT,+CS]\r
-</screen>\r
- <para>Example:</para>\r
- <screen>1720060110 215612AOBR1|ABno_such_barcode|</screen>\r
- <screen>1801010120100609 162510ABno_such_barcode|AJ|</screen>\r
- <screen>1720060110 215612AOBR1|AB1565921879|</screen>\r
-<screen>1810020120100623 171415AB1565921879|AJPerl 5 desktop reference|CK001|AQBR1|APBR1|BGBR1\r
-|CTBR3|CSQA76.73.P33V76 1996|\r
-</screen>\r
- <para>The first case is with a bogus barcode. The latter shows an item with a circulation_status of <emphasis>10</emphasis> for <emphasis>in transit between libraries</emphasis>. \r
- The known values of <varname>circulation_status</varname> are enumerated in the spec.</para>\r
- <para>EXTENSIONS: The <varname>CT</varname> field for <emphasis>destination location</emphasis> and <varname>CS</varname> <emphasis>call number</emphasis> are used by \r
- Automated Material Handling systems.</para><indexterm><primary>Automated Material Handling (AMH)</primary></indexterm>\r
- </simplesect>\r
- <simplesect xml:id="SIP_Item_Status_Update">\r
- <title>19/20 Item Status Update</title>\r
- </simplesect>\r
- <simplesect xml:id="SIP_Patron_Status">\r
- <title>23/24 Patron Status</title>\r
- <para>Example:</para>\r
- <screen>2300120060101 084235AOUWOLS|AAbad_barcode|ACsip_01|ADbad_password|</screen>\r
- <screen>24YYYY 00120100507 013934AE|AAbad_barcode|BLN|AOUWOLS|</screen>\r
- <screen>2300120060101 084235AOCONS|AA999999|ACsip_01|ADbad_password|</screen>\r
- <screen>24 Y 00120100507 022318AEDoug Fiander|AA999999|BLY|CQN|BHUSD|BV0.00|AFOK|AOCONS|</screen>\r
- <screen>2300120060101 084235AOCONS|AA999999|ACsip_01|ADuserpassword|LY|CQN|BHUSD|BV0.00|AFOK|AOCONS|</screen>\r
- <screen>24 Y 00120100507 022803AEDoug Fiander|AA999999|BLY|CQY|BHUSD|BV0.00|AFOK|AOCONS|</screen>\r
- <orderedlist>\r
- <listitem>The <varname>BL</varname> field (<systemitem class="protocol">SIP2</systemitem>, optional) is <emphasis>valid patron</emphasis>, so the \r
- <emphasis>N</emphasis> value means \r
- <emphasis>bad_barcode</emphasis> doesn't match a patron, the <emphasis>Y</emphasis> value means 999999 does.</listitem>\r
- <listitem>The <varname>CQ</varname> field (<systemitem class="protocol">SIP2</systemitem>, optional) is <emphasis>valid password</emphasis>, so the <emphasis>N</emphasis> \r
- value means <emphasis>bad_password</emphasis> doesn't match 999999's password, the <emphasis>Y</emphasis> means <emphasis>userpassword</emphasis> \r
- does.</listitem>\r
- </orderedlist>\r
- <para>So if you were building the most basic <systemitem class="protocol">SIP2</systemitem> authentication client, you would check for \r
- <emphasis>|CQY|</emphasis> in the response to know the user's barcode and password \r
- are correct (<varname>|CQY|</varname> implies <varname>|BLY|</varname>, since you cannot check the password unless the barcode exists). However, in practice, \r
- depending on the application, there are other factors to consider in authentication, like whether the user is blocked from checkout, owes excessive fines, reported their \r
- card lost, etc. These limitations are reflected in the 14-character <emphasis>patron status</emphasis> string immediately following the <emphasis>24</emphasis> code. \r
- See the field definitions in your copy of the spec.</para>\r
- </simplesect>\r
- <simplesect xml:id="SIP_Patron_Enable">\r
- <title>25/26 Patron Enable</title>\r
- <para>Not yet supported.</para>\r
- </simplesect>\r
- <simplesect xml:id="SIP_Renew">\r
- <title>29/30 Renew</title>\r
- <para>Evergreen ACS status message indicates <emphasis>renew</emphasis> is supported.</para>\r
- </simplesect>\r
- <simplesect xml:id="SIP_End_Session">\r
- <title>35/36 End Session</title>\r
- <screen>3520100505 115901AOBR1|AA999999|</screen>\r
- <screen>36Y20100507 161213AOCONS|AA999999|AFThank you!|</screen>\r
- <para>The <emphasis>Y/N</emphasis> code immediately after the 36 indicates <emphasis>success/failure</emphasis>. Failure is not particularly meaningful or \r
- important in this context, and for evergreen it is hardcoded <emphasis>Y</emphasis>.</para> \r
- </simplesect>\r
- <simplesect xml:id="SIP_Fee_Paid">\r
- <title>37/38 Fee Paid</title>\r
- <para>Not implemented.</para>\r
- </simplesect>\r
- <simplesect xml:id="SIP_Patron_Information">\r
- <title>63/64 Patron Information</title>\r
- <para>Attempting to retrieve patron info with a bad barcode:</para>\r
- <screen>6300020060329 201700 AOBR1|AAbad_barcode|</screen>\r
- <screen>64YYYY 00020100623 141130000000000000000000000000AE|AAbad_barcode|BLN|AOBR1|</screen>\r
- <para>Attempting to retrieve patron info with a good barcode (but bad patron password):</para>\r
- <screen>6300020060329 201700 AOBR1|AA999999|ADbadpwd|</screen>\r
-<screen>\r
-64 Y 00020100623 141130000000000000000000000000AA999999|AEDavid J. Fiander|BHUSD|BV0.00\r
-|BD2 Meadowvale Dr. St Thomas, ON Canada\r
-</screen>\r
-<screen>90210|BEdjfiander@somemail.com|BF(519) 555 1234|AQBR1|BLY|CQN|PB19640925|PCPatrons\r
-|PIUnfiltered|AFOK|AOBR1|\r
-</screen>\r
- <para>See <link linkend='SIP_Patron_Status'>23/24 Patron Status</link> for info on <varname>BL</varname> and <varname>CQ</varname> fields.</para>\r
- </simplesect>\r
- <simplesect xml:id="SIP_Renew_All">\r
- <title>65/66 Renew All</title>\r
- <para>Not yet supported.</para>\r
- </simplesect>\r
- <simplesect xml:id="SIP_Login">\r
- <title>93/94 Login</title>\r
- <para>Example:</para>\r
- <screen>9300CNsip_01|CObad_value|CPBR1|</screen>\r
- <screen>[Connection closed by foreign host.]</screen>\r
- <screen>...</screen>\r
- <screen>9300CNsip_01|COsip_01|CPBR1|</screen>\r
- <screen>941</screen>\r
- <para><emphasis>941</emphasis> means successful terminal login. <emphasis>940</emphasis> or getting dropped means failure.</para>\r
- </simplesect>\r
- <simplesect xml:id="SIP_Resend">\r
- <title>97/96 Resend</title>\r
- </simplesect>\r
- <simplesect xml:id="SIP_SC_ACS_Status">\r
- <title>99/98 SC and ACS Status</title>\r
- <screen>99<status code><max print width><protocol version></screen>\r
- <para>All 3 fields are required:</para>\r
- <itemizedlist>\r
- <listitem>status code - 1 character:</listitem>\r
- <itemizedlist>\r
- <listitem>0: SC is OK</listitem>\r
- <listitem>1: SC is out of paper</listitem>\r
- <listitem>2: SC shutting down</listitem> \r
- </itemizedlist>\r
- <listitem>max print width - 3 characters - the integer number of characters the client can print</listitem>\r
- <listitem>protocol version - 4 characters - x.xx</listitem>\r
- </itemizedlist>\r
-<screen>\r
-98<on-line status><checkin ok><checkout ok><ACS renewal policy>\r
-<status update ok><offline ok><timeout period>\r
-</screen>\r
-<screen>\r
-<retries allowed><date/time sync><protocol version><institution id>\r
-<library name><supported messages><terminal\r
-</screen> \r
- <screen>location><screen message><print line></screen>\r
- <para>Example:</para>\r
- <screen>9910302.00</screen>\r
- <screen>98YYYYNN60000320100510 1717202.00AOCONS|BXYYYYYYYYYNYNNNYN|</screen>\r
- <para>The Supported Messages field <varname>BX</varname> appears only in <systemitem class="protocol">SIP2</systemitem>, and specifies whether 16 different \r
- <systemitem class="protocol">SIP</systemitem> commands are supported by the ACS or not.</para>\r
- </simplesect>\r
- <simplesect xml:id="SIP_Fields">\r
- <title>Fields</title>\r
- <para>All fixed-length fields in a communication will appear before the first variable-length field. This allows for simple parsing. Variable-length fields are by \r
- definition delimited, though there will not necessarily be an initial delimiter between the last fixed-length field and the first variable-length one. It would be \r
- unnecessary, since you should know the exact position where that field begins already.</para>\r
- </simplesect>\r
- </section>\r
-</chapter>\r
-\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<chapter xml:id="staffclientinstallation" xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xl="http://www.w3.org/1999/xlink">\r
- <info>\r
- <title>Installation of Evergreen Staff Client Software</title>\r
- <abstract>\r
- <para>This section describes installation of the Evergreen Staff Client software.</para>\r
- </abstract>\r
- </info>\r
- <section xml:id="staffclientinstallation-installing-staffclient">\r
- <title>Installing the Staff Client</title>\r
- <indexterm>\r
- <primary>staff client</primary>\r
- <secondary>installing</secondary>\r
- </indexterm>\r
- <section xml:id="staffclientinstallation-installing-prebuilt">\r
- <title>Installing a Pre-Built Staff Client</title>\r
- <para>A pre-built Staff Client is available for <systemitem class="osname">Windows</systemitem>,\r
- <systemitem class="osname">Mac</systemitem> or Linux systems. Installing the Staff Client in\r
- each of these environments is described in the following sections.</para>\r
- <section xml:id="staffclientinstallation-installing-windows">\r
- <title>Installing on <systemitem class="osname">Windows</systemitem></title>\r
- <indexterm>\r
- <primary>staff client</primary>\r
- <secondary>installing</secondary>\r
- <tertiary>Windows</tertiary>\r
- </indexterm>\r
- <para>In this section we describe the process of installing the Staff Client on the\r
- <systemitem class="osname">Microsoft Windows</systemitem> operating system.</para>\r
- <para>Visit the downloads section of the Evergreen website at\r
- <ulink url="http://www.evergreen-ils.org/downloads.php">http://www.evergreen-ils.org/downloads.php</ulink>\r
- and find the standard <systemitem class="osname">Microsoft Windows</systemitem> Installer\r
- that contains the current version of the Staff Client. Download the Installer, then run\r
- it. A screen that looks similar to this should appear:</para>\r
- <mediaobject>\r
- <alt>\r
- <phrase>Running the Staff Client installer</phrase>\r
- </alt>\r
- <imageobject>\r
- <imagedata fileref="../media/staffclientinstallation-staffclient-1.png" format="PNG" scalefit="1" width="60%"/>\r
- </imageobject>\r
- </mediaobject>\r
- <para>Click <guibutton>'Next'</guibutton> to continue through the guided install\r
- process. The Install Wizard will ask you to agree to the end-user license, ask you where\r
- to install the software, ask about where to place icons, and then will automatically\r
- install the software on your workstation.</para>\r
- <para>When you run the Staff Client for the first time, a screen similar to this should\r
- appear:</para>\r
- <mediaobject>\r
- <alt>\r
- <phrase>Running the Staff Client for the first time</phrase>\r
- </alt>\r
- <imageobject>\r
- <imagedata fileref="../media/staffclientinstallation-staffclient-2.png" format="PNG" scalefit="1" width="60%"/>\r
- </imageobject>\r
- </mediaobject>\r
- <para>First, add the name of your Evergreen server to the field \r
- <emphasis role="bold">Hostname</emphasis> in the <emphasis role="bold">Server</emphasis>\r
- section. For example, the PINES demo system is \r
- <ulink url="http://demo.gapines.org">http://demo.gapines.org</ulink>. \r
- After adding the server name, click <guibutton>'Re-Test Server'</guibutton>.</para>\r
- <para>Because this is the initial run of the Staff Client, you will see a warning in the\r
- upper-right saying: <emphasis role="bold">Not yet configured for the specified\r
- server</emphasis>. The first thing you must do to the Staff Client on every workstation\r
- is to assign it a workstation name. This is covered in \r
- <xref linkend="staffclientinstallation-workstationnames"/>.</para>\r
- <note><para>Users must have the <literal>REGISTER_WORKSTATION</literal> permission and be assigned the appropriate working location(s) in order to \r
- register a workstation.</para></note> \r
- <para>To add working locations to a user’s account:</para>\r
- <orderedlist>\r
- <listitem>\r
- <para>Retrieve the user through a patron search and select <menuchoice><guimenu>Other</guimenu><guimenuitem>User Permission \r
- Editor</guimenuitem></menuchoice> and select the boxes for the locations necessary.</para> \r
- <para>Save the user record.</para>\r
- <note>\r
- <para>Making modifications to <guilabel>Working Locations</guilabel> while changing permission settings does not work – when this \r
- workflow is performed, permission changes will not be applied to the database.</para>\r
- </note>\r
- </listitem>\r
- <listitem>\r
- <para>Alternately, from the <guimenu>Admin</guimenu> menu, select <guimenuitem>User Permission Editor</guimenuitem> and retrieve the user by \r
- barcode.</para> \r
- <para>Make changes to working locations as described above.</para>\r
- </listitem>\r
- </orderedlist>\r
- </section>\r
- </section>\r
-\r
- </section>\r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"\r
-xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:id="troubleshooting">\r
- <title>Troubleshooting System Errors</title>\r
- <para>If you have Evergreen installed and are encountering systematic errors, here is the steps to find the \r
- cause and solution to most problems. These instructions assume standard locations and file names for Evergreen\r
- installations, and may also include commands for specific Linux distributions.</para>\r
- <procedure>\r
- <title>Systematic Evergreen Restart to Isolate Errors</title>\r
- <step>\r
- <para>Stop Apache:</para><indexterm><primary>web server</primary><secondary>Apache</secondary><tertiery>stopping</tertiery></indexterm>\r
- <screen><userinput>/etc/init.d/apache2 stop</userinput></screen>\r
- <para>or</para>\r
- <screen><userinput>apache2ctl stop</userinput></screen>\r
- </step>\r
- <step>\r
- <para>Stop OpenSRF:</para><indexterm><primary>OpenSRF</primary></indexterm>\r
- <screen><userinput>osrf_ctl.sh -l -a stop_all</userinput></screen>\r
- <para>You should get either output simlar to this:</para>\r
-<screen>\r
-Stopping OpenSRF C process 12515...\r
-Stopping OpenSRF C process 12520...\r
-Stopping OpenSRF C process 12526...\r
-Stopping OpenSRF Perl process 12471...\r
-Stopping OpenSRF Router process 12466...\r
-</screen>\r
- <para>Or, if services have already been stopped, output may look like this:</para>\r
- <screen>OpenSRF C not running</screen>\r
- <screen>OpenSRF Perl not running</screen>\r
- <screen>OpenSRF Router not running</screen>\r
- <para>Occasionally osrf_ctl.sh fails to kill OpenSRF processes, so we should check to make \r
- sure that none are still running with the command:</para>\r
- <screen><userinput>ps -aef | grep OpenSRF</userinput></screen>\r
- <para>You should manually kill any OpenSRF processes.</para>\r
- <para>If you were unable to stop OpenSRF with the above methods, you could also try this \r
- command:</para>\r
- <screen><userinput>rm –R /openils/var/run/*.pid</userinput></screen>\r
- <para>This will remove the temporary OpenSRF process files from the run directory which may \r
- have been left over from a previous system boot cycle.</para>\r
- </step>\r
- <step>\r
- <para>Restart <systemitem class="service">Ejabberd</systemitem> and \r
- <systemitem class="service">Memcached</systemitem> with the following commands:</para><indexterm><primary>Ejabberd</primary></indexterm>\r
- <screen><userinput>sudo /etc/init.d/ejabberd restart</userinput></screen>\r
- <screen><userinput>sudo /etc/init.d/memcached restart</userinput></screen><indexterm><primary>memcached</primary></indexterm>\r
- </step>\r
- <step> \r
- <para>Start the OpenSRF <systemitem class="service">router</systemitem> and check for errors</para>\r
- <indexterm><primary>OpenSRF</primary><secondary>services</secondary><tertiery>router</tertiery></indexterm>\r
- <screen><userinput>/openils/bin/osrf_ctl.sh -l -a start_router</userinput></screen>\r
- <para>If the <systemitem class="service">router</systemitem> started correctly, output will be:</para>\r
- <screen>Starting OpenSRF Router</screen>\r
- <para>If <systemitem class="service">router</systemitem> does not start correctly, you should check the <systemitem class="service">router</systemitem> error log files \r
- for error information.</para>\r
- <para>Evergreen 1.6 uses two routers, a public one and a private one, with two different \r
- logfiles:</para>\r
- <para><filename >/openils/var/log/private.router.log</filename></para><indexterm><primary>logs</primary><secondary>router</secondary></indexterm>\r
- <para><filename >/openils/var/log/public.router.log</filename></para>\r
- <para>A quick way to find error information in the logs is with the grep command.</para>\r
- <screen>grep ERR /openils/var/log/*router.log</screen>\r
- <para>As a final sanity check, look for router processes using the process status \r
- command:</para>\r
- <screen><userinput>ps -aef | grep Router</userinput></screen>\r
- </step>\r
- <step>\r
- <para>Start the OpenSRF <systemitem class="service">perl</systemitem> services and check for errors</para>\r
- <indexterm><primary>OpenSRF</primary><secondary>services</secondary><tertiery>perl</tertiery></indexterm>\r
- <screen><userinput>/openils/bin/osrf_ctl.sh -l -a start_perl</userinput></screen>\r
- <para>You should see the output similar to the following:</para>\r
-<screen>\r
-Starting OpenSRF Perl\r
-* starting all services for ...\r
-* starting service pid=7484 opensrf.settings\r
-* starting service pid=7493 open-ils.cat\r
-* starting service pid=7495 open-ils.supercat\r
-* starting service pid=7497 open-ils.search\r
-* starting service pid=7499 open-ils.circ\r
-* starting service pid=7501 open-ils.actor\r
-* starting service pid=7502 open-ils.storage\r
-...\r
-</screen>\r
- <para>If the <systemitem class="service">perl</systemitem> services do not start correctly or you receive errors, search for errors \r
- in the following log files:</para>\r
- <itemizedlist> \r
- <listitem>/openils/var/log/router.log</listitem>\r
- <listitem>/openils/var/log/osrfsys.log</listitem><indexterm><primary>logs</primary><secondary>osrfsys.log</secondary></indexterm>\r
- </itemizedlist>\r
- <para>At this point you can use the <command>grep</command> command to find errors in \r
- any of the Evergreen log files:</para>\r
- <screen><userinput>grep ERR /openils/var/log/*.log</userinput></screen>\r
- <para>As a final sanity check, look for OpenSRF processes:</para>\r
- <screen><userinput>ps -aef | grep -i opensrf</userinput></screen>\r
- </step>\r
- <step>\r
- <para>Start the OpenSRF <systemitem class="service">c</systemitem> services and check for errors:</para>]\r
- <indexterm><primary>OpenSRF</primary><secondary>services</secondary><tertiery>C</tertiery></indexterm>\r
- <screen>/openils/bin/osrf_ctl.sh -l -a start_c</screen>\r
- <para>And output should be:</para>\r
- <screen>Starting OpenSRF C (host=localhost)</screen>\r
- <para>If the <systemitem class="service">c</systemitem> service does not start, check for errors by grepping \r
- the log files for errors:</para>\r
- <screen><userinput>grep ERR /openils/var/log/*.log</userinput></screen>\r
- <para>Check for <application>OpenSRF</application> processes:</para>\r
- <screen><userinput>ps -aef | grep -i opensrf</userinput></screen>\r
- </step>\r
- <step>\r
- <para>Smoke test with <filename>autogen.sh</filename><indexterm><primary>autogen</primary></indexterm></para>\r
- <para>The <command>autogen</command> tool will take some dynamic information from the database and generate \r
- static JavaScript <indexterm><primary>JavaScript</primary></indexterm> files for use by the OPAC and staff client. It is also able to refresh \r
- the proximity map<indexterm><primary>proximity map</primary></indexterm> between libraries for the purpose of efficiently routing hold \r
- requests.</para>\r
- <para>As user <systemitem class="username">opensrf</systemitem>, you invoke <command>autogen</command> with the command:</para>\r
- <screen><userinput>/openils/bin/autogen.sh -c /openils/conf/opensrf_core.xml -u</userinput></screen>\r
- <para>If Autogen completes successfully, the output will be:</para>\r
-<screen>\r
-Updating fieldmapper\r
-Updating web_fieldmapper\r
-Updating OrgTree\r
-removing OrgTree from the cache...\r
-Updating OrgTree HTML\r
-Updating locales selection HTML\r
-Updating Search Groups\r
-Refreshing proximity of org units\r
-Successfully updated the organization proximity\r
-Done\r
-</screen>\r
- <para>If Autogen does not complete its task and you receive errors, use \r
- <command>grep</command> to find errors in the log files:</para> \r
- <screen><userinput>grep ERR /openils/var/log/*.log</userinput></screen>\r
- </step>\r
- <step>\r
- <para>Connect to Evergreen using the <command>srfsh</command> command-line OpenSRF client<indexterm><primary>srfsh (command-line OpenSRF client)</primary></indexterm></para>\r
- <screen><userinput>/openils/bin/srfsh</userinput></screen>\r
- <note>\r
- <para>In order for you to connect using <command>srfsh</command>, you will need to \r
- have set up the .srfsh.xml configuration file in your home directory as as \r
- described in the installation chapter.</para>\r
- </note> \r
- <para>You will then see the <emphasis>srfsh</emphasis> prompt:</para>\r
- <screen><prompt>srfsh#</prompt></screen>\r
- <para>At the srfsh prompt, enter this command:</para>\r
- <screen><userinput>login admin open-ils</userinput></screen>\r
- <para>You should the request verification:</para>\r
-<screen>\r
-Received Data: "6f63ff5542da1fead4431c6c280efc75"\r
-------------------------------------\r
-Request Completed Successfully\r
-Request Time in seconds: 0.018414\r
-------------------------------------\r
-\r
-Received Data: {\r
-"ilsevent":0,\r
-"textcode":"SUCCESS",\r
-"desc":" ",\r
-"pid":7793,\r
-"stacktrace":"oils_auth.c:312",\r
-"payload":{\r
-"authtoken":"28804ebf99508496e2a4d2593aaa930e",\r
- "authtime":420.000000\r
-}\r
-}\r
-\r
-------------------------------------\r
-Request Completed Successfully\r
-Request Time in seconds: 0.552430\r
-------------------------------------\r
-Login Session: 28804. Session timeout: 420.000\r
-srfsh#</screen> \r
- <para>If you encounter errors or if you are unable to connect, you should consult the \r
- <filename>srfsh.log</filename> file. The location of this file is configured in your <indexterm><primary>logs</primary><secondary>srfsh.log</secondary></indexterm>\r
- <filename>.srfsh.xml</filename> configuration file and is \r
- <filename>/openils/var/log/srfsh.log</filename> by default.</para>\r
- <para>Pressing \r
- <keycombo>\r
- <keycap>Ctrl</keycap>\r
- <keycap>D</keycap>\r
- </keycombo>\r
- or entering <quote>exit</quote> will terminate srfsh.</para>\r
- </step>\r
- <step>\r
- <para>Start <application>Apache</application> and check for errors:</para>\r
- <indexterm><primary>web server</primary><secondary>Apache</secondary><tertiery>starting</tertiery></indexterm>\r
- <screen>/etc/init.d/apache2 start</screen>\r
- <para>or</para>\r
- <screen>apache2ctl start</screen>\r
- <para>You should see output:</para>\r
-<screen>\r
-* Starting web server apache2\r
-...done.\r
-</screen>\r
- <para>the Apache OpenSRF modules write to the \r
- <filename>/openils/var/log/gateway.log</filename></para><indexterm><primary>logs</primary><secondary>gateway.log</secondary></indexterm>\r
- <para>However, you should check all of the log files for errors:</para>\r
- <screen>grep ERR /openils/var/log/*.log</screen>\r
- <para>Another place to check for errors is the <application>Apache</application> error logs\r
- generally located in in the <filename class="directory">/var/log/Apache2</filename> <indexterm><primary>logs</primary><secondary>Apache</secondary></indexterm>\r
- <indexterm><primary>Apache</primary><secondary>logs</secondary></indexterm>\r
- directory</para>\r
- <para>If you encounter errors with Apache, a common source of potential problems are the \r
- Evergreen site configuration files <filename>/etc/apache2/eg_vhost.conf</filename> and \r
- <filename>/etc/apache2/sites-available/eg.conf</filename></para>\r
- <indexterm><primary>configuration files</primary><secondary>Apache</secondary><tertiery>eg.conf</tertiery></indexterm>\r
- <indexterm><primary>configuration files</primary><secondary>Apache</secondary><tertiery>eg_vhost.conf</tertiery></indexterm>\r
- </step>\r
-\r
- <step>\r
- <title>Testing with <command>settings-tester.pl</command></title>\r
- <para>As the <systemitem class="username">opensrf</systemitem> user, run the script <command>settings-tester.pl</command> to see if it finds any \r
- system configuration problems.</para>\r
-<screen> \r
-<userinput>cd /home/opensrf/Evergreen-ILS-1.6.0.0</userinput>\r
-<userinput>perl Open-ILS/src/support-scripts/settings-tester.pl</userinput>\r
-</screen>\r
- <para>Here is example output from running <command>settings-tester.pl</command>:</para>\r
-<screen>\r
-LWP::UserAgent version 5.810\r
-XML::LibXML version 1.70\r
-XML::LibXML::XPathContext version 1.70\r
-XML::LibXSLT version 1.70\r
-Net::Server::PreFork version 0.97\r
-Cache::Memcached version 1.24\r
-Class::DBI version 0.96\r
-Class::DBI::AbstractSearch version 0.07\r
-Template version 2.19\r
-DBD::Pg version 2.8.2\r
-Net::Z3950::ZOOM version 1.24\r
-MARC::Record version 2.0.0\r
-MARC::Charset version 1.1\r
-MARC::File::XML version 0.92\r
-Text::Aspell version 0.04\r
-CGI version 3.29\r
-DateTime::TimeZone version 0.7701\r
-DateTime version 0.42\r
-DateTime::Format::ISO8601 version 0.06\r
-DateTime::Format::Mail version 0.3001\r
-Unix::Syslog version 1.1\r
-GD::Graph3d version 0.63\r
-JavaScript::SpiderMonkey version 0.19\r
-Log::Log4perl version 1.16\r
-Email::Send version 2.192\r
-Text::CSV version 1.06\r
-Text::CSV_XS version 0.52\r
-Spreadsheet::WriteExcel::Big version 2.20\r
-Tie::IxHash version 1.21\r
-Parse::RecDescent version 1.95.1\r
-SRU version 0.99\r
-JSON::XS version 2.27\r
-</screen>\r
-<screen>\r
-Checking Jabber connection for user opensrf, domain private.localhost\r
-* Jabber successfully connected\r
-\r
-Checking Jabber connection for user opensrf, domain public.localhost\r
-* Jabber successfully connected\r
-\r
-Checking Jabber connection for user router, domain public.localhost\r
-* Jabber successfully connected\r
-\r
-Checking Jabber connection for user router, domain private.localhost\r
-* Jabber successfully connected\r
-\r
-Checking database connections\r
-* /opensrf/default/reporter/setup :: Successfully connected to database...\r
- * Database has the expected server encoding UTF8.\r
-* /opensrf/default/apps/open-ils.storage/app_settings/databases :: Successfully...\r
-* /opensrf/default/apps/open-ils.cstore/app_settings :: Successfully...\r
- * Database has the expected server encoding UTF8.\r
-* /opensrf/default/apps/open-ils.pcrud/app_settings :: Successfully ...\r
- * Database has the expected server encoding UTF8.\r
-* /opensrf/default/apps/open-ils.reporter-store/app_settings :: Successfully...\r
- * Database has the expected server encoding UTF8.\r
-\r
-Checking database drivers to ensure <driver> matches <language>\r
-* OK: Pg language is undefined for reporter base configuration\r
-* OK: Pg language is undefined for reporter base configuration\r
-* OK: Pg language is perl in /opensrf/default/apps/open-ils.storage/language\r
-* OK: pgsql language is C in /opensrf/default/apps/open-ils.cstore/language\r
-* OK: pgsql language is C in /opensrf/default/apps/open-ils.pcrud/language\r
-* OK: pgsql language is C in /opensrf/default/apps/open-ils.reporter-store/language\r
-\r
-Checking libdbi and libdbi-drivers\r
- * OK - found locally installed libdbi.so and libdbdpgsql.so in shared library path\r
-\r
-Checking hostname\r
- * OK: found hostname 'localhost' in <hosts> section of opensrf.xml\r
-$\r
-</screen>\r
- <para>If the output from the script does not help you find the problem, please do not make any further significant changes to your configuration. \r
- Follow the steps in the troubleshooting guide in <xref linkend="troubleshooting"/>.</para>\r
- </step>\r
- <step>\r
- <para>Try to login from the staff client</para><indexterm><primary>staff client</primary><secondary>testing</secondary></indexterm>\r
- </step>\r
- <step xml:id="testing-opac">\r
- <title>Testing the Catalog</title>\r
- <indexterm><primary>OPAC</primary><secondary>testing</secondary></indexterm>\r
- <para>By default, the OPAC will live at the URL <uri>http://my.domain.com/opac/</uri>.</para>\r
- <para>Navigate to this URL and the front page of the OPAC should load. There is a basic text entry field with some extra search options. If you have any \r
- problems loading this page, check the Apache error logs. If the page loads but does not function correctly, then check for possible javascript errors. We \r
- highly recommend testing with the <application>Firefox</application> browser because of the helpful javascript debugging tools.</para>\r
- <para>Assuming that the OPAC is functioning and there is data in your database, you can now perform other simple functional tests \r
- (e.g., searching the catalog).</para>\r
- </step> \r
- </procedure> \r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<chapter xml:id="z3950" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
- <info>\r
- <title><systemitem class="protocol">SRU</systemitem> and <systemitem class="protocol">Z39.50</systemitem> Server</title>\r
- </info>\r
- <para>Evergreen is extremely scalable and can serve the need of a large range of libraries. The specific requirements and configuration of your system should be determined based on your \r
- specific needs of your organization or consortium.</para>\r
- <section xml:id="Testing_SRU_yaz-client">\r
- <info>\r
- <title>Testing SRU with yaz-client</title><indexterm><primary>yaz</primary></indexterm>\r
- </info> \r
- <para>yaz-client is installed as a part of Index Data's YAZ software. Recent versions include support for querying <systemitem class="protocol">SRU</systemitem> servers. \r
- Evergreen ships an <systemitem class="protocol">SRU</systemitem> configuration <indexterm><primary>SRU</primary></indexterm>\r
- that works out of the box. To search Evergreen with yaz-client, choose the <emphasis>GET</emphasis> query method and issue the <command>find</command> command. \r
- In the following example, we connect to the Evergreen test server <systemitem class="domainname">dev.gapines.org</systemitem> - substitute this hostname with your own \r
- Evergreen server hostname:</para>\r
- <note><para>Some older versions of yaz-client have known issues with <systemitem class="protocol">SRU</systemitem>. Ensure that you are using the latest edition of yaz from \r
- <link xlink:href="http://www.indexdata.com/yaz">http://www.indexdata.com/yaz</link>.</para></note>\r
- <screen><userinput>$ yaz-client http://dev.gapines.org/opac/extras/sru</userinput></screen>\r
- <screen><prompt>Z></prompt> <userinput>sru GET 1.1</userinput></screen>\r
- <screen><prompt>Z></prompt> <userinput>find hemingway</userinput></screen>\r
- \r
- <para>If your database has records that match that term, you will get the corresponding <systemitem>MARCXML</systemitem> records \r
- in your response from yaz-client.</para><indexterm><primary>MARCXML</primary></indexterm>\r
- <para>Here's what the SRU request looks like as sent to the Evergreen web server:</para>\r
- <screen><userinput>GET /opac/extras/sru?version=1.1&operation=searchRetrieve&query=hemingway&maximumRecords=0</userinput></screen>\r
- <para>You can see what the response looks like by hitting the same URL in your Web browser: \r
- <ulink url="http://dev.gapines.org/opac/extras/sru?version=1.1&operation=searchRetrieve&query=hemingway&maximumRecords=0">\r
- http://dev.gapines.org/opac/extras/sru?version=1.1&operation=searchRetrieve&query=hemingway&maximumRecords=0</ulink>\r
- <systemitem>CQL</systemitem> queries</para>\r
- <para>Evergreen supports some <systemitem>CQL</systemitem> <indexterm><primary>CQL</primary></indexterm> index-sets for advanced queries such as a subset of \r
- <systemitem>Dublin Core</systemitem> (DC) elements. Those DC elements that are \r
- supported map to Evergreen default indexes as follows:</para><indexterm><primary>Dublin Core</primary></indexterm>\r
- <informaltable xml:id="dc_elements"> \r
- <tgroup cols="2">\r
- <colspec colnum="1" colname="element" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="EGindex" colwidth="1.0*"/>\r
- <thead>\r
- <row>\r
- <entry>DC element </entry>\r
- <entry>Evergreen index</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- <row>\r
- <entry>title</entry>\r
- <entry>title</entry> \r
- </row>\r
- <row>\r
- <entry>creator </entry>\r
- <entry>author</entry> \r
- </row>\r
- <row>\r
- <entry>contributor</entry>\r
- <entry>author</entry> \r
- </row>\r
- <row>\r
- <entry>publisher</entry>\r
- <entry>keyword</entry> \r
- </row>\r
- <row>\r
- <entry>subject</entry>\r
- <entry>subject</entry> \r
- </row>\r
- <row>\r
- <entry>identifier</entry>\r
- <entry>keyword</entry> \r
- </row>\r
- <row>\r
- <entry>type</entry>\r
- <entry>none</entry> \r
- </row>\r
- <row>\r
- <entry>format</entry>\r
- <entry>none</entry> \r
- </row>\r
- <row>\r
- <entry>language</entry>\r
- <entry>lang</entry> \r
- </row>\r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>Here are a few examples of <systemitem class="protocol">SRU</systemitem> searches against some of these indexes:</para>\r
- <itemizedlist>\r
- <listitem>dc.title all <quote>complete dinosaur</quote></listitem>\r
- <listitem>dc.subject all <quote>britain france</quote></listitem>\r
- <listitem>dc.title exact <quote>The Empire Strikes Back</quote></listitem>\r
- <listitem>dc.author=king and dc.title=zone</listitem>\r
- </itemizedlist>\r
- </section>\r
- <section xml:id="Z3950serversupport">\r
- <info>\r
- <title>Setting up <systemitem class="protocol">Z39.50</systemitem> server support</title><indexterm><primary>Z39.50</primary></indexterm>\r
- </info> \r
-\r
- <note><para>You must have Evergreen's <systemitem class="protocol">SRU</systemitem> server running before you can enable <systemitem>Z39.50</systemitem> server support.</para>\r
- </note> \r
- <para>This support uses an <systemitem class="protocol">Z39.50</systemitem>-to-<systemitem class="protocol">SRU</systemitem> translator service supplied \r
- by the <systemitem>Net::Z3950::Simple2ZOOM</systemitem><indexterm><primary>Simple2ZOOM</primary></indexterm> Perl module to enable Evergreen to act as a <systemitem class="protocol">Z39.50</systemitem> server. \r
- You could run the <systemitem class="protocol">Z39.50</systemitem> server on a different machine. It just needs to be able to connect to the \r
- Evergreen <systemitem class="protocol">SRU</systemitem> server.</para>\r
- <procedure>\r
- <title>Setting up the <systemitem class="protocol">Z39.50</systemitem> server</title>\r
- <step>\r
- <para>Install a recent version of yaz (the Makefile.install should have installed a suitable version).</para></step>\r
- <step>\r
- <para>Install <systemitem>Net::Z3950::Simple2ZOOM</systemitem> (<userinput>sudo cpan Net::Z3950::Simple2ZOOM</userinput>)</para></step>\r
- <step>\r
- <para>Create a <systemitem class="daemon">Simple2ZOOM</systemitem> configuration file. Something like the following is a good start, and is \r
- based on the <systemitem class="daemon">Simple2ZOOM</systemitem> \r
- documentation example. We'll name the file <filename>dgo.conf</filename> for our example:</para> \r
-<programlisting>\r
-<client>\r
- <database name="gapines">\r
- <zurl>http://dev.gapines.org/opac/extras/sru</zurl>\r
- <option name="sru">get</option>\r
- <charset>marc-8</charset>\r
- <search>\r
- <querytype>cql</querytype>\r
- <map use="4"><index>eg.title</index></map>\r
- <map use="7"><index>eg.keyword</index></map>\r
- <map use="8"><index>eg.keyword</index></map>\r
- <map use="21"><index>eg.subject</index></map>\r
- <map use="1003"><index>eg.author</index></map>\r
- <map use="1018"><index>eg.publisher</index></map>\r
- <map use="1035"><index>eg.keyword</index></map>\r
- <map use="1016"><index>eg.keyword</index></map>\r
- </search>\r
- </database>\r
-</client>\r
-</programlisting>\r
- <para>You can have multiple <database> sections in a single file, each pointing to a different scope of your consortium. The name attribute on \r
- the <database> element is used in your <systemitem class="protocol">Z39.50</systemitem> connection string to name the database. The \r
- <systemitem><zurl></systemitem> element must point to \r
- <uri>http://hostname/opac/extras/sru</uri>. As of Evergreen 1.6, you can append an optional organization unit shortname for search \r
- scoping purposes, and you can also append <emphasis>/holdings</emphasis> if you want to expose the holdings for any returned records. So your zurl \r
- could be <uri>http://dev.gapines.org/opac/extras/sru/BR1/holdings</uri> to limit the search scope to <emphasis role="bold">BR1</emphasis> and its children, and \r
- to expose its holdings.</para>\r
- </step>\r
- <step>\r
- <para>Run <systemitem class="daemon">simple2ZOOM</systemitem> as a daemon, specifying the configuration files and one or more listener addresses that the \r
- <systemitem class="protocol">Z39.50</systemitem> server will\r
- be accessible on. If you do not specify a port, it will automatically run on port <systemitem>9999</systemitem>. In the following example, \r
- we tell it to listen both to localhost on port <systemitem>2210</systemitem>, and on <systemitem class="domainname">dev.gapines.org</systemitem> \r
- n port <systemitem>210</systemitem>:</para>\r
-<programlisting>\r
- <yazgfs>\r
- <server id="server1">\r
- <retrievalinfo>\r
- <retrieval syntax="xml"/>\r
- <retrieval syntax="marc21">\r
- <backend syntax="xml">\r
- <marc inputformat="xml" outputformat="marc" inputcharset="utf-8" outputcharset="marc-8"/>\r
- </backend>\r
- </retrieval>\r
- </retrievalinfo>\r
- </server>\r
-</yazgfs>\r
-</programlisting>\r
- </step>\r
- <step>\r
- <para>Run <systemitem class="daemon">simple2ZOOM</systemitem> as a daemon, specifying the configuration files and one or more listener addresses that \r
- the <systemitem class="protocol">Z39.50</systemitem> server will be accessible on. \r
- If you do not specify a port, it will automatically run on port <systemitem>9999</systemitem>. In the following example, we tell it to listen both to localhost on port 2210, and on dev.gapines.org on port <systemitem>210</systemitem>:</para>\r
- <screen><userinput>simple2zoom -c dgo.conf -- -f xml2marc-yaz.cfg localhost:2210 dev.gapines.org:210</userinput></screen>\r
- </step> \r
- </procedure>\r
- <para>To test the <systemitem class="protocol">Z39.50</systemitem> server, we can use <application>yaz-client</application> again:</para>\r
-<screen>\r
-yaz-client\r
-Z> open localhost:2210/gapines\r
-Connecting...OK.\r
-Sent initrequest.\r
-Connection accepted by v3 target.\r
-ID : 81/81\r
-Name : Simple2ZOOM Universal Gateway/GFS/YAZ\r
-Version: 1.03/1.128/3.0.34\r
-Options: search present delSet triggerResourceCtrl scan sort namedResultSets\r
-Elapsed: 0.010718\r
-Z> format marcxml\r
-Z> find <quote>dc.title=zone and dc.author=king</quote>\r
-Sent searchRequest.\r
-Received SearchResponse.\r
-Search was a success.\r
-Number of hits: 0, setno 4\r
-records returned: 0\r
-Elapsed: 0.611432\r
-Z> find <quote>dead zone</quote>\r
-Sent searchRequest.\r
-Received SearchResponse.\r
-Search was a success.\r
-Number of hits: 4, setno 5\r
-records returned: 0\r
-Elapsed: 1.555461\r
-Z> show 1\r
-Sent presentRequest (1+1).\r
-Records: 1\r
-[]Record type: XML\r
-<record xmlns:... (rest of record deliberately truncated)\r
-</screen>\r
- </section>\r
-</chapter>\r
-\r
+++ /dev/null
-<?xml version='1.0' encoding='UTF-8'?>\r
-<appendix xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"\r
-xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:id="install_checklist">\r
- <info>\r
- <title>Evergreen Installation Checklist</title>\r
- <abstract>\r
- <para>This appendix is a checklist of things to do to istall and configure Evergreen. It will refer to the necessary chapter with the specific instructions for each item.</para>\r
- </abstract>\r
- </info>\r
- <orderedlist numeration="loweralpha">\r
- <listitem>\r
- <para><link linkend="serversideinstallation-opensrf">Install OpenSRF</link></para><indexterm><primary>OpenSRF</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="serversideinstallation-ubuntudebian">Install Evergreen server software</link></para>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="staffclientinstallation">Install Evergreen staff client</link></para><indexterm><primary>staff client</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="backingup">Establish a back up strategy for Evergreen data and files</link></para>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="configuringPostgreSQL">Configure PostgreSQL for better performance</link></para><indexterm><primary>PostgreSQL</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="logfiles">Configure Evergreen error logging</link></para><indexterm><primary>logs</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="orgtypes">Set up organizational unit types</link></para><indexterm><primary>organizational unit types</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="orgunits">Set up organizational units</link></para><indexterm><primary>organizational units</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="languagesandlocalization">Customize localization and languages</link> (optional)</para><indexterm><primary>localization and languages</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="circmodifiers">Add circ modifiers</link></para><indexterm><primary>circulation modifiers</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="copystatus">Configure copy statuses</link></para><indexterm><primary>copy status</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="catalogingtemplates">Add cataloguing templates</link></para><indexterm><primary>cataloguing </primary><secondary>templates</secondary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="permissions">Add user groups and assign permissions</link></para><indexterm><primary>permissions</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="lsa">Adjust various Local Administration Settings</link></para>\r
- </listitem>\r
- <listitem>\r
- <para>Adjust circulation policies and <link linkend="lsa-group-penalty">penalty threshholds</link> for groups</para><indexterm><primary>penalty threshholds</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="admin-staff_accounts">Add staff users</link></para>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="Customizing_OPAC">Customize OPAC</link> as needed</para><indexterm><primary>OPAC</primary><secondary>customizing</secondary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="migratingdata">Import data</link></para><indexterm><primary>migrating</primary><secondary>importing data</secondary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="report_starting_reporter_service">Start the reporter service and set up reports</link> \r
- <indexterm><primary>reports</primary><secondary>starting</secondary></indexterm></para>\r
- \r
- </listitem>\r
- <listitem>\r
- <para><link linkend="notifications">Set up email notifications for holds and overdue items</link></para><indexterm><primary>notifications</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="actiontriggers">Set up action triggers</link></para><indexterm><primary>action triggers</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="z3950">Set up Z39.50 server</link> (optional)</para><indexterm><primary>Z39.50</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="relevancyrankings">Adjust search relevancy settings</link> if required (optional)</para><indexterm><primary>search relevancy</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="sipserver">Install SIP server</link> (optional) - for communications with automated devices such as self check stations, autmated sorters and other devices using SIP</para><indexterm><primary>SIP</primary></indexterm>\r
- </listitem>\r
- </orderedlist>\r
-</appendix>\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" ?>\r
-<chapter id="databaseschema">\r
- <title>Database Schema</title>\r
- <para>This is the schema for the Evergreen database.</para>\r
- \r
- <section id="acq.schema">\r
- <title>Schema acq</title>\r
- \r
- <simplesect id="acq.table.acq-lineitem-history" xreflabel="acq.acq_lineitem_history"> \r
- <title>acq_lineitem_history</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>audit_id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>selector</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>provider</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>purchase_order</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>picklist</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>expected_recv_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>marc</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>eg_bib_id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source_label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>state</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cancel_reason</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>estimated_unit_price</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>claim_policy</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.view.acq-lineitem-lifecycle" xreflabel="acq.acq_lineitem_lifecycle"> \r
- <title>acq_lineitem_lifecycle</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>?column?</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>selector</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>provider</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>purchase_order</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>picklist</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>expected_recv_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>marc</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>eg_bib_id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source_label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>state</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cancel_reason</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>estimated_unit_price</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>claim_policy</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.acq-purchase-order-history" xreflabel="acq.acq_purchase_order_history"> \r
- <title>acq_purchase_order_history</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>audit_id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ordering_agency</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>provider</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>state</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>order_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cancel_reason</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>prepayment_required</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.view.acq-purchase-order-lifecycle" xreflabel="acq.acq_purchase_order_lifecycle"> \r
- <title>acq_purchase_order_lifecycle</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>?column?</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ordering_agency</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>provider</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>state</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>order_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cancel_reason</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>prepayment_required</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.view.all-fund-allocation-total" xreflabel="acq.all_fund_allocation_total"> \r
- <title>all_fund_allocation_total</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.view.all-fund-combined-balance" xreflabel="acq.all_fund_combined_balance"> \r
- <title>all_fund_combined_balance</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.view.all-fund-encumbrance-total" xreflabel="acq.all_fund_encumbrance_total"> \r
- <title>all_fund_encumbrance_total</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.view.all-fund-spent-balance" xreflabel="acq.all_fund_spent_balance"> \r
- <title>all_fund_spent_balance</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.view.all-fund-spent-total" xreflabel="acq.all_fund_spent_total"> \r
- <title>all_fund_spent_total</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.cancel-reason" xreflabel="acq.cancel_reason"> \r
- <title>cancel_reason</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>org_unit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>keep_debits</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.lineitem via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem-detail"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.purchase-order"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.user-request"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.claim" xreflabel="acq.claim"> \r
- <title>claim</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.claim-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>lineitem_detail</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.lineitem-detail"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.claim_event via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.claim-event"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.claim-event" xreflabel="acq.claim_event"> \r
- <title>claim_event</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.claim-event-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>claim</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.claim"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>event_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.claim-event-type" xreflabel="acq.claim_event_type"> \r
- <title>claim_event_type</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>org_unit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>library_initiated</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.claim_event via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.claim-event"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.claim-policy-action"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.serial-claim-event"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.claim-policy" xreflabel="acq.claim_policy"> \r
- <title>claim_policy</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>org_unit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.claim_policy_action via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.claim-policy-action"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.provider"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.claim-policy-action" xreflabel="acq.claim_policy_action"> \r
- <title>claim_policy_action</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>claim_policy</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.claim-policy"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>action_interval</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>action</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.claim-event-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.claim-type" xreflabel="acq.claim_type"> \r
- <title>claim_type</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>org_unit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.claim via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.claim"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.serial-claim"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.currency-type" xreflabel="acq.currency_type"> \r
- <title>currency_type</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.exchange_rate via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.exchange-rate"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.fund"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.fund-debit"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.funding-source"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.provider"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.debit-attribution" xreflabel="acq.debit_attribution"> \r
- <title>debit_attribution</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fund_debit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.fund-debit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>debit_amount</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>funding_source_credit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.funding-source-credit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>credit_amount</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.distribution-formula" xreflabel="acq.distribution_formula"> \r
- <title>distribution_formula</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>skip_count</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.distribution_formula_application via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.distribution-formula-application"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.distribution-formula-entry"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.distribution-formula-application" xreflabel="acq.distribution_formula_application"> \r
- <title>distribution_formula_application</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>formula</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.distribution-formula"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>lineitem</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.lineitem"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.distribution-formula-entry" xreflabel="acq.distribution_formula_entry"> \r
- <title>distribution_formula_entry</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>formula</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.distribution-formula"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>position</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item_count</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>location</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="asset.table.copy-location"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on distribution_formula_entry</title>\r
- \r
- <varlistentry>\r
- <term>acqdfe_must_be_somewhere</term>\r
- <listitem><para>CHECK (((owning_lib IS NOT NULL) OR (location IS NOT NULL)))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.edi-account" xreflabel="acq.edi_account"> \r
- <title>edi_account</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('config.remote_account_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>host</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>username</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>password</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>account</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>path</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_activity</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>provider</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.provider"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>in_dir</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>vendcode</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>vendacct</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.edi_message via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.edi-message"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.provider"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.edi-message" xreflabel="acq.edi_message"> \r
- <title>edi_message</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>account</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.edi-account"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>remote_file</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>translate_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>process_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>error_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>status</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'new'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edi</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>jedi</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>error</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>purchase_order</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.purchase-order"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>message_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on edi_message</title>\r
- \r
- <varlistentry>\r
- <term>status_value</term>\r
- <listitem><para>CHECK ((status = ANY (ARRAY['new'::text, 'translated'::text, 'trans_error'::text, 'processed'::text, 'proc_error'::text, 'delete_error'::text, 'retry'::text, 'complete'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- \r
- \r
- <varlistentry>\r
- <term>valid_message_type</term>\r
- <listitem><para>CHECK ((message_type = ANY (ARRAY['ORDERS'::text, 'ORDRSP'::text, 'INVOIC'::text, 'OSTENQ'::text, 'OSTRPT'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.exchange-rate" xreflabel="acq.exchange_rate"> \r
- <title>exchange_rate</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>from_currency</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.currency-type"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>to_currency</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.currency-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ratio</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.fiscal-calendar" xreflabel="acq.fiscal_calendar"> \r
- <title>fiscal_calendar</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.fiscal_year via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.fiscal-year"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.org-unit"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.fiscal-year" xreflabel="acq.fiscal_year"> \r
- <title>fiscal_year</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>calendar</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- UNIQUE#2\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.fiscal-calendar"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>year</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>year_begin</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#2\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>year_end</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.fund" xreflabel="acq.fund"> \r
- <title>fund</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>org</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#2\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>year</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#2\r
- ;\r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT date_part('year'::text, now());\r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>currency_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.currency-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#2\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>rollover</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>propagate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>active</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>balance_warning_percent</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>balance_stop_percent</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on fund</title>\r
- \r
- <varlistentry>\r
- <term>acq_fund_rollover_ implies_propagate</term>\r
- <listitem><para>CHECK ((propagate OR (NOT rollover)))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.fund_allocation via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.fund-allocation"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.fund-debit"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.fund-tag-map"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.fund-transfer"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.invoice-item"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem-detail"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.po-item"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.fund-allocation" xreflabel="acq.fund_allocation"> \r
- <title>fund_allocation</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>funding_source</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.funding-source"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.fund"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>allocator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.fund-allocation-percent" xreflabel="acq.fund_allocation_percent"> \r
- <title>fund_allocation_percent</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>funding_source</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.funding-source"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>org</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fund_code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>percent</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>allocator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on fund_allocation_percent</title>\r
- \r
- <varlistentry>\r
- <term>percentage_range</term>\r
- <listitem><para>CHECK (((percent >= (0)::numeric) AND (percent <= (100)::numeric)))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.view.fund-allocation-total" xreflabel="acq.fund_allocation_total"> \r
- <title>fund_allocation_total</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric(100,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.view.fund-combined-balance" xreflabel="acq.fund_combined_balance"> \r
- <title>fund_combined_balance</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.fund-debit" xreflabel="acq.fund_debit"> \r
- <title>fund_debit</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.fund"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>origin_amount</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>origin_currency_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.currency-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>encumbrance</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>debit_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xfer_destination</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.fund"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.debit_attribution via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.debit-attribution"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.invoice-item"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem-detail"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.po-item"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.view.fund-debit-total" xreflabel="acq.fund_debit_total"> \r
- <title>fund_debit_total</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>encumbrance</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.view.fund-encumbrance-total" xreflabel="acq.fund_encumbrance_total"> \r
- <title>fund_encumbrance_total</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.view.fund-spent-balance" xreflabel="acq.fund_spent_balance"> \r
- <title>fund_spent_balance</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.view.fund-spent-total" xreflabel="acq.fund_spent_total"> \r
- <title>fund_spent_total</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.fund-tag" xreflabel="acq.fund_tag"> \r
- <title>fund_tag</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.fund_tag_map via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.fund-tag-map"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.fund-tag-map" xreflabel="acq.fund_tag_map"> \r
- <title>fund_tag_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.fund"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>tag</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.fund-tag"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.fund-transfer" xreflabel="acq.fund_transfer"> \r
- <title>fund_transfer</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>src_fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.fund"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>src_amount</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dest_fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.fund"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dest_amount</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>transfer_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>transfer_user</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>funding_source_credit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.funding-source-credit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.funding-source" xreflabel="acq.funding_source"> \r
- <title>funding_source</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>currency_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.currency-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.fund_allocation via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.fund-allocation"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.fund-allocation-percent"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.funding-source-credit"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.view.funding-source-allocation-total" xreflabel="acq.funding_source_allocation_total"> \r
- <title>funding_source_allocation_total</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>funding_source</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric(100,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.view.funding-source-balance" xreflabel="acq.funding_source_balance"> \r
- <title>funding_source_balance</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>funding_source</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric(100,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.funding-source-credit" xreflabel="acq.funding_source_credit"> \r
- <title>funding_source_credit</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>funding_source</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.funding-source"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deadline_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>effective_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.debit_attribution via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.debit-attribution"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.fund-transfer"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.view.funding-source-credit-total" xreflabel="acq.funding_source_credit_total"> \r
- <title>funding_source_credit_total</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>funding_source</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.invoice" xreflabel="acq.invoice"> \r
- <title>invoice</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>receiver</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>provider</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.provider"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>shipper</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.provider"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recv_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recv_method</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'EDI'::text;\r
- \r
- \r
- \r
- <xref linkend="acq.table.invoice-method"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>inv_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>inv_ident</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_auth</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_method</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.invoice-payment-method"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>complete</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.invoice_entry via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.invoice-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.invoice-item"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.invoice-entry" xreflabel="acq.invoice_entry"> \r
- <title>invoice_entry</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>invoice</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.invoice"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>purchase_order</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.purchase-order"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>lineitem</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.lineitem"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>inv_item_count</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>phys_item_count</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>billed_per_item</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cost_billed</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>actual_cost</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount_paid</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.invoice-item" xreflabel="acq.invoice_item"> \r
- <title>invoice_item</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>invoice</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.invoice"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>purchase_order</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.purchase-order"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fund_debit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.fund-debit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>inv_item_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.invoice-item-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>author</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cost_billed</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>actual_cost</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.fund"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount_paid</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>po_item</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.po-item"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.invoice-item-type" xreflabel="acq.invoice_item_type"> \r
- <title>invoice_item_type</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>prorate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.invoice_item via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.invoice-item"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.po-item"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.invoice-method" xreflabel="acq.invoice_method"> \r
- <title>invoice_method</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.invoice via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.invoice"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.invoice-payment-method" xreflabel="acq.invoice_payment_method"> \r
- <title>invoice_payment_method</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.invoice via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.invoice"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.lineitem" xreflabel="acq.lineitem"> \r
- <title>lineitem</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>selector</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>provider</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.provider"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>purchase_order</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.purchase-order"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>picklist</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.picklist"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>expected_recv_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>marc</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>eg_bib_id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source_label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>state</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'new'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cancel_reason</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.cancel-reason"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>estimated_unit_price</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>claim_policy</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.claim-policy"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on lineitem</title>\r
- \r
- <varlistentry>\r
- <term>picklist_or_po</term>\r
- <listitem><para>CHECK (((picklist IS NOT NULL) OR (purchase_order IS NOT NULL)))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.distribution_formula_application via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.distribution-formula-application"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.invoice-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem-attr"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem-detail"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem-note"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.user-request"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.lineitem-alert-text" xreflabel="acq.lineitem_alert_text"> \r
- <title>lineitem_alert_text</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.lineitem_note via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem-note"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.lineitem-attr" xreflabel="acq.lineitem_attr"> \r
- <title>lineitem_attr</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>definition</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>lineitem</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.lineitem"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>attr_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>attr_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>attr_value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.lineitem-attr-definition" xreflabel="acq.lineitem_attr_definition"> \r
- <title>lineitem_attr_definition</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>remove</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT ''::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.lineitem-detail" xreflabel="acq.lineitem_detail"> \r
- <title>lineitem_detail</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>lineitem</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.lineitem"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.fund"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fund_debit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.fund-debit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>eg_copy_id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>barcode</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cn_label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>collection_code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_modifier</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.circ-modifier"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>location</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="asset.table.copy-location"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recv_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cancel_reason</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.cancel-reason"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.claim via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.claim"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.lineitem-generated-attr-definition" xreflabel="acq.lineitem_generated_attr_definition"> \r
- <title>lineitem_generated_attr_definition</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('acq.lineitem_attr_definition_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>remove</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT ''::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xpath</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.lineitem-local-attr-definition" xreflabel="acq.lineitem_local_attr_definition"> \r
- <title>lineitem_local_attr_definition</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('acq.lineitem_attr_definition_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>remove</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT ''::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.lineitem-marc-attr-definition" xreflabel="acq.lineitem_marc_attr_definition"> \r
- <title>lineitem_marc_attr_definition</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('acq.lineitem_attr_definition_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>remove</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT ''::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xpath</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.lineitem-note" xreflabel="acq.lineitem_note"> \r
- <title>lineitem_note</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>lineitem</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.lineitem"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>alert_text</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.lineitem-alert-text"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>vendor_public</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.lineitem-provider-attr-definition" xreflabel="acq.lineitem_provider_attr_definition"> \r
- <title>lineitem_provider_attr_definition</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('acq.lineitem_attr_definition_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>remove</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT ''::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xpath</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>provider</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.provider"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.lineitem-usr-attr-definition" xreflabel="acq.lineitem_usr_attr_definition"> \r
- <title>lineitem_usr_attr_definition</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('acq.lineitem_attr_definition_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>remove</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT ''::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.view.ordered-funding-source-credit" xreflabel="acq.ordered_funding_source_credit"> \r
- <title>ordered_funding_source_credit</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>sort_priority</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>sort_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>funding_source</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.picklist" xreflabel="acq.picklist"> \r
- <title>picklist</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>org_unit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.lineitem via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.po-item" xreflabel="acq.po_item"> \r
- <title>po_item</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>purchase_order</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.purchase-order"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fund_debit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.fund-debit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>inv_item_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.invoice-item-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>author</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>estimated_cost</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.fund"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.invoice_item via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.invoice-item"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.po-note" xreflabel="acq.po_note"> \r
- <title>po_note</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>purchase_order</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.purchase-order"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>vendor_public</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.provider" xreflabel="acq.provider"> \r
- <title>provider</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#2\r
- ;\r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>currency_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.currency-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#2\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holding_tag</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>san</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edi_default</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.edi-account"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>active</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>prepayment_required</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>url</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>email</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>phone</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fax_phone</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>default_claim_policy</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.claim-policy"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.edi_account via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.edi-account"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.invoice"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem-provider-attr-definition"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.provider-address"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.provider-contact"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.provider-holding-subfield-map"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.provider-note"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.purchase-order"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.provider-address" xreflabel="acq.provider_address"> \r
- <title>provider_address</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>valid</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>address_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>provider</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.provider"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>street1</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>street2</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>city</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>county</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>state</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>country</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>post_code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fax_phone</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.provider-contact" xreflabel="acq.provider_contact"> \r
- <title>provider_contact</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>provider</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.provider"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>role</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>email</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>phone</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.provider_contact_address via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.provider-contact-address"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.provider-contact-address" xreflabel="acq.provider_contact_address"> \r
- <title>provider_contact_address</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>valid</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>address_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>contact</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.provider-contact"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>street1</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>street2</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>city</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>county</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>state</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>country</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>post_code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fax_phone</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.provider-holding-subfield-map" xreflabel="acq.provider_holding_subfield_map"> \r
- <title>provider_holding_subfield_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>provider</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.provider"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>subfield</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.provider-note" xreflabel="acq.provider_note"> \r
- <title>provider_note</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>provider</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.provider"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.purchase-order" xreflabel="acq.purchase_order"> \r
- <title>purchase_order</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ordering_agency</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>provider</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.provider"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>state</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'new'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>order_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cancel_reason</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.cancel-reason"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>prepayment_required</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.edi_message via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.edi-message"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.invoice-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.invoice-item"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.po-item"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.po-note"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.serial-claim" xreflabel="acq.serial_claim"> \r
- <title>serial_claim</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.claim-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="serial.table.item"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.serial_claim_event via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.serial-claim-event"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.serial-claim-event" xreflabel="acq.serial_claim_event"> \r
- <title>serial_claim_event</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.claim-event-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>claim</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.serial-claim"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>event_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.user-request" xreflabel="acq.user_request"> \r
- <title>user_request</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>hold</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pickup_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holdable_formats</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>phone_notify</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>email_notify</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>lineitem</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.lineitem"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>eg_bib</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>request_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>need_before</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_fee</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>request_type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.user-request-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>isxn</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>volume</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>author</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>article_title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>article_pages</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>publisher</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>location</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pubdate</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>mentioned</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>other_info</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cancel_reason</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="acq.table.cancel-reason"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="acq.table.user-request-type" xreflabel="acq.user_request_type"> \r
- <title>user_request_type</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.user_request via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.user-request"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="action.schema">\r
- <title>Schema action</title>\r
- \r
- <simplesect id="action.table.aged-circulation" xreflabel="action.aged_circulation"> \r
- <title>aged_circulation</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>usr_post_code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr_home_ou</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr_profile</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr_birth_year</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_call_number</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_location</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_owning_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_bib_record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_start</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_finish</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>unrecovered</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target_copy</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>renewal_remaining</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>due_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stop_fines_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>duration</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fine_interval</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recurring_fine</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_fine</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>phone_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>desk_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>duration_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recurring_fine_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_fine_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stop_fines</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>workstation</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_workstation</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_scan_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_circ</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.view.all-circulation" xreflabel="action.all_circulation"> \r
- <title>all_circulation</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr_post_code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr_home_ou</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr_profile</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr_birth_year</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_call_number</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_location</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_owning_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_bib_record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_start</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_finish</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target_copy</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>renewal_remaining</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>due_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stop_fines_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>duration</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fine_interval</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recurring_fine</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_fine</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>phone_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>desk_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>duration_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recurring_fine_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_fine_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stop_fines</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>workstation</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_workstation</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_scan_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_circ</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.view.billable-circulations" xreflabel="action.billable_circulations"> \r
- <title>billable_circulations</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_start</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_finish</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>unrecovered</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target_copy</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>renewal_remaining</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>due_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stop_fines_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>duration</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fine_interval</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recurring_fine</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_fine</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>phone_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>desk_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>duration_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recurring_fine_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_fine_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stop_fines</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>workstation</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_workstation</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_scan_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_circ</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.table.circulation" xreflabel="action.circulation"> \r
- <title>circulation</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('money.billable_xact_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_start</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_finish</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>unrecovered</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target_copy</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>renewal_remaining</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>due_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stop_fines_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>duration</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fine_interval</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT '1 day'::interval;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recurring_fine</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_fine</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>phone_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>desk_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>duration_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recurring_fine_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_fine_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stop_fines</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>workstation</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.workstation"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_workstation</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.workstation"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_scan_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_circ</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="action.table.circulation"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on circulation</title>\r
- \r
- <varlistentry>\r
- <term>circulation_stop_fines_check</term>\r
- <listitem><para>CHECK ((stop_fines = ANY (ARRAY['CHECKIN'::text, 'CLAIMSRETURNED'::text, 'LOST'::text, 'MAXFINES'::text, 'RENEW'::text, 'LONGOVERDUE'::text, 'CLAIMSNEVERCHECKEDOUT'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action.circulation via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action.table.circulation"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.table.fieldset" xreflabel="action.fieldset"> \r
- <title>fieldset</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>status</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creation_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>scheduled_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>applied_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>classname</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stored_query</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.stored-query"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pkey_value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on fieldset</title>\r
- \r
- <varlistentry>\r
- <term>fieldset_one_or_the_other</term>\r
- <listitem><para>CHECK ((((stored_query IS NOT NULL) AND (pkey_value IS NULL)) OR ((pkey_value IS NOT NULL) AND (stored_query IS NULL))))</para></listitem>\r
- </varlistentry>\r
- \r
- \r
- \r
- <varlistentry>\r
- <term>valid_status</term>\r
- <listitem><para>CHECK ((status = ANY (ARRAY['PENDING'::text, 'APPLIED'::text, 'ERROR'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action.fieldset_col_val via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action.table.fieldset-col-val"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.table.fieldset-col-val" xreflabel="action.fieldset_col_val"> \r
- <title>fieldset_col_val</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fieldset</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="action.table.fieldset"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>col</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>val</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.table.hold-copy-map" xreflabel="action.hold_copy_map"> \r
- <title>hold_copy_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>hold</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="action.table.hold-request"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target_copy</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.table.hold-notification" xreflabel="action.hold_notification"> \r
- <title>hold_notification</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>hold</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="action.table.hold-request"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>notify_staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>notify_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>method</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.table.hold-request" xreflabel="action.hold_request"> \r
- <title>hold_request</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>request_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>capture_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fulfillment_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>return_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>prev_check_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>expire_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cancel_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cancel_cause</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="action.table.hold-request-cancel-cause"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cancel_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>current_copy</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fulfillment_staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fulfillment_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>request_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>requestor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>selection_ou</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>selection_depth</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pickup_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>hold_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holdable_formats</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>phone_notify</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>email_notify</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>frozen</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>thaw_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>shelf_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cut_in_line</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>mint_condition</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>shelf_expire_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action.hold_copy_map via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action.table.hold-copy-map"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.hold-notification"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.hold-request-note"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.hold-transit-copy"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.table.hold-request-cancel-cause" xreflabel="action.hold_request_cancel_cause"> \r
- <title>hold_request_cancel_cause</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action.hold_request via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action.table.hold-request"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.table.hold-request-note" xreflabel="action.hold_request_note"> \r
- <title>hold_request_note</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>hold</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="action.table.hold-request"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>body</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>slip</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pub</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>staff</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.table.hold-transit-copy" xreflabel="action.hold_transit_copy"> \r
- <title>hold_transit_copy</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('action.transit_copy_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source_send_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dest_recv_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target_copy</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dest</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>prev_hop</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_status</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>persistant_transfer</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>prev_dest</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>hold</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="action.table.hold-request"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.table.in-house-use" xreflabel="action.in_house_use"> \r
- <title>in_house_use</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>org_unit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>use_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.table.non-cat-in-house-use" xreflabel="action.non_cat_in_house_use"> \r
- <title>non_cat_in_house_use</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item_type</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.non-cataloged-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>org_unit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>use_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.table.non-cataloged-circulation" xreflabel="action.non_cataloged_circulation"> \r
- <title>non_cataloged_circulation</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>patron</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item_type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.non-cataloged-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.view.open-circulation" xreflabel="action.open_circulation"> \r
- <title>open_circulation</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_start</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_finish</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>unrecovered</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target_copy</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>renewal_remaining</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>due_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stop_fines_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>duration</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fine_interval</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recurring_fine</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_fine</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>phone_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>desk_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>duration_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recurring_fine_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_fine_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stop_fines</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>workstation</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_workstation</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_scan_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_circ</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.table.reservation-transit-copy" xreflabel="action.reservation_transit_copy"> \r
- <title>reservation_transit_copy</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('action.transit_copy_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source_send_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dest_recv_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target_copy</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="booking.table.resource"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dest</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>prev_hop</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_status</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>persistant_transfer</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>prev_dest</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>reservation</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="booking.table.reservation"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.table.survey" xreflabel="action.survey"> \r
- <title>survey</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>start_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>end_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT (now() + '10 years'::interval);\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr_summary</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>poll</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>required</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action.survey_question via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action.table.survey-question"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.survey-response"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.table.survey-answer" xreflabel="action.survey_answer"> \r
- <title>survey_answer</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>question</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="action.table.survey-question"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>answer</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action.survey_response via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action.table.survey-response"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.table.survey-question" xreflabel="action.survey_question"> \r
- <title>survey_question</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>survey</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="action.table.survey"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>question</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action.survey_answer via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action.table.survey-answer"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.survey-response"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.table.survey-response" xreflabel="action.survey_response"> \r
- <title>survey_response</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>response_group_id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>survey</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="action.table.survey"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>question</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="action.table.survey-question"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>answer</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="action.table.survey-answer"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>answer_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>effective_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.table.transit-copy" xreflabel="action.transit_copy"> \r
- <title>transit_copy</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source_send_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dest_recv_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target_copy</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dest</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>prev_hop</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="action.table.transit-copy"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_status</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.copy-status"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>persistant_transfer</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>prev_dest</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action.transit_copy via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action.table.transit-copy"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.view.unfulfilled-hold-innermost-loop" xreflabel="action.unfulfilled_hold_innermost_loop"> \r
- <title>unfulfilled_hold_innermost_loop</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>hold</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>count</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.table.unfulfilled-hold-list" xreflabel="action.unfulfilled_hold_list"> \r
- <title>unfulfilled_hold_list</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>current_copy</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>hold</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fail_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.view.unfulfilled-hold-loops" xreflabel="action.unfulfilled_hold_loops"> \r
- <title>unfulfilled_hold_loops</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>hold</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>count</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.view.unfulfilled-hold-max-loop" xreflabel="action.unfulfilled_hold_max_loop"> \r
- <title>unfulfilled_hold_max_loop</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>hold</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action.view.unfulfilled-hold-min-loop" xreflabel="action.unfulfilled_hold_min_loop"> \r
- <title>unfulfilled_hold_min_loop</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>hold</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>min</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="action-trigger.schema">\r
- <title>Schema action_trigger</title>\r
- \r
- <simplesect id="action-trigger.table.cleanup" xreflabel="action_trigger.cleanup"> \r
- <title>cleanup</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>module</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action_trigger.event_definition via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action-trigger.table.event-definition"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action-trigger.table.collector" xreflabel="action_trigger.collector"> \r
- <title>collector</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>module</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action_trigger.environment via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action-trigger.table.environment"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action-trigger.table.environment" xreflabel="action_trigger.environment"> \r
- <title>environment</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>event_def</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="action-trigger.table.event-definition"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>path</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>collector</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="action-trigger.table.collector"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on environment</title>\r
- \r
- <varlistentry>\r
- <term>environment_label_check</term>\r
- <listitem><para>CHECK ((label <> ALL (ARRAY['result'::text, 'target'::text, 'event'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action-trigger.table.event" xreflabel="action_trigger.event"> \r
- <title>event</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>event_def</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="action-trigger.table.event-definition"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>add_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>run_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>start_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>update_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>complete_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>update_process</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>state</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'pending'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>user_data</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>template_output</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="action-trigger.table.event-output"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>error_output</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="action-trigger.table.event-output"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>async_output</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="action-trigger.table.event-output"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on event</title>\r
- \r
- <varlistentry>\r
- <term>event_state_check</term>\r
- <listitem><para>CHECK ((state = ANY (ARRAY['pending'::text, 'invalid'::text, 'found'::text, 'collecting'::text, 'collected'::text, 'validating'::text, 'valid'::text, 'reacting'::text, 'reacted'::text, 'cleaning'::text, 'complete'::text, 'error'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- \r
- \r
- <varlistentry>\r
- <term>event_user_data_check</term>\r
- <listitem><para>CHECK (((user_data IS NULL) OR is_json(user_data)))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action-trigger.table.event-definition" xreflabel="action_trigger.event_definition"> \r
- <title>event_definition</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>active</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#2\r
- ;\r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#2\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>hook</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="action-trigger.table.hook"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>validator</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="action-trigger.table.validator"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>reactor</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="action-trigger.table.reactor"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cleanup_success</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="action-trigger.table.cleanup"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cleanup_failure</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="action-trigger.table.cleanup"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>delay</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT '00:05:00'::interval;\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_delay</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr_field</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opt_in_setting</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.usr-setting-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>delay_field</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>group_field</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>template</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>granularity</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action_trigger.environment via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action-trigger.table.environment"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action-trigger.table.event"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action-trigger.table.event-params"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action-trigger.table.event-output" xreflabel="action_trigger.event_output"> \r
- <title>event_output</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>is_error</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>data</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action_trigger.event via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action-trigger.table.event"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action-trigger.table.event-params" xreflabel="action_trigger.event_params"> \r
- <title>event_params</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>event_def</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="action-trigger.table.event-definition"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>param</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action-trigger.table.hook" xreflabel="action_trigger.hook"> \r
- <title>hook</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>key</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>core_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>passive</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action_trigger.event_definition via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action-trigger.table.event-definition"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action-trigger.table.reactor" xreflabel="action_trigger.reactor"> \r
- <title>reactor</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>module</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action_trigger.event_definition via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action-trigger.table.event-definition"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="action-trigger.table.validator" xreflabel="action_trigger.validator"> \r
- <title>validator</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>module</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action_trigger.event_definition via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action-trigger.table.event-definition"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="actor.schema">\r
- <title>Schema actor</title>\r
- \r
- <simplesect id="actor.table.card" xreflabel="actor.card"> \r
- <title>card</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>barcode</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>active</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.hours-of-operation" xreflabel="actor.hours_of_operation"> \r
- <title>hours_of_operation</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dow_0_open</entry>\r
- <entry>time without time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT '09:00:00'::time without time zone;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dow_0_close</entry>\r
- <entry>time without time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT '17:00:00'::time without time zone;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dow_1_open</entry>\r
- <entry>time without time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT '09:00:00'::time without time zone;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dow_1_close</entry>\r
- <entry>time without time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT '17:00:00'::time without time zone;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dow_2_open</entry>\r
- <entry>time without time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT '09:00:00'::time without time zone;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dow_2_close</entry>\r
- <entry>time without time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT '17:00:00'::time without time zone;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dow_3_open</entry>\r
- <entry>time without time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT '09:00:00'::time without time zone;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dow_3_close</entry>\r
- <entry>time without time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT '17:00:00'::time without time zone;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dow_4_open</entry>\r
- <entry>time without time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT '09:00:00'::time without time zone;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dow_4_close</entry>\r
- <entry>time without time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT '17:00:00'::time without time zone;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dow_5_open</entry>\r
- <entry>time without time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT '09:00:00'::time without time zone;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dow_5_close</entry>\r
- <entry>time without time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT '17:00:00'::time without time zone;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dow_6_open</entry>\r
- <entry>time without time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT '09:00:00'::time without time zone;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dow_6_close</entry>\r
- <entry>time without time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT '17:00:00'::time without time zone;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.org-address" xreflabel="actor.org_address"> \r
- <title>org_address</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>valid</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>address_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'MAILING'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>org_unit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>street1</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>street2</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>city</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>county</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>state</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>country</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>post_code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>san</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing actor.org_unit via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.org-unit"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.org-lasso" xreflabel="actor.org_lasso"> \r
- <title>org_lasso</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing actor.org_lasso_map via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.org-lasso-map"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.org-lasso-map" xreflabel="actor.org_lasso_map"> \r
- <title>org_lasso_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>lasso</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-lasso"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>org_unit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.org-unit" xreflabel="actor.org_unit"> \r
- <title>org_unit</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_ou</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ou_type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ill_address</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-address"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holds_address</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-address"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>mailing_address</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-address"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>billing_address</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-address"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>shortname</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>email</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>phone</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_visible</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fiscal_calendar</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- \r
- <xref linkend="acq.table.fiscal-calendar"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.cancel_reason via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.cancel-reason"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.claim-event-type"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.claim-policy"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.claim-type"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.distribution-formula"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.distribution-formula-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.fund"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.fund-allocation-percent"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.fund-tag"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.funding-source"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.invoice"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem-alert-text"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem-detail"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.picklist"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.provider"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.purchase-order"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.user-request"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.circulation"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.fieldset"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.hold-request"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.in-house-use"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.non-cat-in-house-use"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.non-cataloged-circulation"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.survey"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.transit-copy"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action-trigger.table.event-definition"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.hours-of-operation"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.org-address"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.org-lasso-map"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.org-unit"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.org-unit-closed"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.org-unit-setting"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.stat-cat"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.stat-cat-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.usr"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.usr-org-unit-opt-in"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.usr-standing-penalty"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.workstation"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.call-number"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.copy"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.copy-location"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.copy-location-order"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.copy-template"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.stat-cat"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.stat-cat-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="biblio.table.record-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="booking.table.reservation"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="booking.table.resource"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="booking.table.resource-attr"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="booking.table.resource-attr-value"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="booking.table.resource-type"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="config.table.billing-type"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="config.table.circ-matrix-matchpoint"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="config.table.hold-matrix-matchpoint"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="config.table.idl-field-doc"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="config.table.remote-account"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="money.table.collections-tracker"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="permission.table.grp-penalty-threshold"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="permission.table.usr-work-ou-map"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="reporter.table.output-folder"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="reporter.table.report-folder"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="reporter.table.template-folder"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.distribution"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.record-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.subscription"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.import-bib-trash-fields"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.import-item-attr-definition"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.merge-profile"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.org-unit-closed" xreflabel="actor.org_unit_closed"> \r
- <title>org_unit_closed</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>org_unit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>close_start</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>close_end</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>reason</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.org-unit-proximity" xreflabel="actor.org_unit_proximity"> \r
- <title>org_unit_proximity</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>from_org</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>to_org</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>prox</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.org-unit-setting" xreflabel="actor.org_unit_setting"> \r
- <title>org_unit_setting</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>org_unit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.org-unit-setting-type"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.org-unit-type" xreflabel="actor.org_unit_type"> \r
- <title>org_unit_type</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>depth</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>can_have_vols</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>can_have_users</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing actor.org_unit via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.org-unit"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.org-unit-type"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="config.table.hold-matrix-matchpoint"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.stat-cat" xreflabel="actor.stat_cat"> \r
- <title>stat_cat</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_visible</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr_summary</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing actor.stat_cat_entry via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.stat-cat-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.stat-cat-entry-usr-map"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.stat-cat-entry" xreflabel="actor.stat_cat_entry"> \r
- <title>stat_cat_entry</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stat_cat</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.stat-cat"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.stat-cat-entry-usr-map" xreflabel="actor.stat_cat_entry_usr_map"> \r
- <title>stat_cat_entry_usr_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stat_cat_entry</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stat_cat</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.stat-cat"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target_usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.usr" xreflabel="actor.usr"> \r
- <title>usr</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>card</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>profile</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="permission.table.grp-tree"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usrname</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>email</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>passwd</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>standing</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- \r
- <xref linkend="config.table.standing"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident_type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.identification-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident_value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident_type2</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.identification-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident_value2</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>net_access_level</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- \r
- <xref linkend="config.table.net-access-level"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>photo_url</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>prefix</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>first_given_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>second_given_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>family_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>suffix</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>alias</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>day_phone</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>evening_phone</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>other_phone</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>mailing_address</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr-address"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>billing_address</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr-address"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>home_ou</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dob</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>active</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>master_account</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>super_user</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>barred</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deleted</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>juvenile</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usrgroup</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>claims_returned_count</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>credit_forward_balance</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 0.00;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_xact_id</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'none'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>alert_message</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>expire_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT (now() + '3 years'::interval);\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>claims_never_checked _out_count</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.claim_event via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.claim-event"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.distribution-formula-application"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.fund-allocation"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.fund-allocation-percent"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.fund-transfer"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem-note"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem-usr-attr-definition"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.picklist"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.po-note"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.provider-note"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.purchase-order"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.serial-claim-event"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.user-request"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.circulation"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.fieldset"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.hold-notification"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.hold-request"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.in-house-use"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.non-cat-in-house-use"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.non-cataloged-circulation"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.card"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.stat-cat-entry-usr-map"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.usr-address"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.usr-note"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.usr-org-unit-opt-in"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.usr-password-reset"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.usr-saved-search"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.usr-setting"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.usr-standing-penalty"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.call-number"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.call-number-note"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.copy"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.copy-note"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.copy-template"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="biblio.table.record-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="biblio.table.record-note"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="booking.table.reservation"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="container.table.biblio-record-entry-bucket"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="container.table.call-number-bucket"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="container.table.copy-bucket"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="container.table.user-bucket"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="container.table.user-bucket-item"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="money.table.billable-xact"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="money.table.collections-tracker"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="permission.table.usr-grp-map"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="permission.table.usr-object-perm-map"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="permission.table.usr-perm-map"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="permission.table.usr-work-ou-map"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="reporter.table.output-folder"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="reporter.table.report"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="reporter.table.report-folder"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="reporter.table.schedule"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="reporter.table.template"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="reporter.table.template-folder"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.distribution-note"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.issuance"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.item"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.item-note"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.routing-list-user"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.subscription-note"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.unit"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.queue"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.usr-address" xreflabel="actor.usr_address"> \r
- <title>usr_address</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>valid</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>within_city_limits</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>address_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'MAILING'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>street1</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>street2</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>city</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>county</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>state</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>country</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>post_code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pending</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>replaces</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr-address"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing actor.usr via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.usr"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.usr-address"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.usr-note" xreflabel="actor.usr_note"> \r
- <title>usr_note</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pub</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.usr-org-unit-opt-in" xreflabel="actor.usr_org_unit_opt_in"> \r
- <title>usr_org_unit_opt_in</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>org_unit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opt_in_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opt_in_ws</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.workstation"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.usr-password-reset" xreflabel="actor.usr_password_reset"> \r
- <title>usr_password_reset</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>uuid</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>request_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>has_been_reset</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.usr-saved-search" xreflabel="actor.usr_saved_search"> \r
- <title>usr_saved_search</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>query_text</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>query_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'URL'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on usr_saved_search</title>\r
- \r
- <varlistentry>\r
- <term>valid_query_text</term>\r
- <listitem><para>CHECK ((query_type = 'URL'::text))</para></listitem>\r
- </varlistentry>\r
- \r
- \r
- \r
- <varlistentry>\r
- <term>valid_target</term>\r
- <listitem><para>CHECK ((target = ANY (ARRAY['record'::text, 'metarecord'::text, 'callnumber'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.usr-setting" xreflabel="actor.usr_setting"> \r
- <title>usr_setting</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.usr-setting-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.usr-standing-penalty" xreflabel="actor.usr_standing_penalty"> \r
- <title>usr_standing_penalty</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>org_unit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>standing_penalty</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.standing-penalty"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>set_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stop_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="actor.table.workstation" xreflabel="actor.workstation"> \r
- <title>workstation</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action.circulation via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action.table.circulation"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.usr-org-unit-opt-in"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="money.table.bnm-desk-payment"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="asset.schema">\r
- <title>Schema asset</title>\r
- \r
- <simplesect id="asset.table.call-number" xreflabel="asset.call_number"> \r
- <title>call_number</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deleted</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label_class</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- \r
- <xref linkend="asset.table.call-number-class"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label_sortkey</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing asset.call_number_note via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.call-number-note"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.copy"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.uri-call-number-map"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="container.table.call-number-bucket-item"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.distribution"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.unit"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="asset.table.call-number-class" xreflabel="asset.call_number_class"> \r
- <title>call_number_class</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>normalizer</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'asset.normalize_generic'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>field</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT '050ab, 055ab, 060ab, 070ab, 080ab, 082ab, 086ab, 088ab, 090, 092, 096, 098, \r
- 099 '::text; \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing asset.call_number via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.call-number"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="asset.table.call-number-note" xreflabel="asset.call_number_note"> \r
- <title>call_number_note</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>call_number</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="asset.table.call-number"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pub</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="asset.table.copy" xreflabel="asset.copy"> \r
- <title>copy</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>call_number</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="asset.table.call-number"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_number</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>status</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.copy-status"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>location</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- \r
- <xref linkend="asset.table.copy-location"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>loan_duration</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fine_level</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>age_protect</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circulate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deposit</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ref</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holdable</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deposit_amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 0.00;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>price</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>barcode</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_modifier</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.circ-modifier"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_as_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dummy_title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dummy_author</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>alert_message</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_visible</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deleted</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>floating</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dummy_isbn</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>status_changed_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>mint_condition</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cost</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on copy</title>\r
- \r
- <varlistentry>\r
- <term>copy_fine_level_check</term>\r
- <listitem><para>CHECK ((fine_level = ANY (ARRAY[1, 2, 3])))</para></listitem>\r
- </varlistentry>\r
- \r
- \r
- \r
- <varlistentry>\r
- <term>copy_loan_duration_check</term>\r
- <listitem><para>CHECK ((loan_duration = ANY (ARRAY[1, 2, 3])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing asset.copy_note via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.copy-note"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="container.table.copy-bucket-item"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="asset.table.copy-location" xreflabel="asset.copy_location"> \r
- <title>copy_location</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holdable</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>hold_verify</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_visible</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circulate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label_prefix</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label_suffix</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.distribution_formula_entry via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.distribution-formula-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem-detail"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.copy"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.copy-location-order"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.copy-template"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="asset.table.copy-location-order" xreflabel="asset.copy_location_order"> \r
- <title>copy_location_order</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>location</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="asset.table.copy-location"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>org</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>position</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="asset.table.copy-note" xreflabel="asset.copy_note"> \r
- <title>copy_note</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_copy</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="asset.table.copy"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pub</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="asset.table.copy-template" xreflabel="asset.copy_template"> \r
- <title>copy_template</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>status</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.copy-status"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>location</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="asset.table.copy-location"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>loan_duration</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fine_level</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>age_protect</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circulate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deposit</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ref</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holdable</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deposit_amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>price</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_modifier</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_as_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>alert_message</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_visible</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>floating</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>mint_condition</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on copy_template</title>\r
- \r
- <varlistentry>\r
- <term>valid_fine_level</term>\r
- <listitem><para>CHECK (((fine_level IS NULL) OR (loan_duration = ANY (ARRAY[1, 2, 3]))))</para></listitem>\r
- </varlistentry>\r
- \r
- \r
- \r
- <varlistentry>\r
- <term>valid_loan_duration</term>\r
- <listitem><para>CHECK (((loan_duration IS NULL) OR (loan_duration = ANY (ARRAY[1, 2, 3]))))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing serial.distribution via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.distribution"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="asset.table.opac-visible-copies" xreflabel="asset.opac_visible_copies"> \r
- <title>opac_visible_copies</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="asset.table.stat-cat" xreflabel="asset.stat_cat"> \r
- <title>stat_cat</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_visible</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>required</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing asset.stat_cat_entry via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.stat-cat-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.stat-cat-entry-copy-map"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="asset.table.stat-cat-entry" xreflabel="asset.stat_cat_entry"> \r
- <title>stat_cat_entry</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stat_cat</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="asset.table.stat-cat"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing asset.stat_cat_entry_copy_map via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.stat-cat-entry-copy-map"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="asset.table.stat-cat-entry-copy-map" xreflabel="asset.stat_cat_entry_copy_map"> \r
- <title>stat_cat_entry_copy_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stat_cat</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="asset.table.stat-cat"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stat_cat_entry</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="asset.table.stat-cat-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_copy</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="asset.table.stat-cat-entry-transparency-map" xreflabel="asset.stat_cat_entry_transparency_map"> \r
- <title>stat_cat_entry_transparency_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stat_cat</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stat_cat_entry</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_transparency</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="asset.table.uri" xreflabel="asset.uri"> \r
- <title>uri</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>href</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>use_restriction</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>active</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing asset.uri_call_number_map via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.uri-call-number-map"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.item"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="asset.table.uri-call-number-map" xreflabel="asset.uri_call_number_map"> \r
- <title>uri_call_number_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>uri</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="asset.table.uri"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>call_number</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="asset.table.call-number"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="auditor.schema">\r
- <title>Schema auditor</title>\r
- \r
- <simplesect id="auditor.table.acq-invoice-entry-history" xreflabel="auditor.acq_invoice_entry_history"> \r
- <title>acq_invoice_entry_history</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>audit_id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>invoice</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>purchase_order</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>lineitem</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>inv_item_count</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>phys_item_count</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>billed_per_item</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cost_billed</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>actual_cost</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount_paid</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="auditor.view.acq-invoice-entry-lifecycle" xreflabel="auditor.acq_invoice_entry_lifecycle"> \r
- <title>acq_invoice_entry_lifecycle</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>?column?</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>invoice</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>purchase_order</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>lineitem</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>inv_item_count</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>phys_item_count</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>billed_per_item</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cost_billed</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>actual_cost</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount_paid</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="auditor.table.acq-invoice-history" xreflabel="auditor.acq_invoice_history"> \r
- <title>acq_invoice_history</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>audit_id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>receiver</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>provider</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>shipper</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recv_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recv_method</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>inv_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>inv_ident</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_auth</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_method</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>complete</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="auditor.table.acq-invoice-item-history" xreflabel="auditor.acq_invoice_item_history"> \r
- <title>acq_invoice_item_history</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>audit_id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>invoice</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>purchase_order</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fund_debit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>inv_item_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>author</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cost_billed</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>actual_cost</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount_paid</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>po_item</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="auditor.view.acq-invoice-item-lifecycle" xreflabel="auditor.acq_invoice_item_lifecycle"> \r
- <title>acq_invoice_item_lifecycle</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>?column?</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>invoice</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>purchase_order</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fund_debit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>inv_item_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>author</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cost_billed</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>actual_cost</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fund</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount_paid</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>po_item</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="auditor.view.acq-invoice-lifecycle" xreflabel="auditor.acq_invoice_lifecycle"> \r
- <title>acq_invoice_lifecycle</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>?column?</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>receiver</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>provider</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>shipper</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recv_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recv_method</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>inv_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>inv_ident</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_auth</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_method</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>complete</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="auditor.table.actor-org-unit-history" xreflabel="auditor.actor_org_unit_history"> \r
- <title>actor_org_unit_history</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>audit_id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_ou</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ou_type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ill_address</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holds_address</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>mailing_address</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>billing_address</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>shortname</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>email</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>phone</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_visible</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fiscal_calendar</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="auditor.view.actor-org-unit-lifecycle" xreflabel="auditor.actor_org_unit_lifecycle"> \r
- <title>actor_org_unit_lifecycle</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>?column?</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_ou</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ou_type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ill_address</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holds_address</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>mailing_address</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>billing_address</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>shortname</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>email</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>phone</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_visible</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fiscal_calendar</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="auditor.table.actor-usr-address-history" xreflabel="auditor.actor_usr_address_history"> \r
- <title>actor_usr_address_history</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>audit_id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>valid</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>within_city_limits</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>address_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>street1</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>street2</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>city</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>county</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>state</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>country</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>post_code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pending</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>replaces</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="auditor.view.actor-usr-address-lifecycle" xreflabel="auditor.actor_usr_address_lifecycle"> \r
- <title>actor_usr_address_lifecycle</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>?column?</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>valid</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>within_city_limits</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>address_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>street1</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>street2</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>city</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>county</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>state</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>country</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>post_code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pending</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>replaces</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="auditor.table.actor-usr-history" xreflabel="auditor.actor_usr_history"> \r
- <title>actor_usr_history</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>audit_id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>card</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>profile</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usrname</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>email</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>passwd</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>standing</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident_type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident_value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident_type2</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident_value2</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>net_access_level</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>photo_url</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>prefix</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>first_given_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>second_given_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>family_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>suffix</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>alias</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>day_phone</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>evening_phone</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>other_phone</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>mailing_address</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>billing_address</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>home_ou</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dob</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>active</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>master_account</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>super_user</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>barred</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deleted</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>juvenile</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usrgroup</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>claims_returned_count</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>credit_forward_balance</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_xact_id</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>alert_message</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>expire_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>claims_never_checked _out_count</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="auditor.view.actor-usr-lifecycle" xreflabel="auditor.actor_usr_lifecycle"> \r
- <title>actor_usr_lifecycle</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>?column?</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>card</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>profile</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usrname</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>email</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>passwd</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>standing</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident_type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident_value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident_type2</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident_value2</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>net_access_level</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>photo_url</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>prefix</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>first_given_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>second_given_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>family_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>suffix</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>alias</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>day_phone</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>evening_phone</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>other_phone</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>mailing_address</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>billing_address</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>home_ou</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dob</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>active</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>master_account</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>super_user</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>barred</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deleted</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>juvenile</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usrgroup</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>claims_returned_count</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>credit_forward_balance</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_xact_id</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>alert_message</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>expire_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>claims_never_checked _out_count</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="auditor.table.asset-call-number-history" xreflabel="auditor.asset_call_number_history"> \r
- <title>asset_call_number_history</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>audit_id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deleted</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label_class</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label_sortkey</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="auditor.view.asset-call-number-lifecycle" xreflabel="auditor.asset_call_number_lifecycle"> \r
- <title>asset_call_number_lifecycle</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>?column?</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deleted</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label_class</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label_sortkey</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="auditor.table.asset-copy-history" xreflabel="auditor.asset_copy_history"> \r
- <title>asset_copy_history</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>audit_id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>call_number</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_number</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>status</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>location</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>loan_duration</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fine_level</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>age_protect</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circulate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deposit</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ref</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holdable</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deposit_amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>price</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>barcode</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_modifier</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_as_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dummy_title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dummy_author</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>alert_message</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_visible</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deleted</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>floating</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dummy_isbn</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>status_changed_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>mint_condition</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cost</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="auditor.view.asset-copy-lifecycle" xreflabel="auditor.asset_copy_lifecycle"> \r
- <title>asset_copy_lifecycle</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>?column?</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>call_number</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_number</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>status</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>location</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>loan_duration</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fine_level</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>age_protect</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circulate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deposit</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ref</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holdable</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deposit_amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>price</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>barcode</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_modifier</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_as_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dummy_title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dummy_author</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>alert_message</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_visible</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deleted</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>floating</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dummy_isbn</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>status_changed_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>mint_condition</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cost</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="auditor.table.biblio-record-entry-history" xreflabel="auditor.biblio_record_entry_history"> \r
- <title>biblio_record_entry_history</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>audit_id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>quality</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>active</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deleted</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fingerprint</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>tcn_source</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>tcn_value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>marc</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_xact_id</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>share_depth</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="auditor.view.biblio-record-entry-lifecycle" xreflabel="auditor.biblio_record_entry_lifecycle"> \r
- <title>biblio_record_entry_lifecycle</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>?column?</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audit_action</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>quality</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>active</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deleted</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fingerprint</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>tcn_source</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>tcn_value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>marc</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_xact_id</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>share_depth</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="authority.schema">\r
- <title>Schema authority</title>\r
- \r
- <simplesect id="authority.table.bib-linking" xreflabel="authority.bib_linking"> \r
- <title>bib_linking</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>bib</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>authority</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="authority.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="authority.table.full-rec" xreflabel="authority.full_rec"> \r
- <title>full_rec</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>tag</entry>\r
- <entry>character(3)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ind1</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ind2</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>subfield</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>index_vector</entry>\r
- <entry>tsvector</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="authority.table.rec-descriptor" xreflabel="authority.rec_descriptor"> \r
- <title>rec_descriptor</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record_status</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>char_encoding</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="authority.table.record-entry" xreflabel="authority.record_entry"> \r
- <title>record_entry</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>active</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deleted</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>marc</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_xact_id</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing authority.bib_linking via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="authority.table.bib-linking"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="authority.table.record-note"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.authority-match"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.queued-authority-record"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="authority.table.record-note" xreflabel="authority.record_note"> \r
- <title>record_note</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="authority.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="authority.view.tracing-links" xreflabel="authority.tracing_links"> \r
- <title>tracing_links</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>main_id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>main_tag</entry>\r
- <entry>character(3)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>main_value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>relationship</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>use_restriction</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deprecation</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>display_restriction</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>link_id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>link_tag</entry>\r
- <entry>character(3)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>link_value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="biblio.schema">\r
- <title>Schema biblio</title>\r
- \r
- <simplesect id="biblio.table.record-entry" xreflabel="biblio.record_entry"> \r
- <title>record_entry</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>quality</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>active</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deleted</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fingerprint</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>tcn_source</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'AUTOGEN'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>tcn_value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT biblio.next_autogen_tcn_value();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>marc</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_xact_id</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>share_depth</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.lineitem via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.user-request"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.call-number"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="authority.table.bib-linking"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="biblio.table.record-note"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="booking.table.resource-type"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="container.table.biblio-record-entry-bucket-item"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="metabib.table.author-field-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="metabib.table.identifier-field-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="metabib.table.keyword-field-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="metabib.table.metarecord"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="metabib.table.metarecord-source-map"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="metabib.table.real-full-rec"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="metabib.table.rec-descriptor"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="metabib.table.series-field-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="metabib.table.subject-field-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="metabib.table.title-field-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.record-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.subscription"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.bib-match"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.queued-bib-record"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="biblio.table.record-note" xreflabel="biblio.record_note"> \r
- <title>record_note</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pub</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="booking.schema">\r
- <title>Schema booking</title>\r
- \r
- <simplesect id="booking.table.reservation" xreflabel="booking.reservation"> \r
- <title>reservation</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('money.billable_xact_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_start</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_finish</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>unrecovered</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>request_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>start_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>end_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>capture_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cancel_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pickup_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>return_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>booking_interval</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fine_interval</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fine_amount</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_fine</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target_resource_type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="booking.table.resource-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target_resource</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="booking.table.resource"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>current_resource</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="booking.table.resource"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>request_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pickup_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>capture_staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action.reservation_transit_copy via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action.table.reservation-transit-copy"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="booking.table.reservation-attr-value-map"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="booking.table.reservation-attr-value-map" xreflabel="booking.reservation_attr_value_map"> \r
- <title>reservation_attr_value_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>reservation</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="booking.table.reservation"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>attr_value</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="booking.table.resource-attr-value"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="booking.table.resource" xreflabel="booking.resource"> \r
- <title>resource</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="booking.table.resource-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>overbook</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>barcode</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deposit</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deposit_amount</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 0.00;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>user_fee</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 0.00;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action.reservation_transit_copy via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action.table.reservation-transit-copy"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="booking.table.reservation"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="booking.table.resource-attr-map"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="booking.table.resource-attr" xreflabel="booking.resource_attr"> \r
- <title>resource_attr</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>resource_type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="booking.table.resource-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>required</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing booking.resource_attr_map via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="booking.table.resource-attr-map"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="booking.table.resource-attr-value"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="booking.table.resource-attr-map" xreflabel="booking.resource_attr_map"> \r
- <title>resource_attr_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>resource</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="booking.table.resource"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>resource_attr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="booking.table.resource-attr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="booking.table.resource-attr-value"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="booking.table.resource-attr-value" xreflabel="booking.resource_attr_value"> \r
- <title>resource_attr_value</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>attr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="booking.table.resource-attr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>valid_value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing booking.reservation_attr_value_map via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="booking.table.reservation-attr-value-map"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="booking.table.resource-attr-map"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="booking.table.resource-type" xreflabel="booking.resource_type"> \r
- <title>resource_type</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>elbow_room</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fine_interval</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fine_amount</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_fine</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>catalog_item</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>transferable</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing booking.reservation via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="booking.table.reservation"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="booking.table.resource"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="booking.table.resource-attr"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="config.schema">\r
- <title>Schema config</title>\r
- \r
- <simplesect id="config.table.audience-map" xreflabel="config.audience_map"> \r
- <title>audience_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.bib-level-map" xreflabel="config.bib_level_map"> \r
- <title>bib_level_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.bib-source" xreflabel="config.bib_source"> \r
- <title>bib_source</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>quality</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>transcendant</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on bib_source</title>\r
- \r
- <varlistentry>\r
- <term>bib_source_quality_check</term>\r
- <listitem><para>CHECK (((quality >= 0) AND (quality <= 100)))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing vandelay.queued_bib_record via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.queued-bib-record"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.biblio-fingerprint" xreflabel="config.biblio_fingerprint"> \r
- <title>biblio_fingerprint</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xpath</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>first_word</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>format</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'marcxml'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.billing-type" xreflabel="config.billing_type"> \r
- <title>billing_type</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>default_price</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing money.billing via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="money.table.billing"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.circ-matrix-circ-mod-test" xreflabel="config.circ_matrix_circ_mod_test"> \r
- <title>circ_matrix_circ_mod_test</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>matchpoint</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.circ-matrix-matchpoint"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>items_out</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.circ_matrix_circ_mod_test_map via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.circ-matrix-circ-mod-test-map"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.circ-matrix-circ-mod-test-map" xreflabel="config.circ_matrix_circ_mod_test_map"> \r
- <title>circ_matrix_circ_mod_test_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_mod_test</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.circ-matrix-circ-mod-test"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_mod</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.circ-modifier"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.circ-matrix-matchpoint" xreflabel="config.circ_matrix_matchpoint"> \r
- <title>circ_matrix_matchpoint</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>active</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>org_unit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>grp</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="permission.table.grp-tree"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_modifier</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.circ-modifier"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>marc_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.item-type-map"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>marc_form</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.item-form-map"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>marc_vr_format</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.videorecording-format-map"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_owning_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ref_flag</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>juvenile_flag</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>is_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr_age_lower_bound</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr_age_upper_bound</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circulate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>duration_rule</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.rule-circ-duration"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recurring_fine_rule</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.rule-recurring-fine"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_fine_rule</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.rule-max-fine"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>hard_due_date</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.hard-due-date"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>script_test</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_copy_hold_ratio</entry>\r
- <entry>double precision</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>available_copy_hold_ratio</entry>\r
- <entry>double precision</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.circ_matrix_circ_mod_test via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.circ-matrix-circ-mod-test"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.circ-modifier" xreflabel="config.circ_modifier"> \r
- <title>circ_modifier</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>sip2_media_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>magnetic_media</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>avg_wait_time</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.lineitem_detail via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.lineitem-detail"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.copy"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="config.table.circ-matrix-circ-mod-test-map"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="config.table.circ-matrix-matchpoint"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="config.table.hold-matrix-matchpoint"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.copy-status" xreflabel="config.copy_status"> \r
- <title>copy_status</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holdable</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_visible</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action.transit_copy via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action.table.transit-copy"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.copy"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="asset.table.copy-template"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.global-flag" xreflabel="config.global_flag"> \r
- <title>global_flag</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>enabled</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.hard-due-date" xreflabel="config.hard_due_date"> \r
- <title>hard_due_date</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ceiling_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>forceto</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on hard_due_date</title>\r
- \r
- <varlistentry>\r
- <term>hard_due_date_name_check</term>\r
- <listitem><para>CHECK ((name ~ '^\\w+$'::text))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.circ-matrix-matchpoint"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="config.table.hard-due-date-values"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.hard-due-date-values" xreflabel="config.hard_due_date_values"> \r
- <title>hard_due_date_values</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>hard_due_date</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.hard-due-date"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ceiling_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>active_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.hold-matrix-matchpoint" xreflabel="config.hold_matrix_matchpoint"> \r
- <title>hold_matrix_matchpoint</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>active</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>user_home_ou</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>request_ou</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pickup_ou</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item_owning_ou</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item_circ_ou</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr_grp</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="permission.table.grp-tree"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>requestor_grp</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="permission.table.grp-tree"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_modifier</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.circ-modifier"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>marc_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.item-type-map"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>marc_form</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.item-form-map"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>marc_vr_format</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.videorecording-format-map"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>juvenile_flag</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ref_flag</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holdable</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>distance_is_from_owner</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>transit_range</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_holds</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>include_frozen_holds</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stop_blocked_user</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>age_hold_protect_rule</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.rule-age-hold-protect"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.i18n-core" xreflabel="config.i18n_core"> \r
- <title>i18n_core</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fq_field</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>identity_value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>translation</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.i18n-locale"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>string</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.i18n-locale" xreflabel="config.i18n_locale"> \r
- <title>i18n_locale</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>marc_code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.language-map"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.i18n_core via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.i18n-core"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.identification-type" xreflabel="config.identification_type"> \r
- <title>identification_type</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing actor.usr via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.usr"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.idl-field-doc" xreflabel="config.idl_field_doc"> \r
- <title>idl_field_doc</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fm_class</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>field</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>string</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.index-normalizer" xreflabel="config.index_normalizer"> \r
- <title>index_normalizer</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>func</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>param_count</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.metabib_field_index_norm_map via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.metabib-field-index-norm-map"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.internal-flag" xreflabel="config.internal_flag"> \r
- <title>internal_flag</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>enabled</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.item-form-map" xreflabel="config.item_form_map"> \r
- <title>item_form_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.circ-matrix-matchpoint"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="config.table.hold-matrix-matchpoint"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.item-type-map" xreflabel="config.item_type_map"> \r
- <title>item_type_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.circ-matrix-matchpoint"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="config.table.hold-matrix-matchpoint"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.language-map" xreflabel="config.language_map"> \r
- <title>language_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.i18n_locale via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.i18n-locale"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.lit-form-map" xreflabel="config.lit_form_map"> \r
- <title>lit_form_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.marc21-ff-pos-map" xreflabel="config.marc21_ff_pos_map"> \r
- <title>marc21_ff_pos_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fixed_field</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>tag</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>rec_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>start_pos</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>length</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>default_val</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT ' '::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.marc21-physical-characteristic-subfield-map" xreflabel="config.marc21_physical_characteristic_subfield_map"> \r
- <title>marc21_physical_characteristic_subfield_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ptype_key</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.marc21-physical-characteristic-type-map"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>subfield</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>start_pos</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>length</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.marc21_physical_characteristic_value_map via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.marc21-physical-characteristic-value-map"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.marc21-physical-characteristic-type-map" xreflabel="config.marc21_physical_characteristic_type_map"> \r
- <title>marc21_physical_characteristic_type_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>ptype_key</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.marc21_physical_characteristic_subfield_map via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.marc21-physical-characteristic-subfield-map"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.marc21-physical-characteristic-value-map" xreflabel="config.marc21_physical_characteristic_value_map"> \r
- <title>marc21_physical_characteristic_value_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ptype_subfield</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.marc21-physical-characteristic-subfield-map"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.marc21-rec-type-map" xreflabel="config.marc21_rec_type_map"> \r
- <title>marc21_rec_type_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>type_val</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>blvl_val</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.metabib-class" xreflabel="config.metabib_class"> \r
- <title>metabib_class</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.metabib_field via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.metabib-field"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="config.table.metabib-search-alias"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.metabib-field" xreflabel="config.metabib_field"> \r
- <title>metabib_field</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>field_class</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.metabib-class"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xpath</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>weight</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>format</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'mods33'::text;\r
- \r
- \r
- \r
- <xref linkend="config.table.xml-transform"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>search_field</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>facet_field</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>facet_xpath</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.metabib_field_index_norm_map via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.metabib-field-index-norm-map"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="config.table.metabib-search-alias"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="metabib.table.author-field-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="metabib.table.identifier-field-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="metabib.table.keyword-field-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="metabib.table.series-field-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="metabib.table.subject-field-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="metabib.table.title-field-entry"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="search.table.relevance-adjustment"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.metabib-field-index-norm-map" xreflabel="config.metabib_field_index_norm_map"> \r
- <title>metabib_field_index_norm_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>field</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.metabib-field"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>norm</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.index-normalizer"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>params</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pos</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.metabib-search-alias" xreflabel="config.metabib_search_alias"> \r
- <title>metabib_search_alias</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>alias</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>field_class</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.metabib-class"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>field</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.metabib-field"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.net-access-level" xreflabel="config.net_access_level"> \r
- <title>net_access_level</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing actor.usr via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.usr"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.non-cataloged-type" xreflabel="config.non_cataloged_type"> \r
- <title>non_cataloged_type</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_duration</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT '14 days'::interval;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>in_house</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action.non_cat_in_house_use via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action.table.non-cat-in-house-use"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="action.table.non-cataloged-circulation"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.org-unit-setting-type" xreflabel="config.org_unit_setting_type"> \r
- <title>org_unit_setting_type</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>grp</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.settings-group"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>datatype</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'string'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fm_class</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>view_perm</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="permission.table.perm-list"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>update_perm</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="permission.table.perm-list"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on org_unit_setting_type</title>\r
- \r
- <varlistentry>\r
- <term>coust_no_empty_link</term>\r
- <listitem><para>CHECK ((((datatype = 'link'::text) AND (fm_class IS NOT NULL)) OR ((datatype <> 'link'::text) AND (fm_class IS NULL))))</para></listitem>\r
- </varlistentry>\r
- \r
- \r
- \r
- <varlistentry>\r
- <term>coust_valid_datatype</term>\r
- <listitem><para>CHECK ((datatype = ANY (ARRAY['bool'::text, 'integer'::text, 'float'::text, 'currency'::text, 'interval'::text, 'date'::text, 'string'::text, 'object'::text, 'array'::text, 'link'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing actor.org_unit_setting via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.org-unit-setting"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.remote-account" xreflabel="config.remote_account"> \r
- <title>remote_account</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>host</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>username</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>password</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>account</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>path</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_activity</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.rule-age-hold-protect" xreflabel="config.rule_age_hold_protect"> \r
- <title>rule_age_hold_protect</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>age</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>prox</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on rule_age_hold_protect</title>\r
- \r
- <varlistentry>\r
- <term>rule_age_hold_ protect_name_check</term>\r
- <listitem><para>CHECK ((name ~ '^\\w+$'::text))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.hold_matrix_matchpoint via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.hold-matrix-matchpoint"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.rule-circ-duration" xreflabel="config.rule_circ_duration"> \r
- <title>rule_circ_duration</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>extended</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>normal</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>shrt</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_renewals</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on rule_circ_duration</title>\r
- \r
- <varlistentry>\r
- <term>rule_circ_duration_name_check</term>\r
- <listitem><para>CHECK ((name ~ '^\\w+$'::text))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.circ-matrix-matchpoint"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.rule-max-fine" xreflabel="config.rule_max_fine"> \r
- <title>rule_max_fine</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>is_percent</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on rule_max_fine</title>\r
- \r
- <varlistentry>\r
- <term>rule_max_fine_name_check</term>\r
- <listitem><para>CHECK ((name ~ '^\\w+$'::text))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.circ-matrix-matchpoint"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.rule-recurring-fine" xreflabel="config.rule_recurring_fine"> \r
- <title>rule_recurring_fine</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>high</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>normal</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>low</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recurrence_interval</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT '1 day'::interval;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on rule_recurring_fine</title>\r
- \r
- <varlistentry>\r
- <term>rule_recurring_fine_name_check</term>\r
- <listitem><para>CHECK ((name ~ '^\\w+$'::text))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.circ-matrix-matchpoint"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.settings-group" xreflabel="config.settings_group"> \r
- <title>settings_group</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.org_unit_setting_type via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.org-unit-setting-type"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="config.table.usr-setting-type"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.standing" xreflabel="config.standing"> \r
- <title>standing</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing actor.usr via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.usr"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.standing-penalty" xreflabel="config.standing_penalty"> \r
- <title>standing_penalty</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>block_list</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>org_depth</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing actor.usr_standing_penalty via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.usr-standing-penalty"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="permission.table.grp-penalty-threshold"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.upgrade-log" xreflabel="config.upgrade_log"> \r
- <title>upgrade_log</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>version</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>install_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.usr-setting-type" xreflabel="config.usr_setting_type"> \r
- <title>usr_setting_type</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_visible</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>grp</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.settings-group"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>datatype</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'string'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fm_class</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on usr_setting_type</title>\r
- \r
- <varlistentry>\r
- <term>coust_no_empty_link</term>\r
- <listitem><para>CHECK ((((datatype = 'link'::text) AND (fm_class IS NOT NULL)) OR ((datatype <> 'link'::text) AND (fm_class IS NULL))))</para></listitem>\r
- </varlistentry>\r
- \r
- \r
- \r
- <varlistentry>\r
- <term>coust_valid_datatype</term>\r
- <listitem><para>CHECK ((datatype = ANY (ARRAY['bool'::text, 'integer'::text, 'float'::text, 'currency'::text, 'interval'::text, 'date'::text, 'string'::text, 'object'::text, 'array'::text, 'link'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action_trigger.event_definition via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action-trigger.table.event-definition"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.usr-setting"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.videorecording-format-map" xreflabel="config.videorecording_format_map"> \r
- <title>videorecording_format_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.circ-matrix-matchpoint"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="config.table.hold-matrix-matchpoint"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.xml-transform" xreflabel="config.xml_transform"> \r
- <title>xml_transform</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>namespace_uri</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>prefix</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xslt</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.metabib_field via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.metabib-field"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.z3950-attr" xreflabel="config.z3950_attr"> \r
- <title>z3950_attr</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.z3950-source"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>format</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>truncation</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="config.table.z3950-source" xreflabel="config.z3950_source"> \r
- <title>z3950_source</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>host</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>port</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>db</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record_format</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'FI'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>transmission_format</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'usmarc'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>auth</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.z3950_attr via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.z3950-attr"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="container.schema">\r
- <title>Schema container</title>\r
- \r
- <simplesect id="container.table.biblio-record-entry-bucket" xreflabel="container.biblio_record_entry_bucket"> \r
- <title>biblio_record_entry_bucket</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>btype</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'misc'::text;\r
- \r
- \r
- \r
- <xref linkend="container.table.biblio-record-entry-bucket-type"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pub</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing container.biblio_record_entry_bucket_item via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="container.table.biblio-record-entry-bucket-item"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="container.table.biblio-record-entry-bucket-note"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="container.table.biblio-record-entry-bucket-item" xreflabel="container.biblio_record_entry_bucket_item"> \r
- <title>biblio_record_entry_bucket_item</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>bucket</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="container.table.biblio-record-entry-bucket"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target_biblio_record_entry</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pos</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing container.biblio_record_entry_bucket_item_note via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="container.table.biblio-record-entry-bucket-item-note"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="container.table.biblio-record-entry-bucket-item-note" xreflabel="container.biblio_record_entry_bucket_item_note"> \r
- <title>biblio_record_entry_bucket_item_note</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="container.table.biblio-record-entry-bucket-item"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="container.table.biblio-record-entry-bucket-note" xreflabel="container.biblio_record_entry_bucket_note"> \r
- <title>biblio_record_entry_bucket_note</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>bucket</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="container.table.biblio-record-entry-bucket"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="container.table.biblio-record-entry-bucket-type" xreflabel="container.biblio_record_entry_bucket_type"> \r
- <title>biblio_record_entry_bucket_type</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing container.biblio_record_entry_bucket via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="container.table.biblio-record-entry-bucket"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="container.table.call-number-bucket" xreflabel="container.call_number_bucket"> \r
- <title>call_number_bucket</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>btype</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'misc'::text;\r
- \r
- \r
- \r
- <xref linkend="container.table.call-number-bucket-type"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pub</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing container.call_number_bucket_item via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="container.table.call-number-bucket-item"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="container.table.call-number-bucket-note"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="container.table.call-number-bucket-item" xreflabel="container.call_number_bucket_item"> \r
- <title>call_number_bucket_item</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>bucket</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="container.table.call-number-bucket"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target_call_number</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="asset.table.call-number"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pos</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing container.call_number_bucket_item_note via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="container.table.call-number-bucket-item-note"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="container.table.call-number-bucket-item-note" xreflabel="container.call_number_bucket_item_note"> \r
- <title>call_number_bucket_item_note</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="container.table.call-number-bucket-item"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="container.table.call-number-bucket-note" xreflabel="container.call_number_bucket_note"> \r
- <title>call_number_bucket_note</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>bucket</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="container.table.call-number-bucket"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="container.table.call-number-bucket-type" xreflabel="container.call_number_bucket_type"> \r
- <title>call_number_bucket_type</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing container.call_number_bucket via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="container.table.call-number-bucket"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="container.table.copy-bucket" xreflabel="container.copy_bucket"> \r
- <title>copy_bucket</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>btype</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'misc'::text;\r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="container.table.copy-bucket-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pub</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing container.copy_bucket_item via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="container.table.copy-bucket-item"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="container.table.copy-bucket-note"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="container.table.copy-bucket-item" xreflabel="container.copy_bucket_item"> \r
- <title>copy_bucket_item</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>bucket</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="container.table.copy-bucket"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target_copy</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="asset.table.copy"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pos</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing container.copy_bucket_item_note via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="container.table.copy-bucket-item-note"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="container.table.copy-bucket-item-note" xreflabel="container.copy_bucket_item_note"> \r
- <title>copy_bucket_item_note</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="container.table.copy-bucket-item"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="container.table.copy-bucket-note" xreflabel="container.copy_bucket_note"> \r
- <title>copy_bucket_note</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>bucket</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="container.table.copy-bucket"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="container.table.copy-bucket-type" xreflabel="container.copy_bucket_type"> \r
- <title>copy_bucket_type</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing container.copy_bucket via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="container.table.copy-bucket"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="container.table.user-bucket" xreflabel="container.user_bucket"> \r
- <title>user_bucket</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>btype</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'misc'::text;\r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="container.table.user-bucket-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pub</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing container.user_bucket_item via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="container.table.user-bucket-item"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="container.table.user-bucket-note"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="container.table.user-bucket-item" xreflabel="container.user_bucket_item"> \r
- <title>user_bucket_item</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>bucket</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="container.table.user-bucket"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target_user</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pos</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing container.user_bucket_item_note via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="container.table.user-bucket-item-note"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="container.table.user-bucket-item-note" xreflabel="container.user_bucket_item_note"> \r
- <title>user_bucket_item_note</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="container.table.user-bucket-item"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="container.table.user-bucket-note" xreflabel="container.user_bucket_note"> \r
- <title>user_bucket_note</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>bucket</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="container.table.user-bucket"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="container.table.user-bucket-type" xreflabel="container.user_bucket_type"> \r
- <title>user_bucket_type</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing container.user_bucket via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="container.table.user-bucket"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="extend-reporter.schema">\r
- <title>Schema extend_reporter</title>\r
- \r
- <simplesect id="extend-reporter.view.full-circ-count" xreflabel="extend_reporter.full_circ_count"> \r
- <title>full_circ_count</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_count</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="extend-reporter.view.global-bibs-by-holding-update" xreflabel="extend_reporter.global_bibs_by_holding_update"> \r
- <title>global_bibs_by_holding_update</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holding_update</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>update_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="extend-reporter.table.legacy-circ-count" xreflabel="extend_reporter.legacy_circ_count"> \r
- <title>legacy_circ_count</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_count</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="metabib.schema">\r
- <title>Schema metabib</title>\r
- \r
- <simplesect id="metabib.table.author-field-entry" xreflabel="metabib.author_field_entry"> \r
- <title>author_field_entry</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>field</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.metabib-field"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>index_vector</entry>\r
- <entry>tsvector</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="metabib.table.facet-entry" xreflabel="metabib.facet_entry"> \r
- <title>facet_entry</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>field</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="metabib.view.full-rec" xreflabel="metabib.full_rec"> \r
- <title>full_rec</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>tag</entry>\r
- <entry>character(3)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ind1</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ind2</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>subfield</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>index_vector</entry>\r
- <entry>tsvector</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="metabib.table.identifier-field-entry" xreflabel="metabib.identifier_field_entry"> \r
- <title>identifier_field_entry</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>field</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.metabib-field"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>index_vector</entry>\r
- <entry>tsvector</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="metabib.table.keyword-field-entry" xreflabel="metabib.keyword_field_entry"> \r
- <title>keyword_field_entry</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>field</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.metabib-field"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>index_vector</entry>\r
- <entry>tsvector</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="metabib.table.metarecord" xreflabel="metabib.metarecord"> \r
- <title>metarecord</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fingerprint</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>master_record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>mods</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing metabib.metarecord_source_map via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="metabib.table.metarecord-source-map"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="metabib.table.metarecord-source-map" xreflabel="metabib.metarecord_source_map"> \r
- <title>metarecord_source_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>metarecord</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="metabib.table.metarecord"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="metabib.table.real-full-rec" xreflabel="metabib.real_full_rec"> \r
- <title>real_full_rec</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('metabib.full_rec_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>tag</entry>\r
- <entry>character(3)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ind1</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ind2</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>subfield</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>index_vector</entry>\r
- <entry>tsvector</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="metabib.table.rec-descriptor" xreflabel="metabib.rec_descriptor"> \r
- <title>rec_descriptor</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item_form</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>bib_level</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>control_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>char_encoding</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>enc_level</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>audience</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>lit_form</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>type_mat</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cat_form</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pub_status</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item_lang</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>vr_format</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>date1</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>date2</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="metabib.table.series-field-entry" xreflabel="metabib.series_field_entry"> \r
- <title>series_field_entry</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>field</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.metabib-field"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>index_vector</entry>\r
- <entry>tsvector</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="metabib.table.subject-field-entry" xreflabel="metabib.subject_field_entry"> \r
- <title>subject_field_entry</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>field</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.metabib-field"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>index_vector</entry>\r
- <entry>tsvector</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="metabib.table.title-field-entry" xreflabel="metabib.title_field_entry"> \r
- <title>title_field_entry</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>field</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.metabib-field"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>index_vector</entry>\r
- <entry>tsvector</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="money.schema">\r
- <title>Schema money</title>\r
- \r
- <simplesect id="money.table.billable-xact" xreflabel="money.billable_xact"> \r
- <title>billable_xact</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_start</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_finish</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>unrecovered</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.billable-xact-summary" xreflabel="money.billable_xact_summary"> \r
- <title>billable_xact_summary</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_start</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_finish</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_paid</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_type</entry>\r
- <entry>name</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>balance_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_type</entry>\r
- <entry>name</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.billable-xact-summary-location-view" xreflabel="money.billable_xact_summary_location_view"> \r
- <title>billable_xact_summary_location_view</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_start</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_finish</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_paid</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_type</entry>\r
- <entry>name</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>balance_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_type</entry>\r
- <entry>name</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>billing_location</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.billable-xact-with-void-summary" xreflabel="money.billable_xact_with_void_summary"> \r
- <title>billable_xact_with_void_summary</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_start</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_finish</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_paid</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_type</entry>\r
- <entry>name</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>balance_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_type</entry>\r
- <entry>name</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.table.billing" xreflabel="money.billing"> \r
- <title>billing</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>billing_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>voided</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>voider</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>void_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>billing_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>btype</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.billing-type"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.table.bnm-desk-payment" xreflabel="money.bnm_desk_payment"> \r
- <title>bnm_desk_payment</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('money.payment_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>voided</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount_collected</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>accepting_usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cash_drawer</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.workstation"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.table.bnm-payment" xreflabel="money.bnm_payment"> \r
- <title>bnm_payment</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('money.payment_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>voided</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount_collected</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>accepting_usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.bnm-payment-view" xreflabel="money.bnm_payment_view"> \r
- <title>bnm_payment_view</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>voided</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount_collected</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>accepting_usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_type</entry>\r
- <entry>name</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.table.cash-payment" xreflabel="money.cash_payment"> \r
- <title>cash_payment</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('money.payment_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>voided</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount_collected</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>accepting_usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cash_drawer</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.cashdrawer-payment-view" xreflabel="money.cashdrawer_payment_view"> \r
- <title>cashdrawer_payment_view</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>org_unit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cashdrawer</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_type</entry>\r
- <entry>name</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>voided</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.table.check-payment" xreflabel="money.check_payment"> \r
- <title>check_payment</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('money.payment_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>voided</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount_collected</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>accepting_usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cash_drawer</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>check_number</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.table.collections-tracker" xreflabel="money.collections_tracker"> \r
- <title>collections_tracker</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>collector</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>location</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>enter_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.table.credit-card-payment" xreflabel="money.credit_card_payment"> \r
- <title>credit_card_payment</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('money.payment_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>voided</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount_collected</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>accepting_usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cash_drawer</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cc_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cc_number</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cc_processor</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cc_first_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cc_last_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>expire_month</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>expire_year</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>approval_code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.table.credit-payment" xreflabel="money.credit_payment"> \r
- <title>credit_payment</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('money.payment_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>voided</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount_collected</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>accepting_usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.desk-payment-view" xreflabel="money.desk_payment_view"> \r
- <title>desk_payment_view</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>voided</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount_collected</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>accepting_usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cash_drawer</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_type</entry>\r
- <entry>name</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.table.forgive-payment" xreflabel="money.forgive_payment"> \r
- <title>forgive_payment</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('money.payment_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>voided</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount_collected</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>accepting_usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.table.goods-payment" xreflabel="money.goods_payment"> \r
- <title>goods_payment</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('money.payment_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>voided</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount_collected</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>accepting_usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.table.grocery" xreflabel="money.grocery"> \r
- <title>grocery</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('money.billable_xact_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_start</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_finish</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>unrecovered</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>billing_location</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.table.materialized-billable-xact-summary" xreflabel="money.materialized_billable_xact_summary"> \r
- <title>materialized_billable_xact_summary</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_start</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_finish</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_paid</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_type</entry>\r
- <entry>name</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>balance_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_type</entry>\r
- <entry>name</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.non-drawer-payment-view" xreflabel="money.non_drawer_payment_view"> \r
- <title>non_drawer_payment_view</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>voided</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount_collected</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>accepting_usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_type</entry>\r
- <entry>name</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.open-billable-xact-summary" xreflabel="money.open_billable_xact_summary"> \r
- <title>open_billable_xact_summary</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_start</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_finish</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_paid</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_type</entry>\r
- <entry>name</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>balance_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_type</entry>\r
- <entry>name</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>billing_location</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.open-transaction-billing-summary" xreflabel="money.open_transaction_billing_summary"> \r
- <title>open_transaction_billing_summary</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.open-transaction-billing-type-summary" xreflabel="money.open_transaction_billing_type_summary"> \r
- <title>open_transaction_billing_type_summary</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.open-transaction-payment-summary" xreflabel="money.open_transaction_payment_summary"> \r
- <title>open_transaction_payment_summary</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_type</entry>\r
- <entry>name</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_paid</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.open-usr-circulation-summary" xreflabel="money.open_usr_circulation_summary"> \r
- <title>open_usr_circulation_summary</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_paid</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>balance_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.open-usr-summary" xreflabel="money.open_usr_summary"> \r
- <title>open_usr_summary</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_paid</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>balance_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.table.payment" xreflabel="money.payment"> \r
- <title>payment</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>voided</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.payment-view" xreflabel="money.payment_view"> \r
- <title>payment_view</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>voided</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_type</entry>\r
- <entry>name</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.transaction-billing-summary" xreflabel="money.transaction_billing_summary"> \r
- <title>transaction_billing_summary</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.transaction-billing-type-summary" xreflabel="money.transaction_billing_type_summary"> \r
- <title>transaction_billing_type_summary</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.transaction-billing-with-void-summary" xreflabel="money.transaction_billing_with_void_summary"> \r
- <title>transaction_billing_with_void_summary</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_billing_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.transaction-payment-summary" xreflabel="money.transaction_payment_summary"> \r
- <title>transaction_payment_summary</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_type</entry>\r
- <entry>name</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_paid</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.transaction-payment-with-void-summary" xreflabel="money.transaction_payment_with_void_summary"> \r
- <title>transaction_payment_with_void_summary</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_type</entry>\r
- <entry>name</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_paid</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.usr-circulation-summary" xreflabel="money.usr_circulation_summary"> \r
- <title>usr_circulation_summary</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_paid</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>balance_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.view.usr-summary" xreflabel="money.usr_summary"> \r
- <title>usr_summary</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_paid</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>balance_owed</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="money.table.work-payment" xreflabel="money.work_payment"> \r
- <title>work_payment</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('money.payment_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>payment_ts</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>voided</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>amount_collected</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>accepting_usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="offline.schema">\r
- <title>Schema offline</title>\r
- \r
- <simplesect id="offline.table.script" xreflabel="offline.script"> \r
- <title>script</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>session</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>requestor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>workstation</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>logfile</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>time_delta</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>count</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="offline.table.session" xreflabel="offline.session"> \r
- <title>session</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>key</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>org</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>in_process</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>start_time</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>end_time</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>num_complete</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="permission.schema">\r
- <title>Schema permission</title>\r
- \r
- <simplesect id="permission.table.grp-penalty-threshold" xreflabel="permission.grp_penalty_threshold"> \r
- <title>grp_penalty_threshold</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>grp</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="permission.table.grp-tree"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>org_unit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>penalty</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.standing-penalty"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>threshold</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="permission.table.grp-perm-map" xreflabel="permission.grp_perm_map"> \r
- <title>grp_perm_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>grp</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="permission.table.grp-tree"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>perm</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="permission.table.perm-list"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>depth</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>grantable</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="permission.table.grp-tree" xreflabel="permission.grp_tree"> \r
- <title>grp_tree</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="permission.table.grp-tree"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usergroup</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>perm_interval</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT '3 years'::interval;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>application_perm</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing actor.usr via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="actor.table.usr"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="config.table.circ-matrix-matchpoint"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="config.table.hold-matrix-matchpoint"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="permission.table.grp-penalty-threshold"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="permission.table.grp-perm-map"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="permission.table.grp-tree"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="permission.table.usr-grp-map"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="permission.table.perm-list" xreflabel="permission.perm_list"> \r
- <title>perm_list</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing config.org_unit_setting_type via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="config.table.org-unit-setting-type"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="permission.table.grp-perm-map"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="permission.table.usr-object-perm-map"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="permission.table.usr-perm-map"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="permission.table.usr-grp-map" xreflabel="permission.usr_grp_map"> \r
- <title>usr_grp_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>grp</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="permission.table.grp-tree"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="permission.table.usr-object-perm-map" xreflabel="permission.usr_object_perm_map"> \r
- <title>usr_object_perm_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>perm</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="permission.table.perm-list"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>object_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>object_id</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>grantable</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="permission.table.usr-perm-map" xreflabel="permission.usr_perm_map"> \r
- <title>usr_perm_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>perm</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="permission.table.perm-list"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>depth</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>grantable</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="permission.table.usr-work-ou-map" xreflabel="permission.usr_work_ou_map"> \r
- <title>usr_work_ou_map</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>work_ou</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="public.schema">\r
- <title>Schema public</title>\r
- \r
- </section>\r
- \r
- <section id="query.schema">\r
- <title>Schema query</title>\r
- \r
- <simplesect id="query.table.bind-variable" xreflabel="query.bind_variable"> \r
- <title>bind_variable</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>default_value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on bind_variable</title>\r
- \r
- <varlistentry>\r
- <term>bind_variable_type</term>\r
- <listitem><para>CHECK ((type = ANY (ARRAY['string'::text, 'number'::text, 'string_list'::text, 'number_list'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing query.expression via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="query.table.expression"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.table.case-branch" xreflabel="query.case_branch"> \r
- <title>case_branch</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_expr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.expression"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>condition</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.expression"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>result</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.expression"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.table.datatype" xreflabel="query.datatype"> \r
- <title>datatype</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>datatype_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>is_numeric</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>is_composite</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on datatype</title>\r
- \r
- <varlistentry>\r
- <term>qdt_comp_not_num</term>\r
- <listitem><para>CHECK (((is_numeric IS FALSE) OR (is_composite IS FALSE)))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing query.expression via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="query.table.expression"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="query.table.function-param-def"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="query.table.function-sig"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="query.table.record-column"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="query.table.subfield"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.view.expr-xbet" xreflabel="query.expr_xbet"> \r
- <title>expr_xbet</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parenthesize</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_expr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>left_operand</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>negate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.view.expr-xbind" xreflabel="query.expr_xbind"> \r
- <title>expr_xbind</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parenthesize</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_expr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>bind_variable</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.view.expr-xbool" xreflabel="query.expr_xbool"> \r
- <title>expr_xbool</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parenthesize</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_expr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>literal</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>negate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.view.expr-xcase" xreflabel="query.expr_xcase"> \r
- <title>expr_xcase</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parenthesize</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_expr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>left_operand</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>negate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.view.expr-xcast" xreflabel="query.expr_xcast"> \r
- <title>expr_xcast</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parenthesize</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_expr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>left_operand</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cast_type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>negate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.view.expr-xcol" xreflabel="query.expr_xcol"> \r
- <title>expr_xcol</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parenthesize</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_expr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>table_alias</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>column_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>negate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.view.expr-xex" xreflabel="query.expr_xex"> \r
- <title>expr_xex</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parenthesize</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_expr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>subquery</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>negate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.view.expr-xfunc" xreflabel="query.expr_xfunc"> \r
- <title>expr_xfunc</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parenthesize</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_expr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>column_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>function_id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>negate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.view.expr-xin" xreflabel="query.expr_xin"> \r
- <title>expr_xin</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parenthesize</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_expr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>left_operand</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>subquery</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>negate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.view.expr-xisnull" xreflabel="query.expr_xisnull"> \r
- <title>expr_xisnull</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parenthesize</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_expr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>left_operand</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>negate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.view.expr-xnull" xreflabel="query.expr_xnull"> \r
- <title>expr_xnull</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parenthesize</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_expr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>negate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.view.expr-xnum" xreflabel="query.expr_xnum"> \r
- <title>expr_xnum</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parenthesize</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_expr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>literal</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.view.expr-xop" xreflabel="query.expr_xop"> \r
- <title>expr_xop</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parenthesize</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_expr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>left_operand</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>operator</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>right_operand</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>negate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.view.expr-xser" xreflabel="query.expr_xser"> \r
- <title>expr_xser</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parenthesize</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_expr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>operator</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>negate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.view.expr-xstr" xreflabel="query.expr_xstr"> \r
- <title>expr_xstr</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parenthesize</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_expr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>literal</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.view.expr-xsubq" xreflabel="query.expr_xsubq"> \r
- <title>expr_xsubq</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parenthesize</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_expr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>subquery</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>negate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.table.expression" xreflabel="query.expression"> \r
- <title>expression</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parenthesize</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_expr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.expression"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>literal</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>table_alias</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>column_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>left_operand</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.expression"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>operator</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>right_operand</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.expression"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>function_id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.function-sig"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>subquery</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.stored-query"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cast_type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.datatype"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>negate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>bind_variable</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.bind-variable"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on expression</title>\r
- \r
- <varlistentry>\r
- <term>expression_type</term>\r
- <listitem><para>CHECK ((type = ANY (ARRAY['xbet'::text, 'xbind'::text, 'xbool'::text, 'xcase'::text, 'xcast'::text, 'xcol'::text, 'xex'::text, 'xfunc'::text, 'xin'::text, 'xisnull'::text, 'xnull'::text, 'xnum'::text, 'xop'::text, 'xser'::text, 'xstr'::text, 'xsubq'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing query.case_branch via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="query.table.case-branch"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="query.table.expression"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="query.table.from-relation"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="query.table.order-by-item"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="query.table.select-item"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="query.table.stored-query"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.table.from-relation" xreflabel="query.from_relation"> \r
- <title>from_relation</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>table_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>class_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>subquery</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.stored-query"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>function_call</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.expression"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>table_alias</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_relation</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.from-relation"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>join_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>on_clause</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.expression"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on from_relation</title>\r
- \r
- <varlistentry>\r
- <term>good_join_type</term>\r
- <listitem><para>CHECK (((join_type IS NULL) OR (join_type = ANY (ARRAY['INNER'::text, 'LEFT'::text, 'RIGHT'::text, 'FULL'::text]))))</para></listitem>\r
- </varlistentry>\r
- \r
- \r
- \r
- <varlistentry>\r
- <term>join_or_core</term>\r
- <listitem><para>CHECK (((((parent_relation IS NULL) AND (join_type IS NULL)) AND (on_clause IS NULL)) OR (((parent_relation IS NOT NULL) AND (join_type IS NOT NULL)) AND (on_clause IS NOT NULL))))</para></listitem>\r
- </varlistentry>\r
- \r
- \r
- \r
- <varlistentry>\r
- <term>relation_type</term>\r
- <listitem><para>CHECK ((type = ANY (ARRAY['RELATION'::text, 'SUBQUERY'::text, 'FUNCTION'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing query.from_relation via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="query.table.from-relation"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="query.table.record-column"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="query.table.stored-query"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.table.function-param-def" xreflabel="query.function_param_def"> \r
- <title>function_param_def</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>function_id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.function-sig"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>datatype</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.datatype"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on function_param_def</title>\r
- \r
- <varlistentry>\r
- <term>qfpd_pos_seq_no</term>\r
- <listitem><para>CHECK ((seq_no > 0))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.table.function-sig" xreflabel="query.function_sig"> \r
- <title>function_sig</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>function_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>return_type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.datatype"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>is_aggregate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on function_sig</title>\r
- \r
- <varlistentry>\r
- <term>qfd_rtn_or_aggr</term>\r
- <listitem><para>CHECK (((return_type IS NULL) OR (is_aggregate = false)))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing query.expression via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="query.table.expression"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="query.table.function-param-def"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.table.order-by-item" xreflabel="query.order_by_item"> \r
- <title>order_by_item</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stored_query</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.stored-query"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>expression</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.expression"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.table.query-sequence" xreflabel="query.query_sequence"> \r
- <title>query_sequence</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_query</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.stored-query"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>child_query</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.stored-query"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.table.record-column" xreflabel="query.record_column"> \r
- <title>record_column</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>from_relation</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.from-relation"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>column_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>column_type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.datatype"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.table.select-item" xreflabel="query.select_item"> \r
- <title>select_item</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stored_query</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.stored-query"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>expression</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.expression"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>column_alias</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>grouped_by</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.table.stored-query" xreflabel="query.stored_query"> \r
- <title>stored_query</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>use_all</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>use_distinct</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>from_clause</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.from-relation"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>where_clause</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.expression"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>having_clause</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.expression"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>limit_count</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.expression"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>offset_count</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.expression"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on stored_query</title>\r
- \r
- <varlistentry>\r
- <term>query_type</term>\r
- <listitem><para>CHECK ((type = ANY (ARRAY['SELECT'::text, 'UNION'::text, 'INTERSECT'::text, 'EXCEPT'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing action.fieldset via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="action.table.fieldset"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="query.table.expression"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="query.table.from-relation"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="query.table.order-by-item"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="query.table.query-sequence"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="query.table.select-item"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="query.table.subfield" xreflabel="query.subfield"> \r
- <title>subfield</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>composite_type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.datatype"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>seq_no</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>subfield_type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="query.table.datatype"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on subfield</title>\r
- \r
- <varlistentry>\r
- <term>qsf_pos_seq_no</term>\r
- <listitem><para>CHECK ((seq_no > 0))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="reporter.schema">\r
- <title>Schema reporter</title>\r
- \r
- <simplesect id="reporter.view.circ-type" xreflabel="reporter.circ_type"> \r
- <title>circ_type</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="reporter.view.currently-running" xreflabel="reporter.currently_running"> \r
- <title>currently_running</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>runner_barcode</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>run_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>scheduled_wait_time</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="reporter.view.demographic" xreflabel="reporter.demographic"> \r
- <title>demographic</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dob</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>general_division</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="reporter.view.hold-request-record" xreflabel="reporter.hold_request_record"> \r
- <title>hold_request_record</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>hold_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>bib_record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="reporter.table.materialized-simple-record" xreflabel="reporter.materialized_simple_record"> \r
- <title>materialized_simple_record</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fingerprint</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>quality</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>tcn_source</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>tcn_value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>author</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>publisher</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pubdate</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>isbn</entry>\r
- <entry>text[]</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>issn</entry>\r
- <entry>text[]</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="reporter.view.old-super-simple-record" xreflabel="reporter.old_super_simple_record"> \r
- <title>old_super_simple_record</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fingerprint</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>quality</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>tcn_source</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>tcn_value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>author</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>publisher</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pubdate</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>isbn</entry>\r
- <entry>text[]</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>issn</entry>\r
- <entry>text[]</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="reporter.table.output-folder" xreflabel="reporter.output_folder"> \r
- <title>output_folder</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="reporter.table.output-folder"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>shared</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>share_with</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing reporter.output_folder via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="reporter.table.output-folder"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="reporter.table.schedule"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="reporter.view.overdue-circs" xreflabel="reporter.overdue_circs"> \r
- <title>overdue_circs</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_start</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_finish</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>unrecovered</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target_copy</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>renewal_remaining</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>due_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stop_fines_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>duration</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fine_interval</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recurring_fine</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_fine</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>phone_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>desk_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>duration_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recurring_fine_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_fine_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stop_fines</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>workstation</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_workstation</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_scan_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_circ</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="reporter.view.overdue-reports" xreflabel="reporter.overdue_reports"> \r
- <title>overdue_reports</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>runner_barcode</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>run_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>scheduled_wait_time</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="reporter.view.pending-reports" xreflabel="reporter.pending_reports"> \r
- <title>pending_reports</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>runner_barcode</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>run_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>scheduled_wait_time</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="reporter.table.report" xreflabel="reporter.report"> \r
- <title>report</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT ''::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT ''::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>template</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="reporter.table.template"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>data</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>folder</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="reporter.table.report-folder"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recur</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recurrence</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing reporter.schedule via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="reporter.table.schedule"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="reporter.table.report-folder" xreflabel="reporter.report_folder"> \r
- <title>report_folder</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="reporter.table.report-folder"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>shared</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>share_with</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing reporter.report via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="reporter.table.report"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="reporter.table.report-folder"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="reporter.table.schedule" xreflabel="reporter.schedule"> \r
- <title>schedule</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>report</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="reporter.table.report"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>folder</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="reporter.table.output-folder"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>runner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>run_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>start_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>complete_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>email</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>excel_format</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>html_format</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>csv_format</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>chart_pie</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>chart_bar</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>chart_line</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>error_code</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>error_text</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="reporter.view.simple-record" xreflabel="reporter.simple_record"> \r
- <title>simple_record</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>metarecord</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fingerprint</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>quality</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>tcn_source</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>tcn_value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>uniform_title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>author</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>publisher</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pubdate</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>series_title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>series_statement</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>summary</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>isbn</entry>\r
- <entry>text[]</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>issn</entry>\r
- <entry>text[]</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>topic_subject</entry>\r
- <entry>text[]</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>geographic_subject</entry>\r
- <entry>text[]</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>genre</entry>\r
- <entry>text[]</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name_subject</entry>\r
- <entry>text[]</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>corporate_subject</entry>\r
- <entry>text[]</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>external_uri</entry>\r
- <entry>text[]</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="reporter.view.super-simple-record" xreflabel="reporter.super_simple_record"> \r
- <title>super_simple_record</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fingerprint</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>quality</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>tcn_source</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>tcn_value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>author</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>publisher</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pubdate</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>isbn</entry>\r
- <entry>text[]</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>issn</entry>\r
- <entry>text[]</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="reporter.table.template" xreflabel="reporter.template"> \r
- <title>template</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>data</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>folder</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="reporter.table.template-folder"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing reporter.report via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="reporter.table.report"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="reporter.table.template-folder" xreflabel="reporter.template_folder"> \r
- <title>template_folder</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="reporter.table.template-folder"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>shared</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>share_with</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing reporter.template via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="reporter.table.template"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="reporter.table.template-folder"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="reporter.view.xact-billing-totals" xreflabel="reporter.xact_billing_totals"> \r
- <title>xact_billing_totals</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>unvoided</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>voided</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="reporter.view.xact-paid-totals" xreflabel="reporter.xact_paid_totals"> \r
- <title>xact_paid_totals</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>xact</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>unvoided</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>voided</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>total</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="search.schema">\r
- <title>Schema search</title>\r
- \r
- <simplesect id="search.table.relevance-adjustment" xreflabel="search.relevance_adjustment"> \r
- <title>relevance_adjustment</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>active</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>field</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.metabib-field"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>bump_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>multiplier</entry>\r
- <entry>numeric</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1.0;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on relevance_adjustment</title>\r
- \r
- <varlistentry>\r
- <term>relevance_adjustment _bump_type_check</term>\r
- <listitem><para>CHECK ((bump_type = ANY (ARRAY['word_order'::text, 'first_word'::text, 'full_match'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="serial.schema">\r
- <title>Schema serial</title>\r
- \r
- <simplesect id="serial.table.basic-summary" xreflabel="serial.basic_summary"> \r
- <title>basic_summary</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>distribution</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="serial.table.distribution"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>generated_coverage</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>textual_holdings</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>show_generated</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="serial.table.caption-and-pattern" xreflabel="serial.caption_and_pattern"> \r
- <title>caption_and_pattern</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>subscription</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="serial.table.subscription"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>start_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>end_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>active</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pattern_code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>enum_1</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>enum_2</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>enum_3</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>enum_4</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>enum_5</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>enum_6</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>chron_1</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>chron_2</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>chron_3</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>chron_4</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>chron_5</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on caption_and_pattern</title>\r
- \r
- <varlistentry>\r
- <term>cap_type</term>\r
- <listitem><para>CHECK ((type = ANY (ARRAY['basic'::text, 'supplement'::text, 'index'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing serial.issuance via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.issuance"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="serial.table.distribution" xreflabel="serial.distribution"> \r
- <title>distribution</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record_entry</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="serial.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>summary_method</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>subscription</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="serial.table.subscription"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holding_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>receive_call_number</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="asset.table.call-number"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>receive_unit_template</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="asset.table.copy-template"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>bind_call_number</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="asset.table.call-number"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>bind_unit_template</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="asset.table.copy-template"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>unit_label_prefix</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>unit_label_suffix</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on distribution</title>\r
- \r
- <varlistentry>\r
- <term>sdist_summary_method_check</term>\r
- <listitem><para>CHECK (((summary_method IS NULL) OR (summary_method = ANY (ARRAY['add_to_sre'::text, 'merge_with_sre'::text, 'use_sre_only'::text, 'use_sdist_only'::text]))))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing serial.basic_summary via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.basic-summary"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.distribution-note"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.index-summary"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.stream"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.supplement-summary"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="serial.table.distribution-note" xreflabel="serial.distribution_note"> \r
- <title>distribution_note</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>distribution</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="serial.table.distribution"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pub</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="serial.table.index-summary" xreflabel="serial.index_summary"> \r
- <title>index_summary</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>distribution</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="serial.table.distribution"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>generated_coverage</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>textual_holdings</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>show_generated</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="serial.table.issuance" xreflabel="serial.issuance"> \r
- <title>issuance</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>subscription</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="serial.table.subscription"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>date_published</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>caption_and_pattern</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="serial.table.caption-and-pattern"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holding_code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holding_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holding_link_id</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on issuance</title>\r
- \r
- <varlistentry>\r
- <term>valid_holding_type</term>\r
- <listitem><para>CHECK (((holding_type IS NULL) OR (holding_type = ANY (ARRAY['basic'::text, 'supplement'::text, 'index'::text]))))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing serial.item via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.item"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="serial.table.item" xreflabel="serial.item"> \r
- <title>item</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>issuance</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="serial.table.issuance"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stream</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="serial.table.stream"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>unit</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="serial.table.unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>uri</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="asset.table.uri"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>date_expected</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>date_received</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>status</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT 'Expected'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>shadowed</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on item</title>\r
- \r
- <varlistentry>\r
- <term>valid_status</term>\r
- <listitem><para>CHECK ((status = ANY (ARRAY['Bindery'::text, 'Bound'::text, 'Claimed'::text, 'Discarded'::text, 'Expected'::text, 'Not Held'::text, 'Not Published'::text, 'Received'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing acq.serial_claim via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="acq.table.serial-claim"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.item-note"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="serial.table.item-note" xreflabel="serial.item_note"> \r
- <title>item_note</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="serial.table.item"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pub</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="serial.table.record-entry" xreflabel="serial.record_entry"> \r
- <title>record_entry</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>source</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>active</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deleted</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>marc</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>last_xact_id</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing serial.distribution via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.distribution"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="serial.table.routing-list-user" xreflabel="serial.routing_list_user"> \r
- <title>routing_list_user</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stream</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="serial.table.stream"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pos</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>reader</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>department</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on routing_list_user</title>\r
- \r
- <varlistentry>\r
- <term>reader_or_dept</term>\r
- <listitem><para>CHECK ((((reader IS NOT NULL) AND (department IS NULL)) OR ((reader IS NULL) AND (department IS NOT NULL))))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="serial.table.stream" xreflabel="serial.stream"> \r
- <title>stream</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>distribution</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="serial.table.distribution"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>routing_label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing serial.item via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.item"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.routing-list-user"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="serial.table.subscription" xreflabel="serial.subscription"> \r
- <title>subscription</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>start_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>end_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record_entry</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>expected_date_offset</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing serial.caption_and_pattern via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.caption-and-pattern"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.distribution"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.issuance"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.subscription-note"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="serial.table.subscription-note" xreflabel="serial.subscription_note"> \r
- <title>subscription_note</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>subscription</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="serial.table.subscription"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pub</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="serial.table.supplement-summary" xreflabel="serial.supplement_summary"> \r
- <title>supplement_summary</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>distribution</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="serial.table.distribution"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>generated_coverage</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>textual_holdings</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>show_generated</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="serial.table.unit" xreflabel="serial.unit"> \r
- <title>unit</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('asset.copy_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>call_number</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="asset.table.call-number"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_number</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>status</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>location</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 1;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>loan_duration</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fine_level</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>age_protect</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circulate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deposit</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ref</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holdable</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deposit_amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 0.00;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>price</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>barcode</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_modifier</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_as_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dummy_title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dummy_author</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>alert_message</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_visible</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deleted</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>floating</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dummy_isbn</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>status_changed_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>mint_condition</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT true;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cost</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>sort_key</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>detailed_contents</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>summary_contents</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on unit</title>\r
- \r
- <varlistentry>\r
- <term>copy_fine_level_check</term>\r
- <listitem><para>CHECK ((fine_level = ANY (ARRAY[1, 2, 3])))</para></listitem>\r
- </varlistentry>\r
- \r
- \r
- \r
- <varlistentry>\r
- <term>copy_loan_duration_check</term>\r
- <listitem><para>CHECK ((loan_duration = ANY (ARRAY[1, 2, 3])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing serial.item via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="serial.table.item"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="staging.schema">\r
- <title>Schema staging</title>\r
- \r
- <simplesect id="staging.table.billing-address-stage" xreflabel="staging.billing_address_stage"> \r
- <title>billing_address_stage</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>row_id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('staging.mailing_address_ stage_row_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>row_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usrname</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>street1</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>street2</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>city</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT ''::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>state</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'OK'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>country</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'US'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>post_code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>complete</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="staging.table.card-stage" xreflabel="staging.card_stage"> \r
- <title>card_stage</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>row_id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>row_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usrname</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>barcode</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>complete</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="staging.table.mailing-address-stage" xreflabel="staging.mailing_address_stage"> \r
- <title>mailing_address_stage</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>row_id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>row_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usrname</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>street1</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>street2</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>city</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT ''::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>state</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'OK'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>country</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'US'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>post_code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>complete</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="staging.table.statcat-stage" xreflabel="staging.statcat_stage"> \r
- <title>statcat_stage</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>row_id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>row_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usrname</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>statcat</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>complete</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="staging.table.user-stage" xreflabel="staging.user_stage"> \r
- <title>user_stage</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>row_id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>row_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usrname</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>profile</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>email</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>passwd</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident_type</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT 3;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>first_given_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>second_given_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>family_name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>day_phone</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>evening_phone</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>home_ou</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT 2;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dob</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>complete</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="stats.schema">\r
- <title>Schema stats</title>\r
- \r
- <simplesect id="stats.view.fleshed-call-number" xreflabel="stats.fleshed_call_number"> \r
- <title>fleshed_call_number</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deleted</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label_class</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>label_sortkey</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date_day</entry>\r
- <entry>date</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date_day</entry>\r
- <entry>date</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date_hour</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date_hour</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item_lang</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item_form</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="stats.view.fleshed-circulation" xreflabel="stats.fleshed_circulation"> \r
- <title>fleshed_circulation</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>usr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_start</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xact_finish</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>unrecovered</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>target_copy</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_staff</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>renewal_remaining</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>due_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stop_fines_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>duration</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fine_interval</entry>\r
- <entry>interval</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recurring_fine</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_fine</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>phone_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>desk_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_renewal</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>duration_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>recurring_fine_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>max_fine_rule</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>stop_fines</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>workstation</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_workstation</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>checkin_scan_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>parent_circ</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>start_date_day</entry>\r
- <entry>date</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>finish_date_day</entry>\r
- <entry>date</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>start_date_hour</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>finish_date_hour</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>call_number_label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item_lang</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item_form</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="stats.view.fleshed-copy" xreflabel="stats.fleshed_copy"> \r
- <title>fleshed_copy</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>creator</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>call_number</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>editor</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_number</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>status</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>location</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>loan_duration</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>fine_level</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>age_protect</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circulate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deposit</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ref</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holdable</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deposit_amount</entry>\r
- <entry>numeric(6,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>price</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>barcode</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_modifier</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_as_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dummy_title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dummy_author</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>alert_message</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_visible</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deleted</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>floating</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>dummy_isbn</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>status_changed_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>mint_condition</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>cost</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date_day</entry>\r
- <entry>date</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date_day</entry>\r
- <entry>date</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_date_hour</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>edit_date_hour</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>call_number_label</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item_lang</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item_form</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- <section id="vandelay.schema">\r
- <title>Schema vandelay</title>\r
- \r
- <simplesect id="vandelay.table.authority-attr-definition" xreflabel="vandelay.authority_attr_definition"> \r
- <title>authority_attr_definition</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xpath</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>remove</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT ''::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing vandelay.queued_authority_record_attr via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.queued-authority-record-attr"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="vandelay.table.authority-match" xreflabel="vandelay.authority_match"> \r
- <title>authority_match</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>matched_attr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="vandelay.table.queued-authority-record-attr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>queued_record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="vandelay.table.queued-authority-record"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>eg_record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="authority.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="vandelay.table.authority-queue" xreflabel="vandelay.authority_queue"> \r
- <title>authority_queue</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('vandelay.queue_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>complete</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>queue_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'authority'::text;\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on authority_queue</title>\r
- \r
- <varlistentry>\r
- <term>authority_queue_ queue_type_check</term>\r
- <listitem><para>CHECK ((queue_type = 'authority'::text))</para></listitem>\r
- </varlistentry>\r
- \r
- \r
- \r
- <varlistentry>\r
- <term>queue_queue_type_check</term>\r
- <listitem><para>CHECK ((queue_type = ANY (ARRAY['bib'::text, 'authority'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing vandelay.queued_authority_record via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.queued-authority-record"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="vandelay.table.bib-attr-definition" xreflabel="vandelay.bib_attr_definition"> \r
- <title>bib_attr_definition</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>serial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>code</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>description</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>xpath</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>remove</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT ''::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ident</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing vandelay.queued_bib_record_attr via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.queued-bib-record-attr"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="vandelay.table.bib-match" xreflabel="vandelay.bib_match"> \r
- <title>bib_match</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>field_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>matched_attr</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="vandelay.table.queued-bib-record-attr"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>queued_record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="vandelay.table.queued-bib-record"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>eg_record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on bib_match</title>\r
- \r
- <varlistentry>\r
- <term>bib_match_field_type_check</term>\r
- <listitem><para>CHECK ((field_type = ANY (ARRAY['isbn'::text, 'tcn_value'::text, 'id'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="vandelay.table.bib-queue" xreflabel="vandelay.bib_queue"> \r
- <title>bib_queue</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('vandelay.queue_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>complete</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>queue_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'bib'::text;\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>item_attr_def</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="vandelay.table.import-item-attr-definition"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on bib_queue</title>\r
- \r
- <varlistentry>\r
- <term>bib_queue_queue_type_check</term>\r
- <listitem><para>CHECK ((queue_type = 'bib'::text))</para></listitem>\r
- </varlistentry>\r
- \r
- \r
- \r
- <varlistentry>\r
- <term>queue_queue_type_check</term>\r
- <listitem><para>CHECK ((queue_type = ANY (ARRAY['bib'::text, 'authority'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing vandelay.queued_bib_record via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.queued-bib-record"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="vandelay.table.import-bib-trash-fields" xreflabel="vandelay.import_bib_trash_fields"> \r
- <title>import_bib_trash_fields</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>field</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="vandelay.table.import-item" xreflabel="vandelay.import_item"> \r
- <title>import_item</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="vandelay.table.queued-bib-record"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>definition</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="vandelay.table.import-item-attr-definition"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_lib</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>call_number</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_number</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>status</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>location</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circulate</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deposit</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deposit_amount</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ref</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holdable</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>price</entry>\r
- <entry>numeric(8,2)</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>barcode</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_modifier</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_as_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>alert_message</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pub_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>priv_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_visible</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="vandelay.table.import-item-attr-definition" xreflabel="vandelay.import_item_attr_definition"> \r
- <title>import_item_attr_definition</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>tag</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>keep</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owning_lib</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_lib</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>call_number</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>copy_number</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>status</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>location</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circulate</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deposit</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>deposit_amount</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>ref</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>holdable</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>price</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>barcode</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_modifier</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>circ_as_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>alert_message</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>opac_visible</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pub_note_title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>pub_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>priv_note_title</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>priv_note</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing vandelay.bib_queue via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.bib-queue"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.import-item"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="vandelay.table.merge-profile" xreflabel="vandelay.merge_profile"> \r
- <title>merge_profile</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.org-unit"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>add_spec</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>replace_spec</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>strip_spec</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>preserve_spec</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on merge_profile</title>\r
- \r
- <varlistentry>\r
- <term>add_replace_strip_or_preserve</term>\r
- <listitem><para>CHECK ((((preserve_spec IS NOT NULL) OR (replace_spec IS NOT NULL)) OR ((preserve_spec IS NULL) AND (replace_spec IS NULL))))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="vandelay.table.queue" xreflabel="vandelay.queue"> \r
- <title>queue</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>owner</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="actor.table.usr"/>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>name</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>complete</entry>\r
- <entry>boolean</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT false;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>queue_type</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- UNIQUE#1\r
- ;\r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'bib'::text;\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on queue</title>\r
- \r
- <varlistentry>\r
- <term>queue_queue_type_check</term>\r
- <listitem><para>CHECK ((queue_type = ANY (ARRAY['bib'::text, 'authority'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="vandelay.table.queued-authority-record" xreflabel="vandelay.queued_authority_record"> \r
- <title>queued_authority_record</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('vandelay.queued_record_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>import_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>purpose</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'import'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>marc</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>queue</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="vandelay.table.authority-queue"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>imported_as</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="authority.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on queued_authority_record</title>\r
- \r
- <varlistentry>\r
- <term>queued_record_purpose_check</term>\r
- <listitem><para>CHECK ((purpose = ANY (ARRAY['import'::text, 'overlay'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing vandelay.authority_match via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.authority-match"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.queued-authority-record-attr"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="vandelay.table.queued-authority-record-attr" xreflabel="vandelay.queued_authority_record_attr"> \r
- <title>queued_authority_record_attr</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="vandelay.table.queued-authority-record"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>field</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="vandelay.table.authority-attr-definition"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>attr_value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing vandelay.authority_match via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.authority-match"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="vandelay.table.queued-bib-record" xreflabel="vandelay.queued_bib_record"> \r
- <title>queued_bib_record</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- DEFAULT nextval('vandelay.queued_record_id_seq'::regclass);\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>import_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>purpose</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'import'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>marc</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>queue</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="vandelay.table.bib-queue"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>bib_source</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="config.table.bib-source"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>imported_as</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- <xref linkend="biblio.table.record-entry"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on queued_bib_record</title>\r
- \r
- <varlistentry>\r
- <term>queued_record_purpose_check</term>\r
- <listitem><para>CHECK ((purpose = ANY (ARRAY['import'::text, 'overlay'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing vandelay.bib_match via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.bib-match"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.import-item"/></para>\r
- </listitem>\r
- \r
- \r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.queued-bib-record-attr"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="vandelay.table.queued-bib-record-attr" xreflabel="vandelay.queued_bib_record_attr"> \r
- <title>queued_bib_record_attr</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>record</entry>\r
- <entry>bigint</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="vandelay.table.queued-bib-record"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>field</entry>\r
- <entry>integer</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- \r
- <xref linkend="vandelay.table.bib-attr-definition"/>\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>attr_value</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- \r
- <itemizedlist>\r
- <title>\r
- Tables referencing vandelay.bib_match via Foreign Key Constraints\r
- </title>\r
- \r
- <listitem>\r
- <para><xref linkend="vandelay.table.bib-match"/></para>\r
- </listitem>\r
- \r
- </itemizedlist>\r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- <simplesect id="vandelay.table.queued-record" xreflabel="vandelay.queued_record"> \r
- <title>queued_record</title>\r
- <informaltable>\r
- <tgroup cols="3">\r
- <colspec colnum="1" colname="col1" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="col2" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="col3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Field</entry>\r
- <entry>Data Type</entry>\r
- <entry>Constraints and References</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- \r
- <row>\r
- <entry>id</entry>\r
- <entry>bigserial</entry>\r
- <entry><para>\r
- \r
- \r
- PRIMARY KEY\r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>create_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT now();\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>import_time</entry>\r
- <entry>timestamp with time zone</entry>\r
- <entry><para>\r
- \r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>purpose</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- DEFAULT 'import'::text;\r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- <row>\r
- <entry>marc</entry>\r
- <entry>text</entry>\r
- <entry><para>\r
- \r
- \r
- NOT NULL;\r
- \r
- \r
- \r
- </para></entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- <para>\r
- \r
- \r
- <variablelist>\r
- <title>Constraints on queued_record</title>\r
- \r
- <varlistentry>\r
- <term>queued_record_purpose_check</term>\r
- <listitem><para>CHECK ((purpose = ANY (ARRAY['import'::text, 'overlay'::text])))</para></listitem>\r
- </varlistentry>\r
- \r
- </variablelist>\r
- \r
- \r
- \r
- \r
- \r
- </para>\r
- </simplesect>\r
- \r
- </section>\r
- \r
- </chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<chapter xml:id="opensrf" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
- <chapterinfo>\r
- <title>OpenSRF</title>\r
- </chapterinfo>\r
- <abstract id="openSRF_abstract">\r
- <simpara>One of the claimed advantages of\r
- Evergreen over alternative integrated library systems is the underlying Open\r
- Service Request Framework (OpenSRF, pronounced "open surf") architecture. This\r
- article introduces OpenSRF, demonstrates how to build OpenSRF services through\r
- simple code examples, and explains the technical foundations on which OpenSRF\r
- is built. This chapter was taken from Dan Scott's <emphasis>Easing gently into OpenSRF</emphasis> article, June, 2010.</simpara>\r
- </abstract>\r
- <section id="_introducing_opensrf">\r
- <title>Introducing OpenSRF</title>\r
- <indexterm><primary>OpenSRF</primary></indexterm>\r
- <simpara>OpenSRF is a message routing network that offers scalability and failover\r
- support for individual services and entire servers with minimal development and\r
- deployment overhead. You can use OpenSRF to build loosely-coupled applications\r
- that can be deployed on a single server or on clusters of geographically\r
- distributed servers using the same code and minimal configuration changes.\r
- Although copyright statements on some of the OpenSRF code date back to Mike\r
- Rylander’s original explorations in 2000, Evergreen was the first major\r
- application to be developed with, and to take full advantage of, the OpenSRF\r
- architecture starting in 2004. The first official release of OpenSRF was 0.1 in\r
- February 2005 (<ulink url="http://evergreen-ils.org/blog/?p=21">http://evergreen-ils.org/blog/?p=21</ulink>), but OpenSRF’s development\r
- continues a steady pace of enhancement and refinement, with the release of\r
- 1.0.0 in October 2008 and the most recent release of 1.2.2 in February 2010.</simpara>\r
- <simpara>OpenSRF is a distinct break from the architectural approach used by previous\r
- library systems and has more in common with modern Web applications. The\r
- traditional "scale-up" approach to serve more transactions is to purchase a\r
- server with more CPUs and more RAM, possibly splitting the load between a Web\r
- server, a database server, and a business logic server. Evergreen, however, is\r
- built on the Open Service Request Framework (OpenSRF) architecture, which\r
- firmly embraces the "scale-out" approach of spreading transaction load over\r
- cheap commodity servers. The <ulink url="http://evergreen-ils.org/blog/?p=56">initial GPLS\r
- PINES hardware cluster</ulink>, while certainly impressive, may have offered the\r
- misleading impression that Evergreen requires a lot of hardware to run.\r
- However, Evergreen and OpenSRF easily scale down to a single server; many\r
- Evergreen libraries run their entire library system on a single server, and\r
- most OpenSRF and Evergreen development occurs on a virtual machine running on a\r
- single laptop or desktop image.</simpara>\r
- <simpara>Another common concern is that the flexibility of OpenSRF’s distributed\r
- architecture makes it complex to configure and to write new applications. This\r
- article demonstrates that OpenSRF itself is an extremely simple architecture on\r
- which one can easily build applications of many kinds – not just library\r
- applications – and that you can use a number of different languages to call and\r
- implement OpenSRF methods with a minimal learning curve. With an application\r
- built on OpenSRF, when you identify a bottleneck in your application’s business\r
- logic layer, you can adjust the number of the processes serving that particular\r
- bottleneck on each of your servers; or if the problem is that your service is\r
- resource-hungry, you could add an inexpensive server to your cluster and\r
- dedicate it to running that resource-hungry service.</simpara>\r
- <simplesect id="_programming_language_support">\r
- <title>Programming language support</title>\r
- <simpara>If you need to develop an entirely new OpenSRF service, you can choose from a\r
- number of different languages in which to implement that service. OpenSRF\r
- client language bindings have been written for C, Java, JavaScript, Perl, and\r
- Python, and service language bindings have been written for C, Perl, and Python.\r
- This article uses Perl examples as a lowest common denominator programming\r
- language. Writing an OpenSRF binding for another language is a relatively small\r
- task if that language offers libraries that support the core technologies on\r
- which OpenSRF depends:</simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- <ulink url="http://tools.ietf.org/html/rfc3920">Extensible Messaging and Presence\r
- Protocol</ulink> (XMPP, sometimes referred to as Jabber) - provides the base messaging\r
- infrastructure between OpenSRF clients and services\r
- </simpara>\r
- <indexterm><primary>XMPP</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <ulink url="http://json.org">JavaScript Object Notation</ulink> (JSON) - serializes the content\r
- of each XMPP message in a standardized and concise format\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <ulink url="http://memcached.org">memcached</ulink> - provides the caching service\r
- </simpara>\r
- <indexterm><primary>memcached</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <ulink url="http://tools.ietf.org/html/rfc5424">syslog</ulink> - the standard UNIX logging\r
- service\r
- </simpara>\r
- <indexterm><primary>syslog</primary></indexterm>\r
- </listitem>\r
- </itemizedlist>\r
- <simpara>Unfortunately, the\r
- <ulink url="http://evergreen-ils.org/dokuwiki/doku.php?id=osrf-devel:primer">OpenSRF\r
- reference documentation</ulink>, although augmented by the\r
- <ulink url="http://evergreen-ils.org/dokuwiki/doku.php?id=osrf-devel:terms">OpenSRF\r
- glossary</ulink>, blog posts like <ulink url="http://evergreen-ils.org/blog/?p=36">the description\r
- of OpenSRF and Jabber</ulink>, and even this article, is not a sufficient substitute\r
- for a complete specification on which one could implement a language binding.\r
- The recommended option for would-be developers of another language binding is\r
- to use the Python implementation as the cleanest basis for a port to another\r
- language.</simpara>\r
- <indexterm><primary>Python</primary></indexterm>\r
- </simplesect>\r
- </section>\r
- <section id="writing_an_opensrf_service">\r
- <title>Writing an OpenSRF Service</title>\r
- <simpara>Imagine an application architecture in which 10 lines of Perl or Python, using\r
- the data types native to each language, are enough to implement a method that\r
- can then be deployed and invoked seamlessly across hundreds of servers. You\r
- have just imagined developing with OpenSRF – it is truly that simple. Under the\r
- covers, of course, the OpenSRF language bindings do an incredible amount of\r
- work on behalf of the developer. An OpenSRF application consists of one or more\r
- OpenSRF services that expose methods: for example, the <literal>opensrf.simple-text</literal>\r
- <ulink url="http://svn.open-ils.org/trac/OpenSRF/browser/trunk/src/perl/lib/OpenSRF/Application/Demo/SimpleText.pm">demonstration\r
- service</ulink> exposes the <literal>opensrf.simple-text.split()</literal> and\r
- <literal>opensrf.simple-text.reverse()</literal> methods. Each method accepts zero or more\r
- arguments and returns zero or one results. The data types supported by OpenSRF\r
- arguments and results are typical core language data types: strings, numbers,\r
- booleans, arrays, and hashes.</simpara>\r
- <simpara>To implement a new OpenSRF service, perform the following steps:</simpara>\r
- <orderedlist numeration="arabic">\r
- <listitem>\r
- <simpara>\r
- Include the base OpenSRF support libraries\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- Write the code for each of your OpenSRF methods as separate procedures\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- Register each method\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- Add the service definition to the OpenSRF configuration files\r
- </simpara>\r
- </listitem>\r
- </orderedlist>\r
- <simpara>For example, the following code implements an OpenSRF service. The service\r
- includes one method named <literal>opensrf.simple-text.reverse()</literal> that accepts one\r
- string as input and returns the reversed version of that string:</simpara>\r
-<programlisting language="perl" linenumbering="unnumbered">\r
-#!/usr/bin/perl\r
-\r
-package OpenSRF::Application::Demo::SimpleText;\r
-\r
-use strict;\r
-\r
-use OpenSRF::Application;\r
-use parent qw/OpenSRF::Application/;\r
-\r
-sub text_reverse {\r
- my ($self , $conn, $text) = @_;\r
- my $reversed_text = scalar reverse($text);\r
- return $reversed_text;\r
-}\r
-\r
-__PACKAGE__->register_method(\r
- method => 'text_reverse',\r
- api_name => 'opensrf.simple-text.reverse'\r
-);\r
-</programlisting>\r
- <simpara>Ten lines of code, and we have a complete OpenSRF service that exposes a single\r
- method and could be deployed quickly on a cluster of servers to meet your\r
- application’s ravenous demand for reversed strings! If you’re unfamiliar with\r
- Perl, the <literal>use OpenSRF::Application; use parent qw/OpenSRF::Application/;</literal>\r
- lines tell this package to inherit methods and properties from the\r
- <literal>OpenSRF::Application</literal> module. For example, the call to\r
- <literal>__PACKAGE__->register_method()</literal> is defined in <literal>OpenSRF::Application</literal> but due to\r
- inheritance is available in this package (named by the special Perl symbol\r
- <literal>__PACKAGE__</literal> that contains the current package name). The <literal>register_method()</literal>\r
- procedure is how we introduce a method to the rest of the OpenSRF world.</simpara>\r
- <simplesect id="serviceRegistration">\r
- <title>Registering a service with the OpenSRF configuration files</title>\r
- <simpara>Two files control most of the configuration for OpenSRF:</simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- <literal>opensrf.xml</literal> contains the configuration for the service itself, as well as\r
- a list of which application servers in your OpenSRF cluster should start\r
- the service.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>opensrf_core.xml</literal> (often referred to as the "bootstrap configuration"\r
- file) contains the OpenSRF networking information, including the XMPP server\r
- connection credentials for the public and private routers. You only need to touch\r
- this for a new service if the new service needs to be accessible via the\r
- public router.\r
- </simpara>\r
- <indexterm><primary>configuration files</primary><secondary>opensrf_core.xml</secondary></indexterm>\r
- </listitem>\r
- </itemizedlist>\r
- <simpara>Begin by defining the service itself in <literal>opensrf.xml</literal>. To register the\r
- <literal>opensrf.simple-text</literal> service, add the following section to the <literal><apps></literal>\r
- element (corresponding to the XPath <literal>/opensrf/default/apps/</literal>):</simpara>\r
- <indexterm><primary>configuration files</primary><secondary>opensrf.xml</secondary></indexterm>\r
-<programlisting language="xml" linenumbering="unnumbered">\r
-<apps>\r
- <opensrf.simple-text> <co id="CO1-1"/> \r
- <keepalive>3</keepalive><co id="CO1-2"/> \r
- <stateless>1</stateless><co id="CO1-3"/>\r
- <language>perl</language><co id="CO1-4"/> \r
- <implementation>OpenSRF::Application::Demo::SimpleText</implementation><co id="CO1-5"/> \r
- <max_requests>100</max_requests><co id="CO1-6"/> \r
- <unix_config>\r
- <max_requests>1000</max_requests> <co id="CO1-7"/> \r
- <unix_log>opensrf.simple-text_unix.log</unix_log> <co id="CO1-8"/> \r
- <unix_sock>opensrf.simple-text_unix.sock</unix_sock><co id="CO1-9"/> \r
- <unix_pid>opensrf.simple-text_unix.pid</unix_pid> <co id="CO1-10"/> \r
- <min_children>5</min_children> <co id="CO1-11"/> \r
- <max_children>15</max_children><co id="CO1-12"/> \r
- <min_spare_children>2</min_spare_children><co id="CO1-13"/> \r
- <max_spare_children>5</max_spare_children> <co id="CO1-14"/> \r
- </unix_config>\r
- </opensrf.simple-text>\r
-\r
- <!-- other OpenSRF services registered here... -->\r
-</apps>\r
-</programlisting>\r
- <calloutlist>\r
- <callout arearefs="CO1-1">\r
- <simpara>\r
- The element name is the name that the OpenSRF control scripts use to refer\r
- to the service.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO1-2">\r
- <simpara>\r
- The <literal><keepalive></literal> element specifies the interval (in seconds) between\r
- checks to determine if the service is still running.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO1-3">\r
- <simpara>\r
- The <literal><stateless></literal> element specifies whether OpenSRF clients can call\r
- methods from this service without first having to create a connection to a\r
- specific service backend process for that service. If the value is <literal>1</literal>, then\r
- the client can simply issue a request and the router will forward the request\r
- to an available service and the result will be returned directly to the client.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO1-4">\r
- <simpara>\r
- The <literal><language></literal> element specifies the programming language in which the\r
- service is implemented.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO1-5">\r
- <simpara>\r
- The <literal><implementation></literal> element pecifies the name of the library or module\r
- in which the service is implemented.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO1-6">\r
- <simpara>\r
- (C implementations only): The <literal><max_requests></literal> element, as a direct child\r
- of the service element name, specifies the maximum number of requests a process\r
- serves before it is killed and replaced by a new process.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO1-7">\r
- <simpara>\r
- (Perl implementations only): The <literal><max_requests></literal> element, as a direct\r
- child of the <literal><unix_config></literal> element, specifies the maximum number of requests\r
- a process serves before it is killed and replaced by a new process.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO1-8">\r
- <simpara>\r
- The <literal><unix_log></literal> element specifies the name of the log file for\r
- language-specific log messages such as syntax warnings.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO1-9">\r
- <simpara>\r
- The <literal><unix_sock></literal> element specifies the name of the UNIX socket used for\r
- inter-process communications.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO1-10">\r
- <simpara>\r
- The <literal><unix_pid></literal> element specifies the name of the PID file for the\r
- master process for the service.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO1-11">\r
- <simpara>\r
- The <literal><min_children></literal> element specifies the minimum number of child\r
- processes that should be running at any given time.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO1-12">\r
- <simpara>\r
- The <literal><max_children></literal> element specifies the maximum number of child\r
- processes that should be running at any given time.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO1-13">\r
- <simpara>\r
- The <literal><min_spare_children></literal> element specifies the minimum number of idle\r
- child processes that should be available to handle incoming requests. If there\r
- are fewer than this number of spare child processes, new processes will be\r
- spawned.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO1-14">\r
- <simpara>\r
- The`<max_spare_children>` element specifies the maximum number of idle\r
- child processes that should be available to handle incoming requests. If there\r
- are more than this number of spare child processes, the extra processes will be\r
- killed.\r
- </simpara>\r
- </callout>\r
- </calloutlist>\r
- <simpara>To make the service accessible via the public router, you must also\r
- edit the <literal>opensrf_core.xml</literal> configuration file to add the service to the list\r
- of publicly accessible services:</simpara>\r
- <formalpara><title>Making a service publicly accessible in <literal>opensrf_core.xml</literal></title><para>\r
-<programlisting language="xml" linenumbering="unnumbered">\r
-<router><co id="CO2-1"/> \r
- <!-- This is the public router. On this router, we only register applications\r
- which should be accessible to everyone on the opensrf network -->\r
- <name>router</name>\r
- <domain>public.localhost</domain><co id="CO2-2"/>\r
- <services>\r
- <service>opensrf.math</service>\r
- <service>opensrf.simple-text</service> <co id="CO2-3"/> \r
- </services>\r
-</router>\r
-</programlisting>\r
- </para></formalpara>\r
- <calloutlist>\r
- <callout arearefs="CO2-1">\r
- <simpara>\r
- This section of the <literal>opensrf_core.xml</literal> file is located at XPath\r
- <literal>/config/opensrf/routers/</literal>.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO2-2">\r
- <simpara>\r
- <literal>public.localhost</literal> is the canonical public router domain in the OpenSRF\r
- installation instructions.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO2-3">\r
- <simpara>\r
- Each <literal><service></literal> element contained in the <literal><services></literal> element\r
- offers their services via the public router as well as the private router.\r
- </simpara>\r
- </callout>\r
- </calloutlist>\r
- <simpara>Once you have defined the new service, you must restart the OpenSRF Router\r
- to retrieve the new configuration and start or restart the service itself.</simpara>\r
- </simplesect>\r
- <simplesect id="_calling_an_opensrf_method">\r
- <title>Calling an OpenSRF method</title>\r
- <indexterm><primary>srfsh</primary></indexterm>\r
- <simpara>OpenSRF clients in any supported language can invoke OpenSRF services in any\r
- supported language. So let’s see a few examples of how we can call our fancy\r
- new <literal>opensrf.simple-text.reverse()</literal> method:</simpara>\r
- <simplesect id="_calling_opensrf_methods_from_the_srfsh_client">\r
- <title>Calling OpenSRF methods from the srfsh client</title>\r
- <simpara><literal>srfsh</literal> is a command-line tool installed with OpenSRF that you can use to call\r
- OpenSRF methods. To call an OpenSRF method, issue the <literal>request</literal> command and\r
- pass the OpenSRF service and method name as the first two arguments; then pass\r
- one or more JSON objects delimited by commas as the arguments to the method\r
- being invoked.</simpara>\r
- <simpara>The following example calls the <literal>opensrf.simple-text.reverse</literal> method of the\r
- <literal>opensrf.simple-text</literal> OpenSRF service, passing the string <literal>"foobar"</literal> as the\r
- only method argument:</simpara>\r
-<programlisting language="sh" linenumbering="unnumbered">\r
-$ srfsh\r
-srfsh # request opensrf.simple-text opensrf.simple-text.reverse "foobar"\r
-\r
-Received Data: "raboof"\r
-\r
-=------------------------------------\r
-Request Completed Successfully\r
-Request Time in seconds: 0.016718\r
-=------------------------------------\r
-</programlisting>\r
- </simplesect>\r
- <simplesect id="opensrfIntrospection">\r
- <title>Getting documentation for OpenSRF methods from the srfsh client</title>\r
- <simpara>The <literal>srfsh</literal> client also gives you command-line access to retrieving metadata\r
- about OpenSRF services and methods. For a given OpenSRF method, for example,\r
- you can retrieve information such as the minimum number of required arguments,\r
- the data type and a description of each argument, the package or library in\r
- which the method is implemented, and a description of the method. To retrieve\r
- the documentation for an opensrf method from <literal>srfsh</literal>, issue the <literal>introspect</literal>\r
- command, followed by the name of the OpenSRF service and (optionally) the\r
- name of the OpenSRF method. If you do not pass a method name to the <literal>introspect</literal>\r
- command, <literal>srfsh</literal> lists all of the methods offered by the service. If you pass\r
- a partial method name, <literal>srfsh</literal> lists all of the methods that match that portion\r
- of the method name.</simpara>\r
- <note><simpara>The quality and availability of the descriptive information for each\r
- method depends on the developer to register the method with complete and\r
- accurate information. The quality varies across the set of OpenSRF and\r
- Evergreen APIs, although some effort is being put towards improving the\r
- state of the internal documentation.</simpara></note>\r
-<programlisting language="sh" linenumbering="unnumbered">\r
-srfsh# introspect opensrf.simple-text "opensrf.simple-text.reverse"\r
---> opensrf.simple-text\r
-\r
-Received Data: {\r
- "__c":"opensrf.simple-text",\r
- "__p":{\r
- "api_level":1,\r
- "stream":0, <co id="CO3-1"/>\r
- "object_hint":"OpenSRF_Application_Demo_SimpleText",\r
- "remote":0,\r
- "package":"OpenSRF::Application::Demo::SimpleText", <co id="CO3-2"/>\r
- "api_name":"opensrf.simple-text.reverse",<co id="CO3-3"/>\r
- "server_class":"opensrf.simple-text",\r
- "signature":{ <co id="CO3-4"/>\r
- "params":[ <co id="CO3-5"/>\r
- {\r
- "desc":"The string to reverse",\r
- "name":"text",\r
- "type":"string"\r
- }\r
- ],\r
- "desc":"Returns the input string in reverse order\n", <co id="CO3-6"/>\r
- "return":{ <co id="CO3-7"/>\r
- "desc":"Returns the input string in reverse order",\r
- "type":"string"\r
- }\r
- },\r
- "method":"text_reverse", <co id="CO3-8"/>\r
- "argc":1 <co id="CO3-9"/>\r
- }\r
-}\r
-</programlisting>\r
- <calloutlist>\r
- <callout arearefs="CO3-1">\r
- <simpara>\r
- <literal>stream</literal> denotes whether the method supports streaming responses or not.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO3-2">\r
- <simpara>\r
- <literal>package</literal> identifies which package or library implements the method.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO3-3">\r
- <simpara>\r
- <literal>api_name</literal> identifies the name of the OpenSRF method.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO3-4">\r
- <simpara>\r
- <literal>signature</literal> is a hash that describes the parameters for the method.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO3-5">\r
- <simpara>\r
- <literal>params</literal> is an array of hashes describing each parameter in the method;\r
- each parameter has a description (<literal>desc</literal>), name (<literal>name</literal>), and type (<literal>type</literal>).\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO3-6">\r
- <simpara>\r
- <literal>desc</literal> is a string that describes the method itself.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO3-7">\r
- <simpara>\r
- <literal>return</literal> is a hash that describes the return value for the method; it\r
- contains a description of the return value (<literal>desc</literal>) and the type of the\r
- returned value (<literal>type</literal>).\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO3-8">\r
- <simpara>\r
- <literal>method</literal> identifies the name of the function or method in the source\r
- implementation.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO3-9">\r
- <simpara>\r
- <literal>argc</literal> is an integer describing the minimum number of arguments that\r
- must be passed to this method.\r
- </simpara>\r
- </callout>\r
- </calloutlist>\r
- </simplesect>\r
- <simplesect id="_calling_opensrf_methods_from_perl_applications">\r
- <title>Calling OpenSRF methods from Perl applications</title>\r
- <simpara>To call an OpenSRF method from Perl, you must connect to the OpenSRF service,\r
- issue the request to the method, and then retrieve the results.</simpara>\r
-<programlisting language="perl" linenumbering="unnumbered">\r
-#/usr/bin/perl\r
-use strict;\r
-use OpenSRF::AppSession;\r
-use OpenSRF::System;\r
-\r
-OpenSRF::System->bootstrap_client(config_file => '/openils/conf/opensrf_core.xml');<co id="CO4-1"/>\r
-\r
-my $session = OpenSRF::AppSession->create("opensrf.simple-text");<co id="CO4-2"/>\r
-\r
-print "substring: Accepts a string and a number as input, returns a string\n";\r
-my $result = $session->request("opensrf.simple-text.substring", "foobar", 3);<co id="CO4-3"/>\r
-my $request = $result->gather(); <co id="CO4-4"/>\r
-print "Substring: $request\n\n";\r
-\r
-print "split: Accepts two strings as input, returns an array of strings\n";\r
-$request = $session->request("opensrf.simple-text.split", "This is a test", " ");<co id="CO4-5"/>\r
-my $output = "Split: [";\r
-my $element;\r
-while ($element = $request->recv()) { <co id="CO4-6"/>\r
- $output .= $element->content . ", "; <co id="CO4-7"/>\r
-}\r
-$output =~ s/, $/]/;\r
-print $output . "\n\n";\r
-\r
-print "statistics: Accepts an array of strings as input, returns a hash\n";\r
-my @many_strings = [\r
- "First I think I'll have breakfast",\r
- "Then I think that lunch would be nice",\r
- "And then seventy desserts to finish off the day"\r
-];\r
-\r
-$result = $session->request("opensrf.simple-text.statistics", @many_strings); <co id="CO4-8"/>\r
-$request = $result->gather(); <co id="CO4-9"/>\r
-print "Length: " . $result->{'length'} . "\n";\r
-print "Word count: " . $result->{'word_count'} . "\n";\r
-\r
-$session->disconnect(); <co id="CO4-10"/>\r
-</programlisting>\r
- <calloutlist>\r
- <callout arearefs="CO4-1">\r
- <simpara>\r
- The <literal>OpenSRF::System->bootstrap_client()</literal> method reads the OpenSRF\r
- configuration information from the indicated file and creates an XMPP client\r
- connection based on that information.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO4-2">\r
- <simpara>\r
- The <literal>OpenSRF::AppSession->create()</literal> method accepts one argument - the name\r
- of the OpenSRF service to which you want to want to make one or more requests -\r
- and returns an object prepared to use the client connection to make those\r
- requests.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO4-3">\r
- <simpara>\r
- The <literal>OpenSRF::AppSession->request()</literal> method accepts a minimum of one\r
- argument - the name of the OpenSRF method to which you want to make a request -\r
- followed by zero or more arguments to pass to the OpenSRF method as input\r
- values. This example passes a string and an integer to the\r
- <literal>opensrf.simple-text.substring</literal> method defined by the <literal>opensrf.simple-text</literal>\r
- OpenSRF service.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO4-4">\r
- <simpara>\r
- The <literal>gather()</literal> method, called on the result object returned by the\r
- <literal>request()</literal> method, iterates over all of the possible results from the result\r
- object and returns a single variable.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO4-5">\r
- <simpara>\r
- This <literal>request()</literal> call passes two strings to the <literal>opensrf.simple-text.split</literal>\r
- method defined by the <literal>opensrf.simple-text</literal> OpenSRF service and returns (via\r
- <literal>gather()</literal>) a reference to an array of results.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO4-6">\r
- <simpara>\r
- The <literal>opensrf.simple-text.split()</literal> method is a streaming method that\r
- returns an array of results with one element per <literal>recv()</literal> call on the\r
- result object. We could use the <literal>gather()</literal> method to retrieve all of the\r
- results in a single array reference, but instead we simply iterate over\r
- the result variable until there are no more results to retrieve.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO4-7">\r
- <simpara>\r
- While the <literal>gather()</literal> convenience method returns only the content of the\r
- complete set of results for a given request, the <literal>recv()</literal> method returns an\r
- OpenSRF result object with <literal>status</literal>, <literal>statusCode</literal>, and <literal>content</literal> fields as\r
- we saw in <link linkend="OpenSRFOverHTTP">the HTTP results example</link>.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO4-8">\r
- <simpara>\r
- This <literal>request()</literal> call passes an array to the\r
- <literal>opensrf.simple-text.statistics</literal> method defined by the <literal>opensrf.simple-text</literal>\r
- OpenSRF service.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO4-9">\r
- <simpara>\r
- The result object returns a hash reference via <literal>gather()</literal>. The hash\r
- contains the <literal>length</literal> and <literal>word_count</literal> keys we defined in the method.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO4-10">\r
- <simpara>\r
- The <literal>OpenSRF::AppSession->disconnect()</literal> method closes the XMPP client\r
- connection and cleans up resources associated with the session.\r
- </simpara>\r
- </callout>\r
- </calloutlist>\r
- </simplesect>\r
- </simplesect>\r
- <simplesect id="_accepting_and_returning_more_interesting_data_types">\r
- <title>Accepting and returning more interesting data types</title>\r
- <simpara>Of course, the example of accepting a single string and returning a single\r
- string is not very interesting. In real life, our applications tend to pass\r
- around multiple arguments, including arrays and hashes. Fortunately, OpenSRF\r
- makes that easy to deal with; in Perl, for example, returning a reference to\r
- the data type does the right thing. In the following example of a method that\r
- returns a list, we accept two arguments of type string: the string to be split,\r
- and the delimiter that should be used to split the string.</simpara>\r
- <formalpara><title>Basic text splitting method</title><para>\r
-<programlisting language="perl" linenumbering="unnumbered">\r
-sub text_split {\r
- my $self = shift;\r
- my $conn = shift;\r
- my $text = shift;\r
- my $delimiter = shift || ' ';\r
-\r
- my @split_text = split $delimiter, $text;\r
- return \@split_text;\r
-}\r
-\r
-__PACKAGE__->register_method(\r
- method => 'text_split',\r
- api_name => 'opensrf.simple-text.split'\r
-);\r
-</programlisting>\r
- </para></formalpara>\r
- <simpara>We simply return a reference to the list, and OpenSRF does the rest of the work\r
- for us to convert the data into the language-independent format that is then\r
- returned to the caller. As a caller of a given method, you must rely on the\r
- documentation used to register to determine the data structures - if the developer has\r
- added the appropriate documentation.</simpara>\r
- </simplesect>\r
- <simplesect id="_accepting_and_returning_evergreen_objects">\r
- <title>Accepting and returning Evergreen objects</title>\r
- <simpara>OpenSRF is agnostic about objects; its role is to pass JSON back and forth\r
- between OpenSRF clients and services, and it allows the specific clients and\r
- services to define their own semantics for the JSON structures. On top of that\r
- infrastructure, Evergreen offers the fieldmapper: an object-relational mapper\r
- that provides a complete definition of all objects, their properties, their\r
- relationships to other objects, the permissions required to create, read,\r
- update, or delete objects of that type, and the database table or view on which\r
- they are based.</simpara>\r
- <indexterm><primary>Fieldmapper</primary></indexterm>\r
- <simpara>The Evergreen fieldmapper offers a great deal of convenience for working with\r
- complex system objects beyond the basic mapping of classes to database\r
- schemas. Although the result is passed over the wire as a JSON object\r
- containing the indicated fields, fieldmapper-aware clients then turn those\r
- JSON objects into native objects with setter / getter methods for each field.</simpara>\r
- <simpara>All of this metadata about Evergreen objects is defined in the\r
- fieldmapper configuration file (<literal>/openils/conf/fm_IDL.xml</literal>), and access to\r
- these classes is provided by the <literal>open-ils.cstore</literal>, <literal>open-ils.pcrud</literal>, and\r
- <literal>open-ils.reporter-store</literal> OpenSRF services which parse the fieldmapper\r
- configuration file and dynamically register OpenSRF methods for creating,\r
- reading, updating, and deleting all of the defined classes.</simpara>\r
- <formalpara><title>Example fieldmapper class definition for "Open User Summary"</title><para>\r
-<programlisting language="xml" linenumbering="unnumbered">\r
-<class id="mous" controller="open-ils.cstore open-ils.pcrud"\r
- oils_obj:fieldmapper="money::open_user_summary"\r
- oils_persist:tablename="money.open_usr_summary"\r
- reporter:label="Open User Summary"> <co id="CO5-1"/>\r
- <fields oils_persist:primary="usr" oils_persist:sequence=""> <co id="CO5-2"/> \r
- <field name="balance_owed" reporter:datatype="money" /> <co id="CO5-3"/> \r
- <field name="total_owed" reporter:datatype="money" />\r
- <field name="total_paid" reporter:datatype="money" />\r
- <field name="usr" reporter:datatype="link"/>\r
- </fields>\r
- <links>\r
- <link field="usr" reltype="has_a" key="id" map="" class="au"/><co id="CO5-4"/> \r
- </links>\r
- <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1"><co id="CO5-5"/> \r
- <actions>\r
- <retrieve permission="VIEW_USER"><co id="CO5-6"/> \r
- <context link="usr" field="home_ou"/><co id="CO5-7"/>\r
- </retrieve>\r
- </actions>\r
- </permacrud>\r
-</class>\r
-</programlisting>\r
- </para></formalpara>\r
- <calloutlist>\r
- <callout arearefs="CO5-1">\r
- <simpara>\r
- The <literal><class></literal> element defines the class:\r
- </simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- The <literal>id</literal> attribute defines the <emphasis>class hint</emphasis> that identifies the class both\r
- elsewhere in the fieldmapper configuration file, such as in the value of the\r
- <literal>field</literal> attribute of the <literal><link></literal> element, and in the JSON object itself when\r
- it is instantiated. For example, an "Open User Summary" JSON object would have\r
- the top level property of <literal>"__c":"mous"</literal>.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>controller</literal> attribute identifies the services that have direct access\r
- to this class. If <literal>open-ils.pcrud</literal> is not listed, for example, then there is\r
- no means to directly access members of this class through a public service.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>oils_obj:fieldmapper</literal> attribute defines the name of the Perl\r
- fieldmapper class that will be dynamically generated to provide setter and\r
- getter methods for instances of the class.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>oils_persist:tablename</literal> attribute identifies the schema name and table\r
- name of the database table that stores the data that represents the instances\r
- of this class. In this case, the schema is <literal>money</literal> and the table is\r
- <literal>open_usr_summary</literal>.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>reporter:label</literal> attribute defines a human-readable name for the class\r
- used in the reporting interface to identify the class. These names are defined\r
- in English in the fieldmapper configuration file; however, they are extracted\r
- so that they can be translated and served in the user’s language of choice.\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- </callout>\r
- <callout arearefs="CO5-2">\r
- <simpara>\r
- The <literal><fields></literal> element lists all of the fields that belong to the object.\r
- </simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- The <literal>oils_persist:primary</literal> attribute identifies the field that acts as the\r
- primary key for the object; in this case, the field with the name <literal>usr</literal>.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>oils_persist:sequence</literal> attribute identifies the sequence object\r
- (if any) in this database provides values for new instances of this class. In\r
- this case, the primary key is defined by a field that is linked to a different\r
- table, so no sequence is used to populate these instances.\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- </callout>\r
- <callout arearefs="CO5-3">\r
- <simpara>\r
- Each <literal><field></literal> element defines a single field with the following attributes:\r
- </simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- The <literal>name</literal> attribute identifies the column name of the field in the\r
- underlying database table as well as providing a name for the setter / getter\r
- method that can be invoked in the JSON or native version of the object.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>reporter:datatype</literal> attribute defines how the reporter should treat\r
- the contents of the field for the purposes of querying and display.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>reporter:label</literal> attribute can be used to provide a human-readable name\r
- for each field; without it, the reporter falls back to the value of the <literal>name</literal>\r
- attribute.\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- </callout>\r
- <callout arearefs="CO5-4">\r
- <simpara>\r
- The <literal><links></literal> element contains a set of zero or more <literal><link></literal> elements,\r
- each of which defines a relationship between the class being described and\r
- another class.\r
- </simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- The <literal>field</literal> attribute identifies the field named in this class that links\r
- to the external class.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>reltype</literal> attribute identifies the kind of relationship between the\r
- classes; in the case of <literal>has_a</literal>, each value in the <literal>usr</literal> field is guaranteed\r
- to have a corresponding value in the external class.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>key</literal> attribute identifies the name of the field in the external\r
- class to which this field links.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The rarely-used <literal>map</literal> attribute identifies a second class to which\r
- the external class links; it enables this field to define a direct\r
- relationship to an external class with one degree of separation, to\r
- avoid having to retrieve all of the linked members of an intermediate\r
- class just to retrieve the instances from the actual desired target class.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>class</literal> attribute identifies the external class to which this field\r
- links.\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- </callout>\r
- <callout arearefs="CO5-5">\r
- <simpara>\r
- The <literal><permacrud></literal> element defines the permissions that must have been\r
- granted to a user to operate on instances of this class.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO5-6">\r
- <simpara>\r
- The <literal><retrieve></literal> element is one of four possible children of the\r
- <literal><actions></literal> element that define the permissions required for each action:\r
- create, retrieve, update, and delete.\r
- </simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- The <literal>permission</literal> attribute identifies the name of the permission that must\r
- have been granted to the user to perform the action.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>contextfield</literal> attribute, if it exists, defines the field in this class\r
- that identifies the library within the system for which the user must have\r
- prvileges to work. If a user has been granted a given permission, but has not been\r
- granted privileges to work at a given library, they can not perform the action\r
- at that library.\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- </callout>\r
- <callout arearefs="CO5-7">\r
- <simpara>\r
- The rarely-used <literal><context></literal> element identifies a linked field (<literal>link</literal>\r
- attribute) in this class which links to an external class that holds the field\r
- (<literal>field</literal> attribute) that identifies the library within the system for which the\r
- user must have privileges to work.\r
- </simpara>\r
- </callout>\r
- </calloutlist>\r
- <simpara>When you retrieve an instance of a class, you can ask for the result to\r
- <emphasis>flesh</emphasis> some or all of the linked fields of that class, so that the linked\r
- instances are returned embedded directly in your requested instance. In that\r
- same request you can ask for the fleshed instances to in turn have their linked\r
- fields fleshed. By bundling all of this into a single request and result\r
- sequence, you can avoid the network overhead of requiring the client to request\r
- the base object, then request each linked object in turn.</simpara>\r
- <simpara>You can also iterate over a collection of instances and set the automatically\r
- generated <literal>isdeleted</literal>, <literal>isupdated</literal>, or <literal>isnew</literal> properties to indicate that\r
- the given instance has been deleted, updated, or created respectively.\r
- Evergreen can then act in batch mode over the collection to perform the\r
- requested actions on any of the instances that have been flagged for action.</simpara>\r
- </simplesect>\r
- <simplesect id="_returning_streaming_results">\r
- <title>Returning streaming results</title>\r
- <simpara>In the previous implementation of the <literal>opensrf.simple-text.split</literal> method, we\r
- returned a reference to the complete array of results. For small values being\r
- delivered over the network, this is perfectly acceptable, but for large sets of\r
- values this can pose a number of problems for the requesting client. Consider a\r
- service that returns a set of bibliographic records in response to a query like\r
- "all records edited in the past month"; if the underlying database is\r
- relatively active, that could result in thousands of records being returned as\r
- a single network request. The client would be forced to block until all of the\r
- results are returned, likely resulting in a significant delay, and depending on\r
- the implementation, correspondingly large amounts of memory might be consumed\r
- as all of the results are read from the network in a single block.</simpara>\r
- <simpara>OpenSRF offers a solution to this problem. If the method returns results that\r
- can be divided into separate meaningful units, you can register the OpenSRF\r
- method as a streaming method and enable the client to loop over the results one\r
- unit at a time until the method returns no further results. In addition to\r
- registering the method with the provided name, OpenSRF also registers an additional\r
- method with <literal>.atomic</literal> appended to the method name. The <literal>.atomic</literal> variant gathers\r
- all of the results into a single block to return to the client, giving the caller\r
- the ability to choose either streaming or atomic results from a single method\r
- definition.</simpara>\r
- <simpara>In the following example, the text splitting method has been reimplemented to\r
- support streaming; very few changes are required:</simpara>\r
- <formalpara><title>Text splitting method - streaming mode</title><para>\r
-<programlisting language="perl" linenumbering="unnumbered">\r
-sub text_split {\r
- my $self = shift;\r
- my $conn = shift;\r
- my $text = shift;\r
- my $delimiter = shift || ' ';\r
-\r
- my @split_text = split $delimiter, $text;\r
- foreach my $string (@split_text) { <co id="CO6-1"/>\r
- $conn->respond($string);\r
- }\r
- return undef;\r
-}\r
-\r
-__PACKAGE__->register_method(\r
- method => 'text_split',\r
- api_name => 'opensrf.simple-text.split',\r
- stream => 1<co id="CO6-2"/>\r
-);\r
-</programlisting>\r
- </para></formalpara>\r
- <calloutlist>\r
- <callout arearefs="CO6-1">\r
- <simpara>\r
- Rather than returning a reference to the array, a streaming method loops\r
- over the contents of the array and invokes the <literal>respond()</literal> method of the\r
- connection object on each element of the array.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO6-2">\r
- <simpara>\r
- Registering the method as a streaming method instructs OpenSRF to also\r
- register an atomic variant (<literal>opensrf.simple-text.split.atomic</literal>).\r
- </simpara>\r
- </callout>\r
- </calloutlist>\r
- </simplesect>\r
- <simplesect id="_error_warning_info_debug">\r
- <title>Error! Warning! Info! Debug!</title>\r
- <simpara>As hard as it may be to believe, it is true: applications sometimes do not\r
- behave in the expected manner, particularly when they are still under\r
- development. The service language bindings for OpenSRF include integrated\r
- support for logging messages at the levels of ERROR, WARNING, INFO, DEBUG, and\r
- the extremely verbose INTERNAL to either a local file or to a syslogger\r
- service. The destination of the log files, and the level of verbosity to be\r
- logged, is set in the <literal>opensrf_core.xml</literal> configuration file. To add logging to\r
- our Perl example, we just have to add the <literal>OpenSRF::Utils::Logger</literal> package to our\r
- list of used Perl modules, then invoke the logger at the desired logging level.</simpara>\r
- <simpara>You can include many calls to the OpenSRF logger; only those that are higher\r
- than your configured logging level will actually hit the log. The following\r
- example exercises all of the available logging levels in OpenSRF:</simpara>\r
-<programlisting language="perl" linenumbering="unnumbered">\r
-use OpenSRF::Utils::Logger;\r
-my $logger = OpenSRF::Utils::Logger;\r
-# some code in some function\r
-{\r
- $logger->error("Hmm, something bad DEFINITELY happened!");\r
- $logger->warn("Hmm, something bad might have happened.");\r
- $logger->info("Something happened.");\r
- $logger->debug("Something happened; here are some more details.");\r
- $logger->internal("Something happened; here are all the gory details.")\r
-}\r
-</programlisting>\r
- <simpara>If you call the mythical OpenSRF method containing the preceding OpenSRF logger\r
- statements on a system running at the default logging level of INFO, you will\r
- only see the INFO, WARN, and ERR messages, as follows:</simpara>\r
- <formalpara><title>Results of logging calls at the default level of INFO</title><para>\r
-<screen>\r
-[2010-03-17 22:27:30] opensrf.simple-text [ERR :5681:SimpleText.pm:277:] \r
-[2010-03-17 22:27:30] opensrf.simple-text [WARN:5681:SimpleText.pm:278:] \r
-[2010-03-17 22:27:30] opensrf.simple-text [INFO:5681:SimpleText.pm:279:] \r
-</screen>\r
- </para></formalpara>\r
- <simpara>If you then increase the the logging level to INTERNAL (5), the logs will\r
- contain much more information, as follows:</simpara>\r
- <formalpara><title>Results of logging calls at the default level of INTERNAL</title><para>\r
-<screen>\r
-[2010-03-17 22:48:11] opensrf.simple-text [ERR :5934:SimpleText.pm:277:] \r
-[2010-03-17 22:48:11] opensrf.simple-text [WARN:5934:SimpleText.pm:278:] \r
-[2010-03-17 22:48:11] opensrf.simple-text [INFO:5934:SimpleText.pm:279:] \r
-[2010-03-17 22:48:11] opensrf.simple-text [DEBG:5934:SimpleText.pm:280:] \r
-[2010-03-17 22:48:11] opensrf.simple-text [INTL:5934:SimpleText.pm:281:] \r
-[2010-03-17 22:48:11] opensrf.simple-text [ERR :5934:SimpleText.pm:283:] \r
-[2010-03-17 22:48:21] opensrf.simple-text [INTL:5934:Cache.pm:125:] \r
-[2010-03-17 22:48:21] opensrf.simple-text [DEBG:5934:Application.pm:579:] \r
-[2010-03-17 22:48:21] opensrf.simple-text [DEBG:5934:Application.pm:586:] \r
-[2010-03-17 22:48:21] opensrf.simple-text [DEBG:5934:Application.pm:190:] \r
-[2010-03-17 22:48:21] opensrf.simple-text [INTL:5934:AppSession.pm:780:] Calling queue_wait(0)\r
-[2010-03-17 22:48:21] opensrf.simple-text [INTL:5934:AppSession.pm:769:] Resending...0\r
-[2010-03-17 22:48:21] opensrf.simple-text [INTL:5934:AppSession.pm:450:] In send\r
-[2010-03-17 22:48:21] opensrf.simple-text [DEBG:5934:AppSession.pm:506:] \r
-[2010-03-17 22:48:21] opensrf.simple-text [DEBG:5934:AppSession.pm:506:] \r
-...\r
-</screen>\r
- </para></formalpara>\r
- <simpara>To see everything that is happening in OpenSRF, try leaving your logging level\r
- set to INTERNAL for a few minutes - just ensure that you have a lot of free disk\r
- space available if you have a moderately busy system!</simpara>\r
- </simplesect>\r
- <simplesect id="_caching_results_one_secret_of_scalability">\r
- <title>Caching results: one secret of scalability</title>\r
- <indexterm><primary>search results</primary><secondary>caching</secondary></indexterm>\r
- <simpara>If you have ever used an application that depends on a remote Web service\r
- outside of your control — say, if you need to retrieve results from a\r
- microblogging service — you know the pain of latency and dependability (or the\r
- lack thereof). To improve the response time for OpenSRF services, you can take\r
- advantage of the support offered by the <literal>OpenSRF::Utils::Cache</literal> module for\r
- communicating with a local instance or cluster of <literal>memcache</literal> daemons to store\r
- and retrieve persistent values. The following example demonstrates caching\r
- by sleeping for 10 seconds the first time it receives a given cache key and\r
- cannot retrieve a corresponding value from the cache:</simpara>\r
- <formalpara><title>Simple caching OpenSRF service</title><para>\r
-<programlisting language="perl" linenumbering="unnumbered">\r
-use OpenSRF::Utils::Cache;<co id="CO7-1"/>\r
-sub test_cache {\r
- my $self = shift;\r
- my $conn = shift;\r
- my $test_key = shift;\r
- my $cache = OpenSRF::Utils::Cache->new('global'); <co id="CO7-2"/>\r
- my $cache_key = "opensrf.simple-text.test_cache.$test_key"; <co id="CO7-3"/>\r
- my $result = $cache->get_cache($cache_key) || undef; <co id="CO7-4"/>\r
- if ($result) {\r
- $logger->info("Resolver found a cache hit");\r
- return $result;\r
- }\r
- sleep 10; <co id="CO7-5"/>\r
- my $cache_timeout = 300; <co id="CO7-6"/>\r
- $cache->put_cache($cache_key, "here", $cache_timeout); <co id="CO7-7"/>\r
- return "There was no cache hit.";\r
-}\r
-</programlisting>\r
- </para></formalpara>\r
- <calloutlist>\r
- <callout arearefs="CO7-1">\r
- <simpara>\r
- The OpenSRF::Utils::Cache module provides access to the built-in caching\r
- support in OpenSRF.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO7-2">\r
- <simpara>\r
- The constructor for the cache object accepts a single argument to define\r
- the cache type for the object. Each cache type can use a separate <literal>memcache</literal>\r
- server to keep the caches separated. Most Evergreen services use the <literal>global</literal>\r
- cache, while the <literal>anon</literal> cache is used for Web sessions.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO7-3">\r
- <simpara>\r
- The cache key is simply a string that uniquely identifies the value you\r
- want to store or retrieve. This line creates a cache key based on the OpenSRF\r
- method name and request input value.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO7-4">\r
- <simpara>\r
- The <literal>get_cache()</literal> method checks to see if the cache key already exists. If\r
- a matching key is found, the service immediately returns the stored value.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO7-5">\r
- <simpara>\r
- If the cache key does not exist, the code sleeps for 10 seconds to\r
- simulate a call to a slow remote Web service or an intensive process.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO7-6">\r
- <simpara>\r
- The <literal>$cache_timeout</literal> variable represents a value for the lifetime of the\r
- cache key in seconds.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO7-7">\r
- <simpara>\r
- After the code retrieves its value (or, in the case of this example,\r
- finishes sleeping), it creates the cache entry by calling the <literal>put_cache()</literal>\r
- method. The method accepts three arguments: the cache key, the value to be\r
- stored ("here"), and the timeout value in seconds to ensure that we do not\r
- return stale data on subsequent calls.\r
- </simpara>\r
- </callout>\r
- </calloutlist>\r
- </simplesect>\r
- <simplesect id="_initializing_the_service_and_its_children_child_labour">\r
- <title>Initializing the service and its children: child labour</title>\r
- <simpara>When an OpenSRF service is started, it looks for a procedure called\r
- <literal>initialize()</literal> to set up any global variables shared by all of the children of\r
- the service. The <literal>initialize()</literal> procedure is typically used to retrieve\r
- configuration settings from the <literal>opensrf.xml</literal> file.</simpara>\r
- <simpara>An OpenSRF service spawns one or more children to actually do the work\r
- requested by callers of the service. For every child process an OpenSRF service\r
- spawns, the child process clones the parent environment and then each child\r
- process runs the <literal>child_init()</literal> process (if any) defined in the OpenSRF service\r
- to initialize any child-specific settings.</simpara>\r
- <simpara>When the OpenSRF service kills a child process, it invokes the <literal>child_exit()</literal>\r
- procedure (if any) to clean up any resources associated with the child process.\r
- Similarly, when the OpenSRF service is stopped, it calls the <literal>DESTROY()</literal>\r
- procedure to clean up any remaining resources.</simpara>\r
- </simplesect>\r
- <simplesect id="_retrieving_configuration_settings">\r
- <title>Retrieving configuration settings</title>\r
- <simpara>The settings for OpenSRF services are maintained in the <literal>opensrf.xml</literal> XML\r
- configuration file. The structure of the XML document consists of a root\r
- element <literal><opensrf></literal> containing two child elements:</simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- The <literal><default></literal> element contains an <literal><apps></literal> element describing all\r
- OpenSRF services running on this system — see <xref linkend="serviceRegistration"/> --, as\r
- well as any other arbitrary XML descriptions required for global configuration\r
- purposes. For example, Evergreen uses this section for email notification and\r
- inter-library patron privacy settings.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal><hosts></literal> element contains one element per host that participates in\r
- this OpenSRF system. Each host element must include an <literal><activeapps></literal> element\r
- that lists all of the services to start on this host when the system starts\r
- up. Each host element can optionally override any of the default settings.\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- <simpara>OpenSRF includes a service named <literal>opensrf.settings</literal> to provide distributed\r
- cached access to the configuration settings with a simple API:</simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- <literal>opensrf.settings.default_config.get</literal> accepts zero arguments and returns\r
- the complete set of default settings as a JSON document.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>opensrf.settings.host_config.get</literal> accepts one argument (hostname) and\r
- returns the complete set of settings, as customized for that hostname, as a\r
- JSON document.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>opensrf.settings.xpath.get</literal> accepts one argument (an\r
- <ulink url="http://www.w3.org/TR/xpath/">XPath</ulink> expression) and returns the portion of\r
- the configuration file that matches the expression as a JSON document.\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- <simpara>For example, to determine whether an Evergreen system uses the opt-in\r
- support for sharing patron information between libraries, you could either\r
- invoke the <literal>opensrf.settings.default_config.get</literal> method and parse the\r
- JSON document to determine the value, or invoke the <literal>opensrf.settings.xpath.get</literal>\r
- method with the XPath <literal>/opensrf/default/share/user/opt_in</literal> argument to\r
- retrieve the value directly.</simpara>\r
- <simpara>In practice, OpenSRF includes convenience libraries in all of its client\r
- language bindings to simplify access to configuration values. C offers\r
- osrfConfig.c, Perl offers <literal>OpenSRF::Utils::SettingsClient</literal>, Java offers\r
- <literal>org.opensrf.util.SettingsClient</literal>, and Python offers <literal>osrf.set</literal>. These\r
- libraries locally cache the configuration file to avoid network roundtrips for\r
- every request and enable the developer to request specific values without\r
- having to manually construct XPath expressions.</simpara>\r
- </simplesect>\r
- </section>\r
- <section id="_getting_under_the_covers_with_opensrf">\r
- <title>OpenSRF Communication Flows</title>\r
- <indexterm><primary>OpenSRF</primary><secondary>Communication Flows</secondary></indexterm>\r
- <simpara>Now that you have seen that it truly is easy to create an OpenSRF service, we\r
- can take a look at what is going on under the covers to make all of this work\r
- for you.</simpara>\r
- <simplesect id="_get_on_the_messaging_bus_safely">\r
- <title>Get on the messaging bus - safely</title>\r
- <simpara>One of the core innovations of OpenSRF was to use the Extensible Messaging and\r
- Presence Protocol (XMPP, more colloquially known as Jabber) as the messaging\r
- bus that ties OpenSRF services together across servers. XMPP is an "XML\r
- protocol for near-real-time messaging, presence, and request-response services"\r
- (<ulink url="http://www.ietf.org/rfc/rfc3920.txt">http://www.ietf.org/rfc/rfc3920.txt</ulink>) that OpenSRF relies on to handle most of\r
- the complexity of networked communications. OpenSRF requres an XMPP server\r
- that supports multiple domains such as <ulink url="http://www.ejabberd.im/">ejabberd</ulink>.\r
- Multiple domain support means that a single server can support XMPP virtual\r
- hosts with separate sets of users and access privileges per domain. By\r
- routing communications through separate public and private XMPP domains,\r
- OpenSRF services gain an additional layer of security.</simpara>\r
- <simpara>The <ulink url="http://evergreen-ils.org/dokuwiki/doku.php?id=opensrf:1.2:install">OpenSRF\r
- installation documentation</ulink> instructs you to create two separate hostnames\r
- (<literal>private.localhost</literal> and <literal>public.localhost</literal>) to use as XMPP domains. OpenSRF\r
- can control access to its services based on the domain of the client and\r
- whether a given service allows access from clients on the public domain. When\r
- you start OpenSRF, the first XMPP clients that connect to the XMPP server are\r
- the OpenSRF public and private <emphasis>routers</emphasis>. OpenSRF routers maintain a list of\r
- available services and connect clients to available services. When an OpenSRF\r
- service starts, it establishes a connection to the XMPP server and registers\r
- itself with the private router. The OpenSRF configuration contains a list of\r
- public OpenSRF services, each of which must also register with the public\r
- router.</simpara>\r
- </simplesect>\r
- <simplesect id="_opensrf_communication_flows_over_xmpp">\r
- <title>OpenSRF communication flows over XMPP</title>\r
- <indexterm><primary>XMPP</primary></indexterm>\r
- <simpara>In a minimal OpenSRF deployment, two XMPP users named "router" connect to the\r
- XMPP server, with one connected to the private XMPP domain and one connected to\r
- the public XMPP domain. Similarly, two XMPP users named "opensrf" connect to\r
- the XMPP server via the private and public XMPP domains. When an OpenSRF\r
- service is started, it uses the "opensrf" XMPP user to advertise its\r
- availability with the corresponding router on that XMPP domain; the XMPP server\r
- automatically assigns a Jabber ID (<emphasis>JID</emphasis>) based on the client hostname to each\r
- service’s listener process and each connected drone process waiting to carry\r
- out requests. When an OpenSRF router receives a request to invoke a method on a\r
- given service, it connects the requester to the next available listener in the\r
- list of registered listeners for that service.</simpara>\r
- <simpara>Services and clients connect to the XMPP server using a single set of XMPP\r
- client credentials (for example, <literal>opensrf@private.localhost</literal>), but use XMPP\r
- resource identifiers to differentiate themselves in the JID for each\r
- connection. For example, the JID for a copy of the <literal>opensrf.simple-text</literal>\r
- service with process ID <literal>6285</literal> that has connected to the <literal>private.localhost</literal>\r
- domain using the <literal>opensrf</literal> XMPP client credentials could be\r
- <literal>opensrf@private.localhost/opensrf.simple-text_drone_at_localhost_6285</literal>. By\r
- convention, the user name for OpenSRF clients is <literal>opensrf</literal>, and the user name\r
- for OpenSRF routers is <literal>router</literal>, so the XMPP server for OpenSRF will have four\r
- separate users registered:\r
- * <literal>opensrf@private.localhost</literal> is an OpenSRF client that connects with these\r
- credentials and which can access any OpenSRF service.\r
- * <literal>opensrf@public.localhost</literal> is an OpenSRF client that connects with these\r
- credentials and which can only access OpenSRF services that have registered\r
- with the public router.\r
- * <literal>router@private.localhost</literal> is the private OpenSRF router with which all\r
- services register.\r
- * <literal>router@public.localhost</literal> is the public OpenSRF router with which only\r
- services that must be publicly accessible register.</simpara>\r
- <simpara>All OpenSRF services automatically register themselves with the private XMPP\r
- domain, but only those services that register themselves with the public XMPP\r
- domain can be invoked from public OpenSRF clients. The OpenSRF client and\r
- router user names, passwords, and domain names, along with the list of services\r
- that should be public, are contained in the <literal>opensrf_core.xml</literal> configuration\r
- file.</simpara>\r
- </simplesect>\r
- <simplesect id="OpenSRFOverHTTP">\r
- <title>OpenSRF communication flows over HTTP</title>\r
- <indexterm><primary>HTTP</primary><secondary>translator</secondary></indexterm>\r
- <simpara>In some contexts, access to a full XMPP client is not a practical option. For\r
- example, while XMPP clients have been implemented in JavaScript, you might\r
- be concerned about browser compatibility and processing overhead - or you might\r
- want to issue OpenSRF requests from the command line with <literal>curl</literal>. Fortunately,\r
- any OpenSRF service registered with the public router is accessible via the\r
- OpenSRF HTTP Translator. The OpenSRF HTTP Translator implements the\r
- <ulink url="http://www.open-ils.org/dokuwiki/doku.php?id=opensrf_over_http">OpenSRF-over-HTTP\r
- proposed specification</ulink> as an Apache module that translates HTTP requests into\r
- OpenSRF requests and returns OpenSRF results as HTTP results to the initiating\r
- HTTP client.</simpara>\r
- <formalpara><title>Issuing an HTTP POST request to an OpenSRF method via the OpenSRF HTTP Translator</title><para>\r
-<programlisting language="bash" linenumbering="unnumbered">\r
-# curl request broken up over multiple lines for legibility\r
-curl -H "X-OpenSRF-service: opensrf.simple-text"<co id="CO8-1"/>\r
- --data 'osrf-msg=[ \<co id="CO8-2"/>\r
- {"__c":"osrfMessage","__p":{"threadTrace":0,"locale":"en-CA", <co id="CO8-3"/>\r
- "type":"REQUEST","payload": {"__c":"osrfMethod","__p": \r
- {"method":"opensrf.simple-text.reverse","params":["foobar"]} \r
- }} \r
- }]' \r
-http://localhost/osrf-http-translator <co id="CO8-4"/>\r
-</programlisting>\r
- </para></formalpara>\r
- <calloutlist>\r
- <callout arearefs="CO8-1">\r
- <simpara>\r
- The <literal>X-OpenSRF-service</literal> header identifies the OpenSRF service of interest.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO8-2">\r
- <simpara>\r
- The POST request consists of a single parameter, the <literal>osrf-msg</literal> value,\r
- which contains a JSON array.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO8-3">\r
- <simpara>\r
- The first object is an OpenSRF message (<literal>"__c":"osrfMessage"</literal>) with a set of\r
- parameters (<literal>"__p":{}</literal>).\r
- </simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- The identifier for the request (<literal>"threadTrace":0</literal>); this value is echoed\r
- back in the result.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The message type (<literal>"type":"REQUEST"</literal>).\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The locale for the message; if the OpenSRF method is locale-sensitive, it\r
- can check the locale for each OpenSRF request and return different information\r
- depending on the locale.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The payload of the message (<literal>"payload":{}</literal>) containing the OpenSRF method\r
- request (<literal>"__c":"osrfMethod"</literal>) and its parameters (<literal>"__p:"{}</literal>).\r
- </simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- The method name for the request (<literal>"method":"opensrf.simple-text.reverse"</literal>).\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- A set of JSON parameters to pass to the method (<literal>"params":["foobar"]</literal>); in\r
- this case, a single string <literal>"foobar"</literal>.\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- </listitem>\r
- </itemizedlist>\r
- </callout>\r
- <callout arearefs="CO8-4">\r
- <simpara>\r
- The URL on which the OpenSRF HTTP translator is listening,\r
- <literal>/osrf-http-translator</literal> is the default location in the Apache example\r
- configuration files shipped with the OpenSRF source, but this is configurable.\r
- </simpara>\r
- </callout>\r
- </calloutlist>\r
- <formalpara><title>Results from an HTTP POST request to an OpenSRF method via the OpenSRF HTTP Translator</title><para>\r
-<programlisting language="bash" linenumbering="unnumbered">\r
-# HTTP response broken up over multiple lines for legibility\r
-[{"__c":"osrfMessage","__p": <co id="CO9-1"/>\r
- {"threadTrace":0, "payload": <co id="CO9-2"/>\r
- {"__c":"osrfResult","__p": <co id="CO9-3"/>\r
- {"status":"OK","content":"raboof","statusCode":200} <co id="CO9-4"/>\r
- },"type":"RESULT","locale":"en-CA" <co id="CO9-5"/>\r
- }\r
-},\r
-{"__c":"osrfMessage","__p": <co id="CO9-6"/>\r
- {"threadTrace":0,"payload": <co id="CO9-7"/>\r
- {"__c":"osrfConnectStatus","__p": <co id="CO9-8"/>\r
- {"status":"Request Complete","statusCode":205}<co id="CO9-9"/>\r
- },"type":"STATUS","locale":"en-CA" <co id="CO9-10"/>\r
- }\r
-}]\r
-</programlisting>\r
- </para></formalpara>\r
- <calloutlist>\r
- <callout arearefs="CO9-1">\r
- <simpara>\r
- The OpenSRF HTTP Translator returns an array of JSON objects in its\r
- response. Each object in the response is an OpenSRF message\r
- (<literal>"__c":"osrfMessage"</literal>) with a collection of response parameters (<literal>"__p":</literal>).\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO9-2">\r
- <simpara>\r
- The OpenSRF message identifier (<literal>"threadTrace":0</literal>) confirms that this\r
- message is in response to the request matching the same identifier.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO9-3">\r
- <simpara>\r
- The message includes a payload JSON object (<literal>"payload":</literal>) with an OpenSRF\r
- result for the request (<literal>"__c":"osrfResult"</literal>).\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO9-4">\r
- <simpara>\r
- The result includes a status indicator string (<literal>"status":"OK"</literal>), the content\r
- of the result response - in this case, a single string "raboof"\r
- (<literal>"content":"raboof"</literal>) - and an integer status code for the request\r
- (<literal>"statusCode":200</literal>).\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO9-5">\r
- <simpara>\r
- The message also includes the message type (<literal>"type":"RESULT"</literal>) and the\r
- message locale (<literal>"locale":"en-CA"</literal>).\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO9-6">\r
- <simpara>\r
- The second message in the set of results from the response.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO9-7">\r
- <simpara>\r
- Again, the message identifier confirms that this message is in response to\r
- a particular request.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO9-8">\r
- <simpara>\r
- The payload of the message denotes that this message is an\r
- OpenSRF connection status message (<literal>"__c":"osrfConnectStatus"</literal>), with some\r
- information about the particular OpenSRF connection that was used for this\r
- request.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO9-9">\r
- <simpara>\r
- The response parameters for an OpenSRF connection status message include a\r
- verbose status (<literal>"status":"Request Complete"</literal>) and an integer status code for\r
- the connection status (`"statusCode":205).\r
- </simpara>\r
- </callout>\r
- <callout arearefs="CO9-10">\r
- <simpara>\r
- The message also includes the message type (<literal>"type":"RESULT"</literal>) and the\r
- message locale (<literal>"locale":"en-CA"</literal>).\r
- </simpara>\r
- </callout>\r
- </calloutlist>\r
- <tip><simpara>Before adding a new public OpenSRF service, ensure that it does\r
- not introduce privilege escalation or unchecked access to data. For example,\r
- the Evergreen <literal>open-ils.cstore</literal> private service is an object-relational mapper\r
- that provides read and write access to the entire Evergreen database, so it\r
- would be catastrophic to expose that service publicly. In comparison, the\r
- Evergreen <literal>open-ils.pcrud</literal> public service offers the same functionality as\r
- <literal>open-ils.cstore</literal> to any connected HTTP client or OpenSRF client, but the\r
- additional authentication and authorization layer in <literal>open-ils.pcrud</literal> prevents\r
- unchecked access to Evergreen’s data.</simpara></tip>\r
- </simplesect>\r
- <simplesect id="_stateless_and_stateful_connections">\r
- <title>Stateless and stateful connections</title>\r
- <simpara>OpenSRF supports both <emphasis>stateless</emphasis> and <emphasis>stateful</emphasis> connections. When an OpenSRF\r
- client issues a <literal>REQUEST</literal> message in a <emphasis>stateless</emphasis> connection, the router\r
- forwards the request to the next available service and the service returns the\r
- result directly to the client.</simpara>\r
- \r
- <simpara>When an OpenSRF client issues a <literal>CONNECT</literal> message to create a <emphasis>stateful</emphasis> conection, the\r
- router returns the Jabber ID of the next available service to the client so\r
- that the client can issue one or more <literal>REQUEST</literal> message directly to that\r
- particular service and the service will return corresponding <literal>RESULT</literal> messages\r
- directly to the client. Until the client issues a <literal>DISCONNECT</literal> message, that\r
- particular service is only available to the requesting client. Stateful connections\r
- are useful for clients that need to make many requests from a particular service,\r
- as it avoids the intermediary step of contacting the router for each request, as\r
- well as for operations that require a controlled sequence of commands, such as a\r
- set of database INSERT, UPDATE, and DELETE statements within a transaction.</simpara>\r
- \r
- </simplesect>\r
- <simplesect id="_message_body_format">\r
- <title>Message body format</title>\r
- <simpara>OpenSRF was an early adopter of JavaScript Object Notation (JSON). While XMPP\r
- is an XML protocol, the Evergreen developers recognized that the compactness of\r
- the JSON format offered a significant reduction in bandwidth for the volume of\r
- messages that would be generated in an application of that size. In addition,\r
- the ability of languages such as JavaScript, Perl, and Python to generate\r
- native objects with minimal parsing offered an attractive advantage over\r
- invoking an XML parser for every message. Instead, the body of the XMPP message\r
- is a simple JSON structure. For a simple request, like the following example\r
- that simply reverses a string, it looks like a significant overhead: but we get\r
- the advantages of locale support and tracing the request from the requester\r
- through the listener and responder (drone).</simpara>\r
- <formalpara><title>A request for opensrf.simple-text.reverse("foobar"):</title><para>\r
-<programlisting language="xml" linenumbering="unnumbered">\r
-<message from='router@private.localhost/opensrf.simple-text'\r
- to='opensrf@private.localhost/opensrf.simple-text_listener_at_localhost_6275'\r
- router_from='opensrf@private.localhost/_karmic_126678.3719_6288'\r
- router_to='' router_class='' router_command='' osrf_xid=''\r
->\r
- <thread>1266781414.366573.12667814146288</thread>\r
- <body>\r
-[\r
- {"__c":"osrfMessage","__p":\r
- {"threadTrace":"1","locale":"en-US","type":"REQUEST","payload":\r
- {"__c":"osrfMethod","__p":\r
- {"method":"opensrf.simple-text.reverse","params":["foobar"]}\r
- }\r
- }\r
- }\r
-]\r
- </body>\r
-</message>\r
-</programlisting>\r
- </para></formalpara>\r
- <formalpara><title>A response from opensrf.simple-text.reverse("foobar")</title><para>\r
-<programlisting language="xml" linenumbering="unnumbered">\r
-<message from='opensrf@private.localhost/opensrf.simple-text_drone_at_localhost_6285'\r
- to='opensrf@private.localhost/_karmic_126678.3719_6288'\r
- router_command='' router_class='' osrf_xid=''\r
->\r
- <thread>1266781414.366573.12667814146288</thread>\r
- <body>\r
-[\r
- {"__c":"osrfMessage","__p":\r
- {"threadTrace":"1","payload":\r
- {"__c":"osrfResult","__p":\r
- {"status":"OK","content":"raboof","statusCode":200}\r
- } ,"type":"RESULT","locale":"en-US"}\r
- },\r
- {"__c":"osrfMessage","__p":\r
- {"threadTrace":"1","payload":\r
- {"__c":"osrfConnectStatus","__p":\r
- {"status":"Request Complete","statusCode":205}\r
- },"type":"STATUS","locale":"en-US"}\r
- }\r
-]\r
- </body>\r
-</message>\r
-</programlisting>\r
- </para></formalpara>\r
- <simpara>The content of the <literal><body></literal> element of the OpenSRF request and result should\r
- look familiar; they match the structure of the <link linkend="OpenSRFOverHTTP">OpenSRF over HTTP examples</link> that we previously dissected.</simpara>\r
- </simplesect>\r
- <simplesect id="_registering_opensrf_methods_in_depth">\r
- <title>Registering OpenSRF methods in depth</title>\r
- <simpara>Let’s explore the call to <literal>__PACKAGE__->register_method()</literal>; most of the members\r
- of the hash are optional, and for the sake of brevity we omitted them in the\r
- previous example. As we have seen in the results of the <link linkend="opensrfIntrospection">introspection call</link>, a\r
- verbose registration method call is recommended to better enable the internal\r
- documentation. Here is the complete set of members that you should pass to\r
- <literal>__PACKAGE__->register_method()</literal>:</simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- The <literal>method</literal> member specifies the name of the procedure in this module that is being registered as an OpenSRF method.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>api_name</literal> member specifies the invocable name of the OpenSRF method; by convention, the OpenSRF service name is used as the prefix.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The optional <literal>api_level</literal> member can be used for versioning the methods to allow the use of a deprecated API, but in practical use is always 1.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The optional <literal>argc</literal> member specifies the minimal number of arguments that the method expects.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The optional <literal>stream</literal> member, if set to any value, specifies that the method supports returning multiple values from a single call to \r
- subsequent requests. OpenSRF automatically creates a corresponding method with ".atomic" appended to its name that returns the complete set of results in a \r
- single request. Streaming methods are useful if you are returning hundreds of records and want to act on the results as they return.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The optional <literal>signature</literal> member is a hash that describes the method’s purpose, arguments, and return value.\r
- </simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- The <literal>desc</literal> member of the <literal>signature</literal> hash describes the method’s purpose.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>params</literal> member of the <literal>signature</literal> hash is an array of hashes in which each array element describes the corresponding method \r
- argument in order.\r
- </simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- The <literal>name</literal> member of the argument hash specifies the name of the argument.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>desc</literal> member of the argument hash describes the argument’s purpose.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>type</literal> member of the argument hash specifies the data type of the argument: for example, string, integer, boolean, number, array, or hash.\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>return</literal> member of the <literal>signature</literal> hash is a hash that describes the return value of the method.\r
- </simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- The <literal>desc</literal> member of the <literal>return</literal> hash describes the return value.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>type</literal> member of the <literal>return</literal> hash specifies the data type of the return value: for example, string, integer, boolean, number, \r
- array, or hash.\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- </listitem>\r
- </itemizedlist>\r
- </listitem>\r
- </itemizedlist>\r
- </simplesect>\r
- </section>\r
- <section id="_evergreen_specific_opensrf_services">\r
- <title>Evergreen-specific OpenSRF services</title>\r
- <simpara>Evergreen is currently the primary showcase for the use of OpenSRF as an\r
- application architecture. Evergreen 1.6.1 includes the following\r
- set of OpenSRF services:</simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- The <systemitem class="service">open-ils.actor</systemitem> service supports common tasks for working with user\r
- accounts and libraries.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <systemitem class="service">open-ils.auth</systemitem> service supports authentication of Evergreen users.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <systemitem class="service">open-ils.booking</systemitem> service supports the management of reservations\r
- for bookable items.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <systemitem class="service">open-ils.cat</systemitem> service supports common cataloging tasks, such as\r
- creating, modifying, and merging bibliographic and authority records.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <systemitem class="service">open-ils.circ</systemitem> service supports circulation tasks such as checking\r
- out items and calculating due dates.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <systemitem class="service">open-ils.collections</systemitem> service supports tasks that assist collections\r
- agencies in contacting users with outstanding fines above a certain\r
- threshold.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <systemitem class="service">open-ils.cstore</systemitem> private service supports unrestricted access to\r
- Evergreen fieldmapper objects.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <systemitem class="service">open-ils.ingest</systemitem> private service supports tasks for importing\r
- data such as bibliographic and authority records.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <systemitem class="service">open-ils.pcrud</systemitem> service supports permission-based access to Evergreen\r
- fieldmapper objects.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <systemitem class="service">open-ils.penalty</systemitem> penalty service supports the calculation of\r
- penalties for users, such as being blocked from further borrowing, for\r
- conditions such as having too many items checked out or too many unpaid\r
- fines.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <systemitem class="service">open-ils.reporter</systemitem> service supports the creation and scheduling of\r
- reports.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <systemitem class="service">open-ils.reporter-store</systemitem> private service supports access to Evergreen\r
- fieldmapper objects for the reporting service.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <systemitem class="service">open-ils.search</systemitem> service supports searching across bibliographic\r
- records, authority records, serial records, Z39.50 sources, and ZIP codes.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <systemitem class="service">open-ils.storage</systemitem> private service supports a deprecated method of\r
- providing access to Evergreen fieldmapper objects. Implemented in Perl,\r
- this service has largely been replaced by the much faster C-based\r
- <literal>open-ils.cstore</literal> service.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <systemitem class="service">open-ils.supercat</systemitem> service supports transforms of MARC records into\r
- other formats, such as MODS, as well as providing Atom and RSS feeds and\r
- SRU access.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <systemitem class="service">open-ils.trigger</systemitem> private service supports event-based triggers for\r
- actions such as overdue and holds available notification emails.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <systemitem class="service">open-ils.vandelay</systemitem> service supports the import and export of batches of\r
- bibliographic and authority records.\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- <simpara>Of some interest is that the <systemitem class="service">open-ils.reporter-store</systemitem> and <systemitem class="service">open-ils.cstore</systemitem>\r
- services have identical implementations. Surfacing them as separate services\r
- enables a deployer of Evergreen to ensure that the reporting service does not\r
- interfere with the performance-critical <systemitem class="service">open-ils.cstore</systemitem> service. One can also\r
- direct the reporting service to a read-only database replica to, again, avoid\r
- interference with <systemitem class="service">open-ils.cstore</systemitem> which must write to the master database.</simpara>\r
- <simpara>There are only a few significant services that are not built on OpenSRF in\r
- Evergreen 1.6.0, such as the SIP and Z39.50 servers. These services implement\r
- different protocols and build on existing daemon architectures (Simple2ZOOM\r
- for Z39.50), but still rely on the other OpenSRF services to provide access\r
- to the Evergreen data. The non-OpenSRF services are reasonably self-contained\r
- and can be deployed on different servers to deliver the same sort of deployment\r
- flexibility as OpenSRF services, but have the disadvantage of not being\r
- integrated into the same configuration and control infrastructure as the\r
- OpenSRF services.</simpara>\r
- </section>\r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<chapter xml:id="Customizing_OPAC" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
- <info>\r
- <title>Customizing the OPAC</title>\r
- </info>\r
- <para>While Evergreen is ready to go out of the box, libraries will want to customize Evergreen with their own color scheme, logos and layout. This chapter will explain how to \r
- customize Evergreen to meet the needs of your users. For these task some knowledge of <systemitem>html</systemitem> and <systemitem>css</systemitem> is required. Many of these \r
- instructions assume an installation of Evergreen using the default file locations.</para>\r
- <note>\r
- <para>Be sure to save a backup copy of all files you edit in a location other than <filename class="directory">/openils/var/web/opac/</filename> as files here could be \r
- overwritten when you upgrade your copy of Evergreen.</para>\r
- </note> \r
- <section xml:id="ColorScheme">\r
- <title>Change the Color Scheme</title>\r
- <indexterm><primary>OPAC</primary><secondary>customizing</secondary><tertiary>changing the color scheme</tertiary></indexterm>\r
- <para>To change the color scheme of the default Evergreen skin, edit <filename>/openils/var/web/opac/theme/default/css/colors.css</filename>. From this one file you can \r
- change the 4 base color scheme as well as colors of specific elements. \r
- </para> \r
- <para>You can also create alternate themes for your users.</para> \r
- <procedure>\r
- <step>\r
- <para>Copy the css folder and its contents from the example alternate theme <filename>/openils/var/web/opac/theme/reddish/</filename> \r
- to a new folder <filename>/openils/var/web/opac/theme/<emphasis>[your new theme]</emphasis>/</filename>.</para>\r
- </step> \r
- <step>\r
- <para>Edit <filename>/openils/var/web/opac/theme/<emphasis role="bold">[your new theme]</emphasis>/css/colors.css</filename> to use the colors you want.</para>\r
- </step>\r
- <step>\r
- <para>Link to your new style sheet by adding the following to <filename>/openils/var/web/opac/skin/default/xml/common/css_common.xml</filename>.</para>\r
-<programlisting language="xml">\r
-<link type='text/css'\r
-rel="alternate stylesheet" \r
-title='&opac.style.yourtheme;' \r
-href="<!--#echo var='OILS_THEME_BASE'-->/yourtheme/css/colors.css" \r
-name='Default' csstype='color'/>\r
-</programlisting> \r
- </step> \r
- <step>\r
- <para> Give your new theme a name users can select by adding the following to <filename>/openils/var/web/opac/locale/<emphasis role="bold">\r
- [your locale]</emphasis>/opac.dtd</filename>.</para>\r
- <screen><!ENTITY opac.style.yourtheme "YourTheme"></screen> \r
- </step> \r
- </procedure> \r
- </section>\r
- <section xml:id="customizing_opac_text">\r
- <title>customizing Opac Text and Labels</title>\r
- <indexterm><primary>OPAC</primary><secondary>customizing</secondary><tertiary>text and labels</tertiary></indexterm>\r
- <para>To change text and links used throughout the OPAC, edit the following files:</para>\r
- <itemizedlist>\r
- <listitem><filename>/openils/var/web/opac/locale/<emphasis role="bold">[your locale]</emphasis>/lang.dtd</filename></listitem>\r
- <listitem><filename>/openils/var/web/opac/locale/<emphasis role="bold">[your locale]</emphasis>/opac.dtd</filename></listitem>\r
- </itemizedlist>\r
- <tip>\r
- <para>A better way to customize OPAC text is to create custom dtd files for your lang and opac customizations and then add a include \r
- statement above the default dtd files.</para>\r
- <programlisting>\r
- <!DOCTYPE html PUBLIC \r
- "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [\r
- <!--#include virtual="/opac/locale/${locale}/custom_opac.dtd"-->\r
- <!--#include virtual="/opac/locale/${locale}/opac.dtd"-->\r
- ]>\r
- </programlisting>\r
- <para>position is important here. The first/top included dtd files will take precedence over the subsequent dtd includes.</para> \r
- </tip>\r
- <para>While it is possible to add text to the xml files itself, it is a good practice to use the DTD file to control the text and refer to the DTD elements in the xml/html code.</para> \r
- <para>For example, the <filename>footer.xml</filename> file has this code to generate a copyright statement:</para>\r
-<programlisting>\r
-<div id='copyright_text'>\r
-<span>&footer.copyright;</span>\r
-</programlisting>\r
- <para>The included <filename>opac.dtd</filename> file in the en-US locale directory has this setting for &footer.copyright text:</para> \r
- <programlisting><!ENTITY footer.copyright "Copyright © 2006-2010 Georgia Public Library Service, and others"></programlisting>\r
- </section>\r
- <section xml:id="Logo_Images">\r
- <title>Logo Images</title>\r
- <para>To change the logos used by default to your own logos, replace the following files with images of your own, appropriately sized. </para>\r
- <itemizedlist>\r
- <listitem>Large main logo:<filename>/openils/var/web/opac/images/main_logo.jpg</filename></listitem>\r
- <listitem>Small logo:<filename>/openils/var/web/opac/images/small_logo.jpg</filename></listitem>\r
- </itemizedlist> \r
- </section>\r
- <section xml:id="AddedContent">\r
- <title>Added Content</title>\r
- <indexterm><primary>OPAC</primary><secondary>added content</secondary></indexterm>\r
- <para>By default Evergreen includes customizable <quote>Added Content</quote> features to enhance the OPAC experience for your user. These features include Amazon book covers \r
- and Google books searching. These features can be turned off or customized.</para>\r
- <simplesect xml:id="bookcovers">\r
- <title>Book Covers</title>\r
- <para>The default install of Evergreen includes Amazon book covers. The settings for this are controlled by the <added_content> section of \r
- <filename>/openils/conf/opensrf.xml</filename>. Here are the key elements of this configuration:</para> \r
- <programlisting><module>OpenILS::WWW::AddedContent::Amazon</module></programlisting>\r
- <para>This calls the Amazon perl module. If you wish to link to a different book cover service other than Amazon, you must create a new perl module and refer to it here. \r
- You will also need to change other settings accordingly. There are some available book cover perl modules available in \r
- <ulink url="http://svn.open-ils.org/trac/ILS/browser/trunk/Open-ILS/src/perlmods/OpenILS/WWW/AddedContent">trunk</ulink></para>\r
- <programlisting><base_url>http://images.amazon.com/images/P/</base_url></programlisting>\r
- <para>Base URL for Amazon added content fetching. This URL may need to be shortened when new (read: non-image) content fetching \r
- capabilities are added.</para> \r
- <programlisting><timeout>1</timeout></programlisting>\r
- <para>Max number of seconds to wait for an added content request to return data. Data not returned within the timeout is considered a failure.</para> \r
- <programlisting><retry_timeout>600</retry_timeout></programlisting>\r
- <para>After added content lookups have been disabled due to too many lookup failures, this is the amount of time to wait before we try again.</para>\r
- <programlisting><max_errors>15</max_errors></programlisting>\r
- <para>Maximum number of consecutive lookup errors a given process can live before added content lookups are disabled for everyone.</para> \r
- <programlisting><userid>MY_USER_ID</userid></programlisting>\r
- <para>If a userid is required to access the added content.</para>\r
- </simplesect>\r
- <simplesect xml:id="googlebookslink">\r
- <title>Google Books Link</title>\r
- <indexterm><primary>OPAC</primary><secondary>added content</secondary><tertiary>Google Books</tertiary></indexterm>\r
- <para>The results page will display a <emphasis role="bold">Browse in Google Books Search</emphasis> link for items in the results page which have corresponding entries\r
- in <systemitem class="resource">Google Books</systemitem>. \r
- This will link to Google Books content including table of contents and complete versions of the work if it exists in Google Books. Items not in Google Books will not \r
- display a link. This feature can be turned off by changing the googleBooksLink variable setting to <emphasis>false</emphasis> in the file \r
- <filename>/openils/var/web/opac/skin/default/js/result_common.js</filename>. By default, this feature is activated. </para> \r
- </simplesect>\r
- <simplesect xml:id="addedcontent-syndetics">\r
- <title>Syndetics</title><indexterm><primary>added content</primary><secondary>Syndetics</secondary></indexterm>\r
- <para>Sydantics is another option for added content, Here is an example of using Sydantics as your added content provider:</para>\r
- \r
-<programlisting>\r
-<![CDATA[\r
- <!-- We're using Syndetics -->\r
- <module>OpenILS::WWW::AddedContent::Syndetic</module>\r
- <base_url>http://syndetics.com/index.aspx</base_url>\r
-\r
- <!-- A userid is required to access the added content from Syndetic. -->\r
- <userid>uneedsomethinghere</userid>\r
-\r
- <!--\r
- Max number of seconds to wait for an added content request to\r
- return data. Data not returned within the timeout is considered\r
- a failure\r
- -->\r
- <timeout>1</timeout>\r
-\r
- <!--\r
- After added content lookups have been disabled due to too many\r
- lookup failures, this is the amount of time to wait before\r
- we try again\r
- -->\r
- <retry_timeout>600</retry_timeout>\r
-\r
- <!--\r
- maximum number of consecutive lookup errors a given process can\r
- have before added content lookups are disabled for everyone\r
- -->\r
- <max_errors>15</max_errors>\r
-\r
- </added_content>\r
-]]>\r
-</programlisting>\r
- <note><para>Sydantics is a fee based service. For details, visit: <ulink url="http://www.bowker.com/syndetics/">http://www.bowker.com/syndetics/</ulink></para></note> \r
- </simplesect> \r
- </section>\r
- <section xml:id="resultspage">\r
- <title>Customizing the Results Page</title>\r
- <para>The results page is extremely customizable and allows some built in features to be activated with some simple edits or more advanced customizations can be done by more \r
- experienced web developers.</para>\r
- <para>There are several critical files to edit if you wish to customize the results page:</para>\r
- <itemizedlist>\r
- <listitem><filename>/openils/var/web/opac/skin/default/js/result_common.js</filename> - This file controls the JavaScript for the top level elements on the results \r
- page and should only be edited by experienced web developers except for the <link linkend='googlebookslink'>Google books link setting</link> mentioned previously.</listitem>\r
- <listitem><filename>/openils/var/web/opac/skin/default/js/rresult.js</filename> - Has some good controls of results page settings at the top of this file but \r
- requires web development skills for editing this file.</listitem>\r
- <listitem><filename>/openils/var/web/opac/skin/default/xml/result/rresult_table.xml</filename> - This controls the layout of the items table on results page.</listitem>\r
- </itemizedlist> \r
- </section>\r
- <section xml:id="deatailspage">\r
- <title>Customizing the Details Page</title>\r
- <indexterm><primary>OPAC</primary><secondary>customizing</secondary><tertiary>details page</tertiary></indexterm>\r
- <para>There are many options when customizing the details page in Evergreen. The default settings are effective for most libraries, but it is important to understand the full potential \r
- of Evergreen when displaying the details of items.</para> \r
- <para>Some quick features can be turned on and off by changing variable values in the file <filename>/openils/var/web/opac/skin/default/js/rdedail.js</filename>. \r
- You will notice the section at the top of this file called <quote>Per-skin configuration settings</quote>. Changing setting in this section can control several features including \r
- limiting results to local only or showing copy location or displaying serial holdings. Form this section you can also enable refworks and set the Refworks host URL.</para>\r
- <para>Some copy level details settings can be turned on and off from <filename>/openils/var/web/opac/skin/default/js/copy_details.js</filename> including displaying certain fields \r
- such as due date in the OPAC.</para>\r
- <para>An important file is the <filename>/openils/var/web/opac/skin/default/xml/rdetail/rdetail_summary.xml</filename> file. This file allows you to control which field to display in \r
- the details summary of the record. The new <link linkend='BibTemplate'>BibTemplate</link> feature makes this file even more powerful by allowing you to display any marc fields \r
- with a variety of formatting options.</para>\r
- <para>The <filename>/openils/var/web/opac/skin/default/xml/rdetail/rdetail_copyinfo.xml</filename> file allows you to format the display of the copy information.</para> \r
- </section> \r
- <section xml:id="BibTemplate">\r
- <title>BibTemplate</title><indexterm><primary>BibTemplate</primary></indexterm>\r
- <para>BibTemplate is an Evergreen-custom Dojo module which can be used to retrieve and format XML data served by the Evergreen <systemitem class="protocol">unAPI</systemitem> service. <systemitem class="protocol">unAPI</systemitem> is a protocol for requesting known objects in specific formats, and Evergreen uses this to supply data – bibliographic records, \r
- metarecords, monograph holdings information, Located URIs, and more to come – in many different formats from MARCXML to MODS to custom XML applications.</para>\r
- <indexterm><primary>unAPI</primary></indexterm> <indexterm><primary>MARCXML</primary></indexterm><indexterm><primary>MODS</primary></indexterm>\r
- <para>Managing the display of information from raw XML can be difficult, and the purpose of BibTemplate is to make this simpler, as well as move the display closer to the \r
- client and away from the source data. This is good from a separation-of-responsibilities perspective, and also makes it easier to contain and control local customization.</para>\r
- <para>BibTemplate supports the following Evergreen meta data formats:</para>\r
- <itemizedlist>\r
- <listitem>MARCXML - datatype='marcxml-full' (default)</listitem> \r
- <listitem>MODS 3.3: datatype='mods33'</listitem>\r
- <listitem>Dublin Core: datatype='rdf_dc'</listitem><indexterm><primary>Dublin Core</primary></indexterm>\r
- <listitem>FGDC: datatype='fgdc'</listitem><indexterm><primary>FGDC</primary></indexterm>\r
- </itemizedlist> \r
- <simplesect>\r
- <title>HTML API</title>\r
- <para>BibTemplate follows the Dojo convention of adding attributes to existing (X)HTML in order to progressively change its behavior. The 1.6.0 HTML API consists of a \r
- set of attributes that are added to existing OPAC markup, and fall into two classes:</para><indexterm><primary>Dojo toolkit</primary></indexterm>\r
- <itemizedlist>\r
- <listitem> The slot marker – Elements that denote the location of bibliographic data to insert.</listitem>\r
- <listitem>The slot formatter – Elements that specify how the named data should be formatted for display.</listitem>\r
- </itemizedlist> \r
- </simplesect>\r
- <simplesect>\r
- <title>Slot Marker</title><indexterm><primary>slot marker</primary></indexterm>\r
- <para>A slot marker is any displayable HTML element that has a type attribute with a value starting with opac/slot-data. This element will become the container \r
- for the formatted data. A slot marker is required in order to retrieve, format and display data using BibTemplate. A slot marker must also have an \r
- attribute called query containing a CSS3 selector. This selector is applied to the XML returned by the unAPI service in order to gather the specific XML \r
- Nodes that should be considered for formatting.</para><indexterm><primary>CSS3</primary></indexterm>\r
- <para>The slot marker can also specify the format of the data to be returned from the unAPI service. This can be specified by adding +{format} to the type \r
- attribute, as in opac/slot-data+mods33-full. The default data format is marcxml-uri, which is an augmented MARCXML record containing Located URI information \r
- and unAPI links.</para>\r
- <para>Example of a slot marker:</para>\r
- <screen><p type='opac/slot-data' query='datafield[tag=245]'></p></screen>\r
- <para>Most useful attribute match operators include:</para>\r
- <itemizedlist>\r
- <listitem> datafield[tag=245] - exact match</listitem>\r
- <listitem>datafield[tag^=65] - match start of value</listitem>\r
- </itemizedlist> \r
- <tip><para>Selectors always narrow, so select broadly and iterate through the NodeList</para></tip>\r
- </simplesect>\r
- <simplesect>\r
- <title>Slot Formatter</title><indexterm><primary>slot formatter</primary></indexterm>\r
- <para>A slot formatter is any invisible HTML element which has a type attribute with the value of opac/slot-format. (NOTE: before 1.6.0.4, only <script> \r
- elements were supported, though this restriction is now removed to support Internet Explorer.) Only one slot formatter element is allowed in each slot. The text contents \r
- of this element are wrapped in a JavaScript<indexterm><primary>JavaScript</primary></indexterm> function and run for each node returned by the query CSS3 selector \r
- specified on the slot marker. This function is passed \r
- one argument, called item, which an XML Node captured by the selector. This function should return HTML text. The output for all runs of the slot formatter is \r
- concatenated into a single string and used to replace the contents of the slot marker.</para>\r
- <para>The slot formatter is optional, and if not supplied BibTemplate will create a simple function which extracts and returns the text content of the XML Nodes \r
- specified in the CSS3 selector.</para>\r
- <para>Example of a slot formatter:</para>\r
-<programlisting>\r
- <td class='rdetail_item' id='rdetail_online' type='opac/slot-data' \r
- query='volumes volume uris uri' join=", ">\r
- <script type='opac/slot-format'><![CDATA[\r
- var link = '<a href="' + item.getAttribute('href') + '">' + item.getAttribute('label') + '</a>';\r
- if (item.getAttribute('use_restriction'))\r
- link += ' (Use restriction: ' + item.getAttribute('use_restriction') + ')';\r
- return link;\r
- ]]></script>\r
- </td>\r
-</programlisting>\r
- </simplesect>\r
- <simplesect>\r
- <title>JavaScript API</title><indexterm><primary>JavaScript</primary></indexterm>\r
- <para>In order for BibTemplate to find the slot markers and invoke the slot formatters JavaScript renderer must be instantiated and called. This must be done \r
- for each record that is to contribute to a pages display. The API for this is simple and straight-forward:</para>\r
- <para>The slot formatter is optional, and if not supplied BibTemplate will create a simple function which extracts and returns the text content of the XML Nodes \r
- specified in the CSS3 selector.</para><indexterm><primary>CSS3</primary></indexterm>\r
- <para>Example of a slot formatter:</para>\r
-<programlisting>\r
- dojo.require('openils.BibTemplate'); // Tell Dojo to load BibTemplate, if it is not already loaded\r
- \r
- // Create a renderer supplying the record id and the short name of the org unit, if known, \r
- // and call the render() method \r
- new openils.BibTemplate({ record : new CGI().param('r'), org_unit : here.shortname() }).render(); \r
-</programlisting>\r
- <para>The argument hash supplied to the new <systemitem>openils.BibTemplate()</systemitem> constructor can have the following properties:</para>\r
- <itemizedlist>\r
- <listitem>record – The bibliographic record ID.</listitem>\r
- <listitem>org_unit – The relevant Organizational Unit, used to restrict holdings scope as on a search result or record detail page.</listitem>\r
- <listitem>root – The root element within the web page that BibTemplate should search for slot markers</listitem>\r
- </itemizedlist> \r
- </simplesect>\r
- <simplesect>\r
- <title>BibTemplate Examples</title>\r
- <para>This is all that we had to add to display the contents of an arbitrary MARC field:</para>\r
-<programlisting>\r
-<tr>\r
- <td>Bibliography note</td>\r
- <td type='opac/slot-data' query='datafield[tag=504]'></td>\r
-</tr>\r
-</programlisting>\r
- <note><para>If multiple fields match, they are displayed on consecutive lines within the same left-hand cell.</para></note>\r
- <para>To display a specific MARC subfield, add that subfield to the query attribute.</para><indexterm><primary>MARC</primary></indexterm>\r
- <para>For example, subfield $a is the only user-oriented subfield in field 586 (Awards Note)</para>\r
-<programlisting>\r
-<tr>\r
- <td>Awards note</td>\r
- <td type='opac/slot-data' query='datafield[tag=586] subfield[code=a]'></td>\r
-</tr>\r
-</programlisting>\r
- <para>Hide empty rows by default, and display them only if they have content:</para>\r
-<programlisting>\r
- <tr class='hide_me' id='tag504'>\r
- <td>Bibliographic note</td>\r
- <td type='opac/slot-data' query='datafield[tag=504]'>\r
- <script type='opac/slot-format'><![CDATA[\r
- dojo.query('#tag504').removeClass('hide_me');\r
- return '<span>' + dojox.data.dom.textContent(item) +\r
- '</span><br/>';\r
- ]]></script>\r
- </td></tr>\r
-</programlisting>\r
- <itemizedlist>\r
- <listitem><![CDATA[ ... ]]> tells Evergreen Web server to treat the contents as literal <quote>character data</quote> - \r
- avoids hilarity of entity substitution</listitem>\r
- <listitem><script type='opac/slot-format'>...</script>, contained within an <quote>opac/slot-data</quote> element, receives a variable named item \r
- containing the results of the query (a NodeList)</listitem> \r
- </itemizedlist> \r
- <para>Suppressing a subfield:</para>\r
-<programlisting>\r
-<tr class='hide_me' id='tag700'>\r
- <td>Additional authors</td>\r
- <td type='opac/slot-data' query='datafield[tag=700]'>\r
- <script type='opac/slot-format'><![CDATA[\r
- dojo.query('#tag700').removeClass('hide_me');\r
- var text = '';\r
- var list = dojo.query('subfield:not([code=4])', item);\r
- for (var i =0; i < list.length; i++) {\r
- text += dojox.data.dom.textContent(list[i]) + ' ';\r
- }\r
- return '<span>' + text + '</span><br/>';\r
- ]]></script>\r
- </td></tr>\r
-</programlisting>\r
- </simplesect>\r
- </section>\r
- <section xml:id="customizingslimpac">\r
- <title>Customizing the Slimpac</title>\r
- <para>The Slimpac is the an alternative OPAC display for browsers or devices without JavaScript or which may have screen size limitations. There is both a simple and advanced search \r
- option for the Slimpac.</para> \r
- <para>The html files for customizing the Slimpac search display are located in the folder <filename class="directory">/openils/var/web/opac/extras/slimpac</filename>.</para>\r
- <para><filename>start.html</filename> is the basic search display and <filename>advanced.html</filename> is the display for the advanced search option.</para> \r
- <para>By default, the Slimpac files include the same locale dtd as the regular OPAC (<filename>opac.dtd</filename>). However, the slimpac files do not use the same CSS files as the \r
- regular OPAC which means that if you change the OPAC color scheme, you must also edit the Slimpac files.</para>\r
- <simplesect>\r
- <title>Customizing the Slimpac Results Display</title>\r
- <para>Two files control the display results for the slimpac. Edit the XSL stylesheet (<filename>/openils/var/xsl/ATOM2XHTML.xsl</filename>) to edit the elements of the \r
- record as pulled from the XML output. \r
- You may also change the style of the page by editing the CSS stylesheet for the results display (<filename>/openils/var/web/opac/extras/os.css</filename>).</para> \r
- </simplesect>\r
- <simplesect>\r
- <title>Customizing the Slimpac Details/Holdings Display</title> \r
- <para>It is also possible to customize the details page when viewing specific items from the results list. To edit the holdings display which contains the details of the specific \r
- record linked from the results display, edit the CSS stylesheet for the holdings/details page \r
- (<filename>/openils/var/web/opac/extras/htmlcard.css</filename>). You may also control the content of the record by editing <filename>MARC21slim2HTMLCard.xsl</filename>. \r
- Holdings data may also be controlled by editing <filename>MARC21slim2HTMLCard-holdings.xsl</filename>.</para> \r
- </simplesect>\r
- </section>\r
- <section xml:id="integratingsearchforms">\r
- <title>Integrating a Evergreen Search Form on a Web Page</title>\r
- <para>It is possible to embed a simple search form into an html page which will allow users to search for materials in your Evergreen catalog. Here is code which can be embedded \r
- anywhere in the body of your web page:</para> \r
-<programlisting language="html"><![CDATA[\r
-<form action="http://[domain name]/opac/[locale]/skin/default/xml/rresult.xml" method="get">\r
-<div>\r
- Quick Catalog Search:<br />\r
- <input type="text" alt="Input Box for Catalog Search" maxlength="250" \r
- size="20" id="t" name="t" value="" />\r
- <input type="hidden" id="rt" name="rt" value="keyword" />\r
- <input type="hidden" id="tp" name="tp" value="keyword" />\r
- <input type="hidden" id="l" name="l" value="2" />\r
- <input type="hidden" id="d" name="d" value="" />\r
- <input type="hidden" id="f" name="f" value="" />\r
- <input type="submit" value="Search" class="form-submit" />\r
- </div>\r
-</form>\r
-]]>\r
-</programlisting>\r
- <para> Replace <emphasis>[domain name]</emphasis> with the domain name of your Evergreen server and replace <emphasis>[locale]</emphasis> with the desired locale of \r
- your Evergreen instance (e.g. en-US). This does a basic keyword search. Different types of searches and more advanced search forms can be developed.</para> \r
- </section>\r
-</chapter>\r
-\r
+++ /dev/null
-<?xml version='1.0' encoding='UTF-8'?>\r
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"\r
- xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:id="customizingstaffclient">\r
- <title>Customizing the Staff Client</title>\r
- <indexterm><primary>staff client</primary><secondary>customizing</secondary></indexterm>\r
- <para>This chapter will give you some guidance on customizing the staff client.</para> \r
- <para>The files related to the staff client are located in the directory <filename class="directory">/openils/var/web/xul/[staff client version]/server/</filename></para> \r
- <section xml:id="staffclient_Changingcolors">\r
- <title>Changing Colors and Images</title>\r
- <para>To change or adjust the image on the main screen edit <filename>/openils/var/web/xul/index.xhtml</filename>. By default, the image on this page is \r
- <filename>main_logo.jpg</filename> which is the same main logo used in the OPAC.</para>\r
- <para>To adjust colors on various staff client pages edit the corresponding cascading style sheets located in \r
- <filename class="directory">/openils/var/web/xul/[staff client version]/server/skin/</filename>. Other display aspects can also be adjusted using these cascading style sheets.</para> \r
- </section>\r
- <section xml:id="staffclient_Changinglabels">\r
- <title>Changing Labels and Messages</title>\r
- <indexterm><primary>staff client</primary><secondary>customizing</secondary><tertiary>labels and messages</tertiary></indexterm>\r
- <para>You can customize labels in the staff client by editing the corresponding DTD files. The staff client uses the same <filename>lang.dtd</filename> used by the OPAC. This file is located in <filename class="directory">/openils/var/web/opac/locale/[<emphasis>your locale</emphasis>]</filename>. Other labels are controlled by the staff client specific <filename>lang.dtd</filename> file in <filename class="directory">/openils/var/web/xul/<emphasis>client version</emphasis>]/server/locale/[<emphasis>your locale</emphasis>]/</filename>.</para>\r
- </section>\r
- <section xml:id="staffclient_searchskin">\r
- <title>Changing the Search Skin</title>\r
- <para>There are a few ways to change the custom skin for OPAC searching in staff client.</para> \r
- <simplesect>\r
- <title>Changing the Search Skin on Server - Overriding Local Settings</title> \r
- <para>To change the opac search skins used by the staff client create a file named <filename>custom.js</filename> and place it in the \r
- <filename class="directory">/openils/var/web/xul/[staff client version]/server/skin/</filename> directory. This will effect all staff clients since these settings will \r
- override local settings.</para> \r
- <para>For example, the following text in <filename>custom.js</filename> would set the staff client opac, details page, results page and browse function to the craftsman \r
- skin:</para> \r
-<programlisting language="JavaScript">\r
-urls['opac'] = '/opac/' + LOCALE + '/skin/craftsman/xml/advanced.xml?nps=1';\r
-urls['opac_rdetail'] = '/opac/' + LOCALE + '/skin/craftsman/xml/rdetail.xml';\r
-urls['opac_rresult'] = '/opac/' + LOCALE + '/skin/craftsman/xml/rresult.xml';\r
-urls['browser'] = '/opac/' + LOCALE + '/skin/craftsman/xml/advanced.xml?nps=1';\r
-</programlisting>\r
- <para>Restart the staff client to see the changes.</para> \r
- </simplesect>\r
- <simplesect>\r
- <title>Changing the Search Skin on an individual Machine</title> \r
- <para>To change the search skin on an individual machine for personal preferences or needs, edit the file \r
- <filename>/[Evergreen staff client path]/build/chrome/content/main/constants.js</filename>.</para> \r
- <para>Find the lines which point to the urls for the OPAC and edit accordingly. For example, here is an example to set the opac, details page, results page and browse \r
- function to the craftsman skin:</para> \r
-<programlisting language="JavaScript">\r
- 'opac' : '/opac/' + LOCALE + '/skin/craftsman/xml/advanced.xml?nps=1',\r
-'opac_rdetail' : '/opac/' + LOCALE + '/skin/craftsman/xml/rdetail.xml',\r
-'opac_rresult' : '/opac/' + LOCALE + '/skin/craftsman/xml/rresult.xml',\r
-...\r
-'browser' : '/opac/' + LOCALE + '/skin/craftsman/xml/advanced.xml?nps=1',\r
-</programlisting>\r
- <para>After editing this file, save it and restart the staff client for the changes to take effect.</para> \r
- </simplesect>\r
- </section>\r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<chapter xml:id="data_models_and_access" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
- <chapterinfo>\r
- <title>Evergreen Data Models and Access</title>\r
- </chapterinfo>\r
- <abstract id="DM_abstract">\r
- <simpara>This chapter was taken from Dan Scott's <emphasis>Developer Workshop</emphasis>, February 2010.</simpara>\r
- </abstract>\r
- <section id="exploring_database_schema">\r
- <title>Exploring the Database Schema</title>\r
- <simpara>The database schema is tied pretty tightly to PostgreSQL. Although PostgreSQL<indexterm><primary>databases</primary><secondary>PostgreSQL</secondary></indexterm>\r
- adheres closely to ANSI SQL standards, the use of schemas, SQL functions<indexterm><primary>ANSI</primary></indexterm>\r
- implemented in both <systemitem>plpgsql</systemitem> and <systemitem>plperl</systemitem>, and PostgreSQL’s native full-text\r
- search would make it… challenging… to port to other database platforms.</simpara>\r
- <simpara>A few common PostgreSQL interfaces for poking around the schema and\r
- manipulating data are:</simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- psql (the command line client)<indexterm><primary>databases</primary><secondary>PostgreSQL</secondary><tertiery>psql</tertiery></indexterm>\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- pgadminIII (a GUI client).<indexterm><primary>databases</primary><secondary>PostgreSQL</secondary><tertiery>pgadminIII</tertiery></indexterm>\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- <simpara>Or you can read through the source files in <filename class="directoy">Open-ILS/src/sql/Pg</filename>.</simpara>\r
- <simpara>Let’s take a quick tour through the schemas, pointing out some highlights\r
- and some key interdependencies:</simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- actor.org_unit → asset.copy_location\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- actor.usr → actor.card\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- biblio.record_entry → asset.call_number → asset.copy\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- config.metabib_field → metabib.*_field_entry\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- This documentation also contains an Appendix for the Evergreen <xref linkend="databaseschema"/>. \r
- </section>\r
- <section id="_database_access_methods">\r
- <title>Database access methods</title>\r
- <simpara>You could use direct access to the database via Perl DBI, JDBC, etc,\r
- but Evergreen offers several database CRUD services for\r
- creating / retrieving / updating / deleting data. These avoid tying\r
- you too tightly to the current database schema and they funnel database\r
- access through the same mechanism, rather than tying up connections\r
- with other interfaces.</simpara>\r
- </section>\r
- <section id="_evergreen_interface_definition_language_idl">\r
- <title>Evergreen Interface Definition Language (IDL)</title>\r
- <indexterm><primary>Evergreen Interface Definition Language (IDL)</primary></indexterm>\r
- <simpara>Defines properties and required permissions for Evergreen classes.\r
- To reduce network overhead, a given object is identified via a\r
- class-hint and serialized as a JSON array of properties (no named properties).</simpara>\r
- <simpara>As of 1.6, fields will be serialized in the order in which they appear\r
- in the IDL definition file, and the is_new / is_changed / is_deleted\r
- properties are automatically added. This has greatly reduced the size of\r
- the <literal>fm_IDL.xml</literal> file and makes DRY people happier :)</simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- … oils_persist:readonly tells us, if true, that the data lives in the database, but is pulled from the SELECT statement defined in the <oils_persist:source_definition> \r
- child element\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- <simplesect id="_idl_basic_example_config_language_map">\r
- <title>IDL basic example (config.language_map)</title>\r
-<programlisting language="xml" linenumbering="unnumbered">\r
-<class id="clm" controller="open-ils.cstore open-ils.pcrud"\r
- oils_obj:fieldmapper="config::language_map"\r
- oils_persist:tablename="config.language_map"\r
- reporter:label="Language Map" oils_persist:field_safe="true"> <co id="dmCO5-1"/> <co id="dmCO5-2"/> <co id="dmCO5-3"/> <co id="dmCO5-4"/>\r
- <fields oils_persist:primary="code" oils_persist:sequence=""> <co id="dmCO5-5"/>\r
- <field reporter:label="Language Code" name="code"\r
- reporter:selector="value" reporter:datatype="text"/> <co id="dmCO5-6"/>\r
- <field reporter:label="Language" name="value"\r
- reporter:datatype="text" oils_persist:i18n="true"/> <co id="dmCO5-7"/>\r
- </fields>\r
- <links/>\r
- <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1"> <co id="dmCO5-8"/>\r
- <actions>\r
- <create global_required="true" permission="CREATE_MARC_CODE"> <co id="dmCO5-9"/>\r
- <retrieve global_required="true"\r
- permission="CREATE_MARC_CODE UPDATE_MARC_CODE DELETE_MARC_CODE">\r
- <update global_required="true" permission="UPDATE_MARC_CODE">\r
- <delete global_required="true" permission="DELETE_MARC_CODE">\r
- </actions>\r
- </permacrud>\r
-</class>\r
-</programlisting>\r
- <calloutlist>\r
- <callout arearefs="dmCO5-1">\r
- <simpara>\r
- The <literal>class</literal> element defines the attributes and permissions for classes,\r
- and relationships between classes.\r
- </simpara>\r
- <indexterm><primary>Evergreen Interface Definition Language (IDL)</primary><secondary>class element</secondary></indexterm>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- The <literal>id</literal> attribute on the <literal>class</literal> element defines the class hint that is\r
- used everywhere in Evergreen.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>controller</literal> attribute defines the OpenSRF\r
- services that provide access to the data for the class objects.\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- </callout>\r
- <callout arearefs="dmCO5-2">\r
- <simpara>\r
- The <literal>oils_obj::fieldmapper</literal> attribute defines the name of the class that\r
- is generated by <literal>OpenILS::Utils::Fieldmapper</literal>.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="dmCO5-3">\r
- <simpara>\r
- The <literal>oils_persist:tablename</literal> attribute defines the name of the table\r
- that contains the data for the class objects.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="dmCO5-4">\r
- <simpara>\r
- The reporter interface uses <literal>reporter:label</literal> attribute values in\r
- the source list to provide meaningful class and attribute names. The\r
- <literal>open-ils.fielder</literal> service generates a set of methods that provide direct\r
- access to the classes for which <literal>oils_persist:field_safe</literal> is <literal>true</literal>. For\r
- example,\r
- </simpara>\r
-<screen>\r
-<userinput>\r
-srfsh# request open-ils.fielder open-ils.fielder.clm.atomic \\r
-{"query":{"code":{"=":"eng"}}}\r
-\r
-Received Data: [\r
- {\r
- "value":"English",\r
- "code":"eng"\r
- }\r
-]\r
-</userinput>\r
-</screen>\r
- </callout>\r
- <callout arearefs="dmCO5-5">\r
- <simpara>\r
- The <literal>fields</literal> element defines the list of fields for the class.\r
- </simpara>\r
- <indexterm><primary>Evergreen Interface Definition Language (IDL)</primary><secondary>fields element</secondary></indexterm>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- The <literal>oils_persist:primary</literal> attribute defines the column that acts as\r
- the primary key for the table.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>oils_persist:sequence</literal> attribute holds the name of the database\r
- sequence.\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- </callout>\r
- <callout arearefs="dmCO5-6">\r
- <simpara>\r
- Each <literal>field</literal> element defines one property of the class.\r
- </simpara>\r
- <indexterm><primary>Evergreen Interface Definition Language (IDL)</primary><secondary>field element</secondary></indexterm>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- The <literal>name</literal> attribute defines the getter/setter method name for the field.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>reporter:label</literal> attribute defines the attribute name as used in\r
- the reporter interface.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>reporter:selector</literal> attribute defines the field used in the reporter\r
- filter interface to provide a selectable list. This gives the user a more\r
- meaningful access point than the raw numeric ID or abstract code.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>reporter:datatype</literal> attribute defines the type of data held by\r
- this property for the purposes of the reporter.\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- </callout>\r
- <callout arearefs="dmCO5-7">\r
- <simpara>\r
- The <literal>oils_persist:i18n</literal> attribute, when <literal>true</literal>, means that\r
- translated values for the field’s contents may be accessible in\r
- different locales.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="dmCO5-8">\r
- <simpara>\r
- <indexterm><primary>Evergreen Interface Definition Language (IDL)</primary><secondary>permacrud element</secondary></indexterm>\r
- The <literal>permacrud</literal> element defines the permissions (if any) required\r
- to <emphasis role="strong">c</emphasis>reate, <emphasis role="strong">r</emphasis>etrieve, <emphasis role="strong">u</emphasis>pdate, \r
- and <emphasis role="strong">d</emphasis>elete data for this\r
- class. <literal>open-ils.permacrud</literal> must be defined as a controller for the class\r
- for the permissions to be applied.\r
- </simpara>\r
- \r
- </callout>\r
- <callout arearefs="dmCO5-9">\r
- <simpara>\r
- Each action requires one or more <literal>permission</literal> values that the\r
- user must possess to perform the action.\r
- </simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- If the <literal>global_required</literal> attribute is <literal>true</literal>, then the user must\r
- have been granted that permission globally (depth = 0) to perform\r
- the action.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- The <literal>context_field</literal> attribute denotes the <literal><field></literal> that identifies\r
- the org_unit at which the user must have the pertinent permission.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <indexterm><primary>Evergreen Interface Definition Language (IDL)</primary><secondary>action element</secondary></indexterm>\r
- <simpara>\r
- An action element may contain a <literal><context_field></literal> element that\r
- defines the linked class (identified by the <literal>link</literal> attribute) and\r
- the field in the linked class that identifies the org_unit where\r
- the permission must be held.\r
- </simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <indexterm><primary>Evergreen Interface Definition Language (IDL)</primary><secondary>context_field element</secondary></indexterm>\r
- <simpara>\r
- If the <literal><context_field></literal> element contains a <literal>jump</literal> attribute,\r
- then it defines a link to a link to a class with a field identifying\r
- the org_unit where the permission must be held.\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- </listitem>\r
- </itemizedlist>\r
- </callout>\r
- </calloutlist>\r
- </simplesect>\r
- <simplesect id="_reporter_data_types_and_their_possible_values">\r
- <title>Reporter data types and their possible values</title>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- <literal>bool</literal>: Boolean <literal>true</literal> or <literal>false</literal>\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>id</literal>: ID of the row in the database\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>int</literal>: integer value\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>interval</literal>: PostgreSQL time interval\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>link</literal>: link to another class, as defined in the <literal><links></literal>\r
- element of the class definition\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>money</literal>: currency amount\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>org_unit</literal>: list of org_units\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>text</literal>: text value\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>timestamp</literal>: PostgreSQL timestamp\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- </simplesect>\r
- <simplesect id="_idl_example_with_linked_fields_actor_workstation">\r
- <title>IDL example with linked fields (actor.workstation)</title>\r
- <simpara>Just as tables often include columns with foreign keys that point\r
- to values stored in the column of a different table, IDL classes\r
- can contain fields that link to fields in other classes. The <literal><links></literal>\r
- element defines which fields link to fields in other classes, and\r
- the nature of the relationship:</simpara>\r
-<programlisting language="xml" linenumbering="unnumbered">\r
-<class id="aws" controller="open-ils.cstore"\r
- oils_obj:fieldmapper="actor::workstation"\r
- oils_persist:tablename="actor.workstation"\r
- reporter:label="Workstation">\r
- <fields oils_persist:primary="id"\r
- oils_persist:sequence="actor.workstation_id_seq">\r
- <field reporter:label="Workstation ID" name="id"\r
- reporter:datatype="id"/>\r
- <field reporter:label="Workstation Name" name="name"\r
- reporter:datatype="text"/>\r
- <field reporter:label="Owning Library" name="owning_lib"\r
- reporter:datatype="org_unit"/>\r
- <field reporter:label="Circulations" name="circulations"\r
- oils_persist:virtual="true" reporter:datatype="link"/> <co id="dmCO6-1"/>\r
- </fields>\r
- <links> <co id="dmCO6-2"/>\r
- <link field="owning_lib" reltype="has_a" key="id"\r
- map="" class="aou"/> <co id="dmCO6-3"/>\r
- <link field="circulations" reltype="has_many" key="workstation"\r
- map="" class="circ"/>\r
- <link field="circulation_checkins" reltype="has_many"\r
- key="checkin_workstation" map="" class="circ"/>\r
- </links>\r
-</class>\r
-</programlisting>\r
- <calloutlist>\r
- <callout arearefs="dmCO6-1">\r
- <simpara>\r
- This field includes an <literal>oils_persist:virtual</literal> attribute with the value of\r
- <literal>true</literal>, meaning that the linked class <literal>circ</literal> is a virtual class.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="dmCO6-2">\r
- <simpara>\r
- The <literal><links></literal> element contains 0 or more <literal><link></literal> elements.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="dmCO6-3">\r
- <simpara>\r
- Each <literal><link></literal> element defines the field (<literal>field</literal>) that links to a different\r
- class (<literal>class</literal>), the relationship (<literal>rel_type</literal>) between this field and the target\r
- field (<literal>key</literal>). If the field in this class links to a virtual class, the (<literal>map</literal>)\r
- attribute defines the field in the target class that returns a list of matching\r
- objects for each object in this class.\r
- </simpara>\r
- </callout>\r
- </calloutlist>\r
- </simplesect>\r
- </section>\r
- <section id="open_ils_cstore_literal_data_access_interfaces">\r
- <title><literal>open-ils.cstore</literal> data access interfaces</title>\r
- <indexterm><primary>cstore</primary></indexterm>\r
- <simpara>For each class documented in the IDL, the <literal>open-ils.cstore</literal> service\r
- automatically generates a set of data access methods, based on the\r
- <literal>oils_persist:tablename</literal> class attribute.</simpara>\r
- <simpara>For example, for the class hint <literal>clm</literal>, cstore generates the following\r
- methods with the <literal>config.language_map</literal> qualifer:</simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.cstore.direct.config.language_map.id_list {"code" { "like": "e%" } }</literal>\r
- </simpara>\r
- <simpara>Retrieves a list composed only of the IDs that match the query.</simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.cstore.direct.config.language_map.retrieve "eng"</literal>\r
- </simpara>\r
- <simpara>Retrieves the object that matches a specific ID.</simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.cstore.direct.config.language_map.search {"code" : "eng"}</literal>\r
- </simpara>\r
- <simpara>Retrieves a list of objects that match the query.</simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.cstore.direct.config.language_map.create <_object_></literal>\r
- </simpara>\r
- <simpara>Creates a new object from the passed in object.</simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.cstore.direct.config.language_map.update <_object_></literal>\r
- </simpara>\r
- <simpara>Updates the object that has been passed in.</simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.cstore.direct.config.language_map.delete "eng"</literal>\r
- </simpara>\r
- <simpara>Deletes the object that matches the query.</simpara>\r
- </listitem>\r
- </itemizedlist>\r
- </section>\r
- <section id="_open_ils_pcrud_data_access_interfaces">\r
- <title>open-ils.pcrud data access interfaces</title>\r
- <indexterm><primary>pcrud</primary></indexterm>\r
- <simpara>For each class documented in the IDL, the <literal>open-ils.pcrud</literal> service\r
- automatically generates a set of data access methods, based on the\r
- <literal>oils_persist:tablename</literal> class attribute.</simpara>\r
- <simpara>For example, for the class hint <literal>clm</literal>, <literal>open-ils.pcrud</literal> generates the following\r
- methods that parallel the <literal>open-ils.cstore</literal> interface:</simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.pcrud.id_list.clm <_authtoken_>, { "code": { "like": "e%" } }</literal>\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.pcrud.retrieve.clm <_authtoken_>, "eng"</literal>\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.pcrud.search.clm <_authtoken_>, { "code": "eng" }</literal>\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.pcrud.create.clm <_authtoken_>, <_object_></literal>\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.pcrud.update.clm <_authtoken_>, <_object_></literal>\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.pcrud.delete.clm <_authtoken_>, "eng"</literal>\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- </section>\r
- <section id="_transaction_and_savepoint_control">\r
- <title>Transaction and savepoint control</title>\r
- <simpara>Both <literal>open-ils.cstore</literal> and <literal>open-ils.pcrud</literal> enable you to control database transactions\r
- to ensure that a set of operations either all succeed, or all fail,\r
- atomically:</simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.cstore.transaction.begin</literal>\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.cstore.transaction.commit</literal>\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.cstore.transaction.rollback</literal>\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.pcrud.transaction.begin</literal>\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.pcrud.transaction.commit</literal>\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.pcrud.transaction.rollback</literal>\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- <simpara>At a more granular level, <literal>open-ils.cstore</literal> and <literal>open-ils.pcrud</literal> enable you to set database\r
- savepoints to ensure that a set of operations either all succeed, or all\r
- fail, atomically, within a given transaction:</simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.cstore.savepoint.begin</literal>\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.cstore.savepoint.commit</literal>\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.cstore.savepoint.rollback</literal>\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.pcrud.savepoint.begin</literal>\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.pcrud.savepoint.commit</literal>\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>open-ils.pcrud.savepoint.rollback</literal>\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- <simpara>Transactions and savepoints must be performed within a stateful\r
- connection to the <literal>open-ils.cstore</literal> and <literal>open-ils.pcrud</literal> services.\r
- In <literal>srfsh</literal>, you can open a stateful connection using the <literal>open</literal>\r
- command, and then close the stateful connection using the <literal>close</literal>\r
- command - for example:</simpara>\r
- <screen>srfsh# open open-ils.cstore\r
- ... perform various transaction-related work\r
- srfsh# close open-ils.cstore</screen>\r
- <simplesect id="_json_queries">\r
- <title>JSON Queries</title>\r
- <indexterm><primary>JSON</primary></indexterm>\r
- <simpara>Beyond simply retrieving objects by their ID using the <literal>\*.retrieve</literal>\r
- methods, you can issue queries against the <literal>\*.delete</literal> and <literal>\*.search</literal>\r
- methods using JSON to filter results with simple or complex search\r
- conditions.</simpara>\r
- <simpara>For example, to generate a list of barcodes that are held in a\r
- copy location that allows holds and is visible in the OPAC:</simpara>\r
-<programlisting language="sh" linenumbering="unnumbered">\r
-srfsh# request open-ils.cstore open-ils.cstore.json_query <co id="dmCO7-1"/>\r
- {"select": {"acp":["barcode"], "acpl":["name"]}, <co id="dmCO7-2"/>\r
- "from": {"acp":"acpl"}, <co id="dmCO7-3"/>\r
- "where": [ <co id="dmCO7-4"/>\r
- {"+acpl": "holdable"}, <co id="dmCO7-5"/>\r
- {"+acpl": "opac_visible"} <co id="dmCO7-6"/>\r
- ]}\r
-\r
-Received Data: {\r
- "barcode":"BARCODE1",\r
- "name":"Stacks"\r
-}\r
-\r
-Received Data: {\r
- "barcode":"BARCODE2",\r
- "name":"Stacks"\r
-}\r
-</programlisting>\r
- <calloutlist>\r
- <callout arearefs="dmCO7-1">\r
- <simpara>\r
- Invoke the <literal>json_query</literal> service.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="dmCO7-2">\r
- <simpara>\r
- Select the <literal>barcode</literal> field from the <literal>acp</literal> class and the <literal>name</literal>\r
- field from the <literal>acpl</literal> class.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="dmCO7-3">\r
- <simpara>\r
- Join the <literal>acp</literal> class to the <literal>acpl</literal> class based on the linked field\r
- defined in the IDL.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="dmCO7-4">\r
- <simpara>\r
- Add a <literal>where</literal> clause to filter the results. We have more than one\r
- condition beginning with the same key, so we wrap the conditions inside\r
- an array.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="dmCO7-5">\r
- <simpara>\r
- The first condition tests whether the boolean value of the <literal>holdable</literal>\r
- field on the <literal>acpl</literal> class is true.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="dmCO7-6">\r
- <simpara>\r
- The second condition tests whether the boolean value of the\r
- <literal>opac_visible</literal> field on the <literal>acpl</literal> class is true.\r
- </simpara>\r
- </callout>\r
- </calloutlist>\r
- <simpara>For thorough coverage of the breadth of support offered by JSON\r
- query syntax, see <ulink url="http://open-ils.org/dokuwiki/doku.php?id=documentation:technical:jsontutorial">JSON Queries: A Tutorial</ulink>.</simpara>\r
- </simplesect>\r
- <simplesect id="_fleshing_linked_objects">\r
- <title>Fleshing linked objects</title>\r
- <simpara>A simplistic approach to retrieving a set of objects that are linked to\r
- an object that you are retrieving - for example, a set of call numbers\r
- linked to the barcodes that a given user has borrowed - would be to:\r
- 1. Retrieve the list of circulation objects (<literal>circ</literal> class)\r
- for a given user (<literal>usr</literal> class).\r
- 2. For each circulation object, look up the target copy (<literal>target_copy</literal>\r
- field, linked to the <literal>acp</literal> class).\r
- 3. For each copy, look up the call number for that copy (<literal>call_number</literal>\r
- field, linked to the <literal>acn</literal> class).</simpara>\r
- <simpara>However, this would result in potentially hundreds of round-trip\r
- queries from the client to the server. Even with low-latency connections,\r
- the network overhead would be considerable. So, built into the <literal>open-ils.cstore</literal> and\r
- <literal>open-ils.pcrud</literal> access methods is the ability to <emphasis>flesh</emphasis> linked fields -\r
- that is, rather than return an identifier to a given linked field,\r
- the method can return the entire object as part of the initial response.</simpara>\r
- <simpara>Most of the interfaces that return class instances from the IDL offer the\r
- ability to flesh returned fields. For example, the\r
- <literal>open-ils.cstore.direct.\*.retrieve</literal> methods allow you to specify a\r
- JSON structure defining the fields you wish to flesh in the returned object.</simpara>\r
- <formalpara><title>Fleshing fields in objects returned by <literal>open-ils.cstore</literal></title><para>\r
-<programlisting language="sh" linenumbering="unnumbered">\r
-srfsh# request open-ils.cstore open-ils.cstore.direct.asset.copy.retrieve 1, \\r
- {\r
- "flesh": 1, <co id="dmCO8-1"/>\r
- "flesh_fields": { <co id="dmCO8-2"/>\r
- "acp": ["location"]\r
- }\r
- }\r
-</programlisting>\r
- </para></formalpara>\r
- <calloutlist>\r
- <callout arearefs="dmCO8-1">\r
- <simpara>\r
- The <literal>flesh</literal> argument is the depth at which objects should be fleshed.\r
- For example, to flesh out a field that links to another object that includes\r
- a field that links to another object, you would specify a depth of 2.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="dmCO8-2">\r
- <simpara>\r
- The <literal>flesh_fields</literal> argument contains a list of objects with the fields\r
- to flesh for each object.\r
- </simpara>\r
- </callout>\r
- </calloutlist>\r
- <simpara>Let’s flesh things a little deeper. In addition to the copy location,\r
- let’s also flesh the call number attached to the copy, and then flesh\r
- the bibliographic record attached to the call number.</simpara>\r
- <formalpara><title>Fleshing fields in fields of objects returned by <literal>open-ils.cstore</literal></title><para>\r
-<programlisting language="java" linenumbering="unnumbered">\r
-request open-ils.cstore open-ils.cstore.direct.asset.copy.retrieve 1, \\r
- {\r
- "flesh": 2,\r
- "flesh_fields": {\r
- "acp": ["location", "call_number"],\r
- "acn": ["record"]\r
- }\r
- }\r
-</programlisting>\r
- </para></formalpara>\r
- </simplesect>\r
- </section>\r
- <section id="_adding_an_idl_entry_for_resolverresolver">\r
- <title>Adding an IDL entry for ResolverResolver</title>\r
- <simpara>Most OpenSRF methods in Evergreen define their object interface in the\r
- IDL. Without an entry in the IDL, the prospective caller of a given\r
- method is forced to either call the method and inspect the returned\r
- contents, or read the source to work out the structure of the JSON\r
- payload. At this stage of the tutorial, we have not defined an entry\r
- in the IDL to represent the object returned by the\r
- <literal>open-ils.resolver.resolve_holdings</literal> method. It is time to complete\r
- that task.</simpara>\r
- <simpara>The <literal>open-ils.resolver</literal> service is unlike many of the other classes\r
- defined in the IDL because its data is not stored in the Evergreen\r
- database. Instead, the data is requested from an external Web service\r
- and only temporarily cached in <literal>memcached</literal>. Fortunately, the IDL\r
- enables us to represent this kind of class by setting the\r
- <literal>oils_persist:virtual</literal> class attribute to <literal>true</literal>.</simpara>\r
- <simpara>So, let’s add an entry to the IDL for the <literal>open-ils.resolver.resolve_holdings</literal>\r
- service:</simpara>\r
- <programlisting language="xml" linenumbering="unnumbered"></programlisting>\r
- <simpara>And let’s make <literal>ResolverResolver.pm</literal> return an array composed of our new\r
- <literal>rhr</literal> classes rather than raw JSON objects:</simpara>\r
- <programlisting language="perl" linenumbering="unnumbered"></programlisting>\r
- <simpara>Once we add the new entry to the IDL and copy the revised <literal>ResolverResolver.pm</literal>\r
- Perl module to <literal>/openils/lib/perl5/OpenILS/Application/</literal>, we need to:</simpara>\r
- <orderedlist numeration="arabic">\r
- <listitem>\r
- <simpara>\r
- Copy the updated IDL to both the <literal>/openils/conf/</literal> and\r
- <literal>/openils/var/web/reports/</literal> directories. The Dojo approach to\r
- parsing the IDL uses the IDL stored in the reports directory.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- Restart the Perl services to make the new IDL visible to the services\r
- and refresh the <literal>open-ils.resolver</literal> implementation\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- Rerun <filename>/openils/bin/autogen.sh</filename> to regenerate the JavaScript versions<indexterm><primary>autogen</primary></indexterm>\r
- of the IDL required by the HTTP translator and gateway.\r
- </simpara>\r
- </listitem>\r
- </orderedlist>\r
- <simpara>We also need to adjust our JavaScript client to use the nifty new<indexterm><primary>JavaScript</primary></indexterm>\r
- objects that <literal>open-ils.resolver.resolve_holdings</literal> now returns.\r
- The best approach is to use the support in Evergreen’s Dojo extensions<indexterm><primary>Dojo toolkit</primary></indexterm>\r
- to generate the JavaScript classes directly from the IDL XML file.</simpara>\r
- <formalpara><title>Accessing classes defined in the IDL via Fieldmapper</title><para>\r
- <programlisting language="html" linenumbering="unnumbered"></programlisting>\r
- </para></formalpara>\r
- <calloutlist>\r
- <callout arearefs="">\r
- <simpara>\r
- Load the Dojo core.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="">\r
- <simpara>\r
- <literal>fieldmapper.AutoIDL</literal> reads <filename>/openils/var/reports/fm_IDL.xml</filename> to\r
- generate a list of class properties.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="">\r
- <simpara>\r
- <literal>fieldmapper.dojoData</literal> seems to provide a store for Evergreen data\r
- accessed via Dojo.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="">\r
- <simpara>\r
- <literal>fieldmapper.Fieldmapper</literal> converts the list of class properties into\r
- actual classes.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="">\r
- <simpara>\r
- <literal>fieldmapper.standardRequest</literal> invokes an OpenSRF method and returns\r
- an array of objects.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="">\r
- <simpara>\r
- The first argument to <literal>fieldmapper.standardRequest</literal> is an array\r
- containing the OpenSRF service name and method name.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="">\r
- <simpara>\r
- The second argument to <literal>fieldmapper.standardRequest</literal> is an array\r
- containing the arguments to pass to the OpenSRF method.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="">\r
- <simpara>\r
- As Fieldmapper has instantiated the returned objects based on their\r
- class hints, we can invoke getter/setter methods on the objects.\r
- </simpara>\r
- </callout>\r
- </calloutlist>\r
- </section>\r
- \r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<chapter xml:id="filesandvdirectories" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
- <info>\r
- <title>Evergreen File Structure and Configuration Files</title>\r
- <abstract><para>This section will describe the basic file structure and cover key configuration files. Understanding the directory and file structure of Evergreen will allow you \r
- to be able to customize your Evergreen software and take full advantage of many features.</para></abstract>\r
- </info>\r
- \r
- <section xml:id="EvergreenDirectoryStructure"> \r
- <title>Evergreen Directory Structure</title>\r
- <para>This is the top level directory structure of Evergreen located in the default installation directory <filename class="directory">/openils</filename>:</para>\r
- <table>\r
- <title xml:id="EvergreenDirectoryStructureTable">Evergreen Directory Structure</title>\r
- <tgroup align="left" cols="2" colsep="1" rowsep="1">\r
- <colspec colnum="1" colwidth="1.0*"/>\r
- <colspec colnum="2" colwidth="3.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Directory</entry>\r
- <entry>Description</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- <row>\r
- <entry><filename class="directory">bin</filename></entry>\r
- <entry>Contains many critical Perl and shell scripts such as <filename class="directory">autogen.sh</filename> and \r
- <filename class="directory">oils.ctl</filename>. </entry>\r
- </row>\r
- <row>\r
- <entry><filename class="directory">conf</filename></entry>\r
- <entry>Contains the configuration scripts including the two most important base configuration files <filename>opensrf_core.xml</filename> and <filename>opensrf.xml</filename>.</entry>\r
- </row>\r
- <row>\r
- <entry><filename class="directory">include</filename></entry>\r
- <entry>Contains the header files used by the scripts written in C.</entry>\r
- </row>\r
- <row>\r
- <entry><filename class="directory">lib</filename></entry>\r
- <entry>Contains the core code of Evergreen including the C code and perl modules. In particular, the perl modules in the \r
- subdirectory<filename class="directory">perl5/OpenILS</filename> \r
- are of particular interest to developers. </entry>\r
- </row>\r
- <row>\r
- <entry><filename class="directory">var</filename></entry>\r
- <entry>Largest directory and includes the web directories (<filename class="directory">web</filename>), lock pid fies \r
- (<filename class="directory">run</filename>), circ setting files (<filename class="directory">circ</filename>) templates \r
- (<filename class="directory">templates</filename>) and log (<filename class="directory">templates</filename> and \r
- <filename class="directory">data</filename>) files.</entry>\r
- </row>\r
- </tbody>\r
- </tgroup>\r
- </table>\r
- <section xml:id="EvergreenFiles"> \r
- <title>Evergreen Configuration Files</title>\r
- \r
- <table>\r
- <title xml:id="EvergreenConfigurationFilesTable">Key Evergreen Configuration Files</title>\r
- <tgroup align="left" cols="2" colsep="1" rowsep="1">\r
- <colspec colnum="1" colwidth="1.0*"/>\r
- <colspec colnum="2" colwidth="3.0*"/>\r
- <thead>\r
- <row>\r
- <entry>File</entry>\r
- <entry>Description</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- <row>\r
- <entry><filename>/openils/conf/opensrf_core.xml</filename><indexterm><primary>configuration files</primary>\r
- <secondary>opensrf_core.xml</secondary></indexterm></entry>\r
- \r
- <entry>Files which controls which Evergreen services are run on the public and private routers. For a service to run, it must be registered in this file. This file also controls the loglevel and points to the log file for the services. An Evergreen restart is required for changes to take effect.</entry>\r
- </row>\r
- <row>\r
- <entry><filename>/openils/conf/opensrf.xml</filename><indexterm><primary>configuration files</primary><secondary>opensrf.xml</secondary></indexterm></entry>\r
- <entry>Use this file to set directory locations, the default locale, default notice settings and settings for all Evergreen services. \r
- It is critical for any administrator to understand the settings in this file. An Evergreen restart is required for changes to take effect.</entry>\r
- </row>\r
- <row>\r
- <entry><filename>/openils/conf/fm_IDL.xml</filename> <indexterm><primary>configuration files</primary><secondary>fm_IDL.xml</secondary></indexterm></entry>\r
- \r
- <entry>Used for linking the OpenSRF/Evergreen services to the Evergreen database tables. An Evergreen restart is required for changes to take \r
- effect. Running autogen.sh is also required.</entry>\r
- </row>\r
- <row>\r
- <entry><filename>/etc/apache2/eg_vhost.conf</filename><indexterm><primary>configuration files</primary><secondary>Apache</secondary></indexterm></entry>\r
- <entry>Controls the Evergreen virtual site. Allows to configure the skin for the OPAC or configure various directories within the Apache web server. \r
- An Apache restart is required for changes to this file to take effect.</entry>\r
- </row>\r
- </tbody>\r
- </tgroup>\r
- </table>\r
- <table>\r
- <title xml:id="EvergreenScriptsTable">Useful Evergreen Scripts</title>\r
- <tgroup align="left" cols="2" colsep="1" rowsep="1">\r
- <colspec colnum="1" colwidth="1.0*"/>\r
- <colspec colnum="2" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>File</entry>\r
- <entry>Description</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- <row>\r
- <entry><filename>/openils/bin/autogen.sh</filename><indexterm><primary>autogen</primary></indexterm></entry>\r
- <entry>Used to update changes to org units and the fm_IDL.xml file. Will generate web and staff client pages based on contents of files and \r
- Evergreen database entries.</entry>\r
- </row>\r
- <row>\r
- <entry><filename>/openils/bin/clark-kent.pl</filename><indexterm><primary>reports</primary><secondary>starting</secondary></indexterm></entry>\r
- \r
- <entry>Perl script for starting the reporter.</entry>\r
- </row>\r
- <row>\r
- <entry><filename>/openils/bin/action_trigger_runner.pl</filename><indexterm><primary>action triggers</primary>\r
- <secondary>runner</secondary></indexterm></entry>\r
- <entry>Perl script used to trigger the actions set up in the action trigger tool in the staff client.</entry>\r
- </row>\r
- <row>\r
- <entry><filename>/openils/bin/osrf_ctl.sh</filename></entry>\r
- <entry>The start up script for OpenSRF and Evergreen. </entry>\r
- </row>\r
- <row>\r
- <entry><filename>/openils/bin/reshelving_ complete.srfsh</filename></entry>\r
- <entry>Change status from <quote>reshelving</quote> to <quote>available</quote> for items which have been in reshelving for a certain amount of time.</entry>\r
- </row>\r
- <row>\r
- <entry><filename>/openils/bin/srfsh</filename><indexterm><primary>srfsh</primary></indexterm></entry>\r
- \r
- <entry>Used to start the OpenSRF shell.</entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </table>\r
- </section>\r
- </section>\r
-</chapter>\r
+++ /dev/null
-<?xml version='1.0' encoding='UTF-8'?>\r
-<appendix xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"\r
-xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:id="install_checklist">\r
- <info>\r
- <title>Evergreen Installation Checklist</title>\r
- <abstract>\r
- <para>This appendix is a checklist of things to do to istall and configure Evergreen. It will refer to the necessary chapter with the specific instructions for each item.</para>\r
- </abstract>\r
- </info>\r
- <orderedlist>\r
- <listitem>\r
- <para><link linkend="serversideinstallation-opensrf">Install OpenSRF</link></para><indexterm><primary>OpenSRF</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="serversideinstallation-ubuntudebian">Install Evergreen server software</link></para>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="staffclientinstallation">Install Evergreen staff client</link></para><indexterm><primary>staff client</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="backingup">Establish a back up strategy for Evergreen data and files</link></para>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="configuringPostgreSQL">Configure PostgreSQL for better performance</link></para><indexterm><primary>PostgreSQL</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="logfiles">Configure Evergreen error logging</link></para><indexterm><primary>logs</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="orgtypes">Set up organizational unit types</link></para><indexterm><primary>organizational unit types</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="orgunits">Set up organizational units</link></para><indexterm><primary>organizational units</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="languagesandlocalization">Customize localization and languages</link> (optional)</para><indexterm><primary>localization and languages</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="circmodifiers">Add circ modifiers</link></para><indexterm><primary>circulation modifiers</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="copystatus">Configure copy statuses</link></para><indexterm><primary>copy status</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="catalogingtemplates">Add cataloguing templates</link></para><indexterm><primary>cataloguing </primary><secondary>templates</secondary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="permissions">Add user groups and assign permissions</link></para><indexterm><primary>permissions</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="lsa">Adjust various Local Administration Settings</link></para>\r
- </listitem>\r
- <listitem>\r
- <para>Adjust circulation policies and <link linkend="lsa-group-penalty">penalty threshholds</link> for groups</para><indexterm><primary>penalty threshholds</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="admin-staff_accounts">Add staff users</link></para>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="Customizing_OPAC">Customize OPAC</link> as needed</para><indexterm><primary>OPAC</primary><secondary>customizing</secondary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="migratingdata">Import data</link></para><indexterm><primary>migrating</primary><secondary>importing data</secondary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="report-introduction">Start the reporter service and set up reports</link></para><indexterm><primary>reports</primary><secondary>starting</secondary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="notifications">Set up email notifications for holds and overdue items</link></para><indexterm><primary>notifications</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="actiontriggers">Set up action triggers</link></para><indexterm><primary>action triggers</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="z3950">Set up Z39.50 server</link> (optional)</para><indexterm><primary>Z39.50</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="relevancyrankings">Adjust search relevancy settings</link> if required (optional)</para><indexterm><primary>search relevancy</primary></indexterm>\r
- </listitem>\r
- <listitem>\r
- <para><link linkend="sipserver">Install SIP server</link> (optional) - for communications with automated devices such as self check stations, autmated sorters and other devices using SIP</para><indexterm><primary>SIP</primary></indexterm>\r
- </listitem>\r
- </orderedlist>\r
-</appendix>\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<chapter xml:id="intro_to_sql" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
- <chapterinfo>\r
- <title>Introduction to SQL for Evergreen Administrators</title>\r
- </chapterinfo>\r
- <abstract id="itnroSQL_abstract">\r
- <simpara>This chapter was taken from Dan Scott's <emphasis>Introduction to SQL for Evergreen Administrators</emphasis>, February 2010.</simpara>\r
- </abstract> \r
- <section id="intro_to_databases">\r
- <title>Introduction to SQL Databases</title>\r
- <indexterm><primary>sql</primary></indexterm>\r
- <simplesect>\r
- <title>Introduction</title>\r
- <simpara>Over time, the SQL database has become the standard method of storing,\r
- retrieving, and processing raw data for applications. Ranging from embedded\r
- databases such as SQLite and Apache Derby, to enterprise databases such as\r
- Oracle and IBM DB2, any SQL database offers basic advantages to application\r
- developers such as standard interfaces (Structured Query Language (SQL), Java\r
- Database Connectivity (JDBC), Open Database Connectivity (ODBC), Perl Database\r
- Independent Interface (DBI)), a standard conceptual model of data (tables,\r
- fields, relationships, constraints, etc), performance in storing and retrieving\r
- data, concurrent access, etc.</simpara>\r
- <simpara>Evergreen is built on PostgreSQL, an open source SQL database that began as\r
- <literal>POSTGRES</literal> at the University of California at Berkeley in 1986 as a research\r
- project led by Professor Michael Stonebraker. A SQL interface was added to a\r
- fork of the original POSTGRES Berkelely code in 1994, and in 1996 the project\r
- was renamed PostgreSQL.</simpara>\r
- </simplesect>\r
- <simplesect id="_tables">\r
- <title>Tables</title>\r
- <indexterm><primary>sql</primary><secondary>tables</secondary></indexterm>\r
- <simpara>The table is the cornerstone of a SQL database. Conceptually, a database table\r
- is similar to a single sheet in a spreadsheet: every table has one or more\r
- columns, with each row in the table containing values for each column. Each\r
- column in a table defines an attribute corresponding to a particular data type.</simpara>\r
- <simpara>We’ll insert a row into a table, then display the resulting contents. Don’t\r
- worry if the INSERT statement is completely unfamiliar, we’ll talk more about\r
- the syntax of the insert statement later.</simpara>\r
- <formalpara><title><literal>actor.usr_note</literal> database table</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-evergreen=# INSERT INTO actor.usr_note (usr, creator, pub, title, value)\r
- VALUES (1, 1, TRUE, 'Who is this guy?', 'He''s the administrator!');\r
-\r
-evergreen=# select id, usr, creator, pub, title, value from actor.usr_note;\r
- id | usr | creator | pub | title | value\r
-----+-----+---------+-----+------------------+-------------------------\r
- 1 | 1 | 1 | t | Who is this guy? | He's the administrator!\r
-(1 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- <simpara>PostgreSQL supports table inheritance, which lets you define tables that\r
- inherit the column definitions of a given parent table. A search of the data in\r
- the parent table includes the data in the child tables. Evergreen uses table\r
- inheritance: for example, the <literal>action.circulation</literal> table is a child of the\r
- <literal>money.billable_xact</literal> table, and the <literal>money.*_payment</literal> tables all inherit from\r
- the <literal>money.payment</literal> parent table.</simpara>\r
- </simplesect>\r
- <simplesect id="_schemas">\r
- <title>Schemas</title>\r
- <simpara>PostgreSQL, like most SQL databases, supports the use of schema names to group\r
- collections of tables and other database objects together. You might think of\r
- schemas as namespaces if you’re a programmer; or you might think of the schema\r
- / table / column relationship like the area code / exchange / local number\r
- structure of a telephone number.</simpara>\r
- <table\r
- frame="all"\r
- rowsep="1" colsep="1"\r
- >\r
- <title>Examples: database object names</title>\r
- <?dbhtml table-width="100%"?>\r
- <?dbfo table-width="100%"?>\r
- <tgroup cols="4">\r
- <colspec colname="col_1" colwidth="2.0*"/>\r
- <colspec colname="col_2" colwidth="1.0*"/>\r
- <colspec colname="col_3" colwidth="1.0*"/>\r
- <colspec colname="col_4" colwidth="1.0*"/>\r
- <thead>\r
- <row>\r
- <entry align="left" valign="top">Full name </entry>\r
- <entry align="left" valign="top">Schema name </entry>\r
- <entry align="left" valign="top">Table name </entry>\r
- <entry align="left" valign="top">Field name</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- <row>\r
- <entry align="left" valign="top"><simpara>actor.usr_note.title</simpara></entry>\r
- <entry align="left" valign="top"><simpara>actor</simpara></entry>\r
- <entry align="left" valign="top"><simpara>usr_note</simpara></entry>\r
- <entry align="left" valign="top"><simpara>title</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara>biblio.record_entry.marc</simpara></entry>\r
- <entry align="left" valign="top"><simpara>biblio</simpara></entry>\r
- <entry align="left" valign="top"><simpara>record_entry</simpara></entry>\r
- <entry align="left" valign="top"><simpara>marc</simpara></entry>\r
- </row>\r
- </tbody>\r
- </tgroup>\r
- </table>\r
- <simpara>The default schema name in PostgreSQL is <literal>public</literal>, so if you do not specify a\r
- schema name when creating or accessing a database object, PostgreSQL will use\r
- the <literal>public</literal> schema. As a result, you might not find the object that you’re\r
- looking for if you don’t use the appropriate schema.</simpara>\r
- <formalpara><title>Example: Creating a table without a specific schema</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-evergreen=# CREATE TABLE foobar (foo TEXT, bar TEXT);\r
-CREATE TABLE\r
-evergreen=# \d foobar\r
- Table "public.foobar"\r
- Column | Type | Modifiers\r
---------+------+-----------\r
- foo | text |\r
- bar | text |\r
-</programlisting>\r
- </para></formalpara>\r
- <formalpara><title>Example: Trying to access a unqualified table outside of the public schema</title><para>\r
- <programlisting language="sql" linenumbering="unnumbered">evergreen=# SELECT * FROM usr_note;\r
- ERROR: relation "usr_note" does not exist\r
- LINE 1: SELECT * FROM usr_note;\r
- ^</programlisting>\r
- </para></formalpara>\r
- <simpara>Evergreen uses schemas to organize all of its tables with mostly intuitive,\r
- if short, schema names. Here’s the current (as of 2010-01-03) list of schemas\r
- used by Evergreen:</simpara>\r
- <table\r
- frame="all"\r
- rowsep="1" colsep="1"\r
- >\r
- <title>Evergreen schema names</title>\r
- <?dbhtml table-width="80%"?>\r
- <?dbfo table-width="80%"?>\r
- <tgroup cols="2">\r
- <colspec colname="col_1" colwidth="1.0*"/>\r
- <colspec colname="col_2" colwidth="1.0*"/>\r
- <thead>\r
- <row>\r
- <entry align="left" valign="top">Schema name </entry>\r
- <entry align="left" valign="top">Description</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>acq</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Acquisitions</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>action</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Circulation actions</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>action_trigger</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Event mechanisms</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>actor</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Evergreen users and organization units</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>asset</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Call numbers and copies</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>auditor</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Track history of changes to selected tables</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>authority</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Authority records</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>biblio</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Bibliographic records</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>booking</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Resource bookings</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>config</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Evergreen configurable options</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>container</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Buckets for records, call numbers, copies, and users</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>extend_reporter</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Extra views for report definitions</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>metabib</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Metadata about bibliographic records</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>money</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Fines and bills</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>offline</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Offline transactions</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>permission</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>User permissions</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>query</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Stored SQL statements</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>reporter</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Report definitions</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>search</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Search functions</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>serial</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Serial MFHD records</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>stats</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Convenient views of circulation and asset statistics</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>vandelay</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>MARC batch importer and exporter</simpara></entry>\r
- </row>\r
- </tbody>\r
- </tgroup>\r
- </table>\r
- <note><simpara>The term <emphasis>schema</emphasis> has two meanings in the world of SQL databases. We have\r
- discussed the schema as a conceptual grouping of tables and other database\r
- objects within a given namespace; for example, "the <emphasis role="strong">actor</emphasis> schema contains the\r
- tables and functions related to users and organizational units". Another common\r
- usage of <emphasis>schema</emphasis> is to refer to the entire data model for a given database;\r
- for example, "the Evergreen database schema".</simpara></note>\r
- </simplesect>\r
- <simplesect id="_columns">\r
- <title>Columns</title>\r
- <simpara>Each column definition consists of:</simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- a data type\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- (optionally) a default value to be used whenever a row is inserted that\r
- does not contain a specific value\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- (optionally) one or more constraints on the values beyond data type\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- <simpara>Although PostgreSQL supports dozens of data types, Evergreen makes our life\r
- easier by only using a handful.</simpara>\r
- <table\r
- frame="all"\r
- rowsep="1" colsep="1"\r
- >\r
- <title>PostgreSQL data types used by Evergreen</title>\r
- <?dbhtml table-width="90%"?>\r
- <?dbfo table-width="90%"?>\r
- <tgroup cols="3">\r
- <colspec colname="col_1" colwidth="1.0*"/>\r
- <colspec colname="col_2" colwidth="1.0*"/>\r
- <colspec colname="col_3" colwidth="2.5*"/>\r
- <thead>\r
- <row>\r
- <entry align="left" valign="top">Type name </entry>\r
- <entry align="left" valign="top">Description </entry>\r
- <entry align="left" valign="top">Limits</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>INTEGER</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Medium integer</simpara></entry>\r
- <entry align="left" valign="top"><simpara>-2147483648 to +2147483647</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>BIGINT</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Large integer</simpara></entry>\r
- <entry align="left" valign="top"><simpara>-9223372036854775808 to 9223372036854775807</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>SERIAL</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Sequential integer</simpara></entry>\r
- <entry align="left" valign="top"><simpara>1 to 2147483647</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>BIGSERIAL</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Large sequential integer</simpara></entry>\r
- <entry align="left" valign="top"><simpara>1 to 9223372036854775807</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>TEXT</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Variable length character data</simpara></entry>\r
- <entry align="left" valign="top"><simpara>Unlimited length</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>BOOL</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Boolean</simpara></entry>\r
- <entry align="left" valign="top"><simpara>TRUE or FALSE</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>TIMESTAMP WITH TIME ZONE</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Timestamp</simpara></entry>\r
- <entry align="left" valign="top"><simpara>4713 BC to 294276 AD</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>TIME</literal></simpara></entry>\r
- <entry align="left" valign="top"><simpara>Time</simpara></entry>\r
- <entry align="left" valign="top"><simpara>Expressed in HH:MM:SS</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara><literal>NUMERIC</literal>(precision, scale)</simpara></entry>\r
- <entry align="left" valign="top"><simpara>Decimal</simpara></entry>\r
- <entry align="left" valign="top"><simpara>Up to 1000 digits of precision. In Evergreen mostly used for money\r
- values, with a precision of 6 and a scale of 2 (<literal>####.##</literal>).</simpara></entry>\r
- </row>\r
- </tbody>\r
- </tgroup>\r
- </table>\r
- <simpara>Full details about these data types are available from the\r
- <ulink url="http://www.postgresql.org/docs/8.4/static/datatype.html">data types section of\r
- the PostgreSQL manual</ulink>.</simpara>\r
- </simplesect>\r
- <simplesect id="_constraints">\r
- <title>Constraints</title>\r
- <simplesect id="_prevent_null_values">\r
- <title>Prevent NULL values</title>\r
- <simpara>A column definition may include the constraint <literal>NOT NULL</literal> to prevent NULL\r
- values. In PostgreSQL, a NULL value is not the equivalent of zero or false or\r
- an empty string; it is an explicit non-value with special properties. We’ll\r
- talk more about how to work with NULL values when we get to queries.</simpara>\r
- </simplesect>\r
- <simplesect id="_primary_key">\r
- <title>Primary key</title>\r
- <simpara>Every table can have at most one primary key. A primary key consists of one or\r
- more columns which together uniquely identify each row in a table. If you\r
- attempt to insert a row into a table that would create a duplicate or NULL\r
- primary key entry, the database rejects the row and returns an error.</simpara>\r
- <simpara>Natural primary keys are drawn from the intrinsic properties of the data being\r
- modelled. For example, some potential natural primary keys for a table that\r
- contains people would be:</simpara>\r
- <table\r
- frame="all"\r
- rowsep="1" colsep="1"\r
- >\r
- <title>Example: Some potential natural primary keys for a table of people</title>\r
- <?dbhtml table-width="90%"?>\r
- <?dbfo table-width="90%"?>\r
- <tgroup cols="3">\r
- <colspec colname="col_1" colwidth="1.0*"/>\r
- <colspec colname="col_2" colwidth="2.0*"/>\r
- <colspec colname="col_3" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry align="left" valign="top">Natural key </entry>\r
- <entry align="left" valign="top">Pros </entry>\r
- <entry align="left" valign="top">Cons</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- <row>\r
- <entry align="left" valign="top"><simpara>First name, last name, address</simpara></entry>\r
- <entry align="left" valign="top"><simpara>No two people with the same name would ever live at the same address, right?</simpara></entry>\r
- <entry align="left" valign="top"><simpara>Lots of columns force data duplication in referencing tables</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara>SSN or driver’s license</simpara></entry>\r
- <entry align="left" valign="top"><simpara>These are guaranteed to be unique</simpara></entry>\r
- <entry align="left" valign="top"><simpara>Lots of people don’t have an SSN or a driver’s license</simpara></entry>\r
- </row>\r
- </tbody>\r
- </tgroup>\r
- </table>\r
- <simpara>To avoid problems with natural keys, many applications instead define surrogate\r
- primary keys. A surrogate primary keys is a column with an autoincrementing\r
- integer value added to a table definition that ensures uniqueness.</simpara>\r
- <simpara>Evergreen uses surrogate keys (a column named <literal>id</literal> with a <literal>SERIAL</literal> data type)\r
- for most of its tables.</simpara>\r
- </simplesect>\r
- <simplesect id="_foreign_keys">\r
- <title>Foreign keys</title>\r
- <simpara>Every table can contain zero or more foreign keys: one or more columns that\r
- refer to the primary key of another table.</simpara>\r
- <simpara>For example, let’s consider Evergreen’s modelling of the basic relationship\r
- between copies, call numbers, and bibliographic records. Bibliographic records\r
- contained in the <literal>biblio.record_entry</literal> table can have call numbers attached to\r
- them. Call numbers are contained in the <literal>asset.call_number</literal> table, and they can\r
- have copies attached to them. Copies are contained in the <literal>asset.copy</literal> table.</simpara>\r
- <table\r
- frame="all"\r
- rowsep="1" colsep="1"\r
- >\r
- <title>Example: Evergreen’s copy / call number / bibliographic record relationships</title>\r
- <?dbhtml table-width="100%"?>\r
- <?dbfo table-width="100%"?>\r
- <tgroup cols="4">\r
- <colspec colname="col_1" colwidth="1.0*"/>\r
- <colspec colname="col_2" colwidth="1.0*"/>\r
- <colspec colname="col_3" colwidth="1.0*"/>\r
- <colspec colname="col_4" colwidth="1.0*"/>\r
- <thead>\r
- <row>\r
- <entry align="left" valign="top">Table </entry>\r
- <entry align="left" valign="top">Primary key </entry>\r
- <entry align="left" valign="top">Column with a foreign key </entry>\r
- <entry align="left" valign="top">Points to</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- <row>\r
- <entry align="left" valign="top"><simpara>asset.copy</simpara></entry>\r
- <entry align="left" valign="top"><simpara>asset.copy.id</simpara></entry>\r
- <entry align="left" valign="top"><simpara>asset.copy.call_number</simpara></entry>\r
- <entry align="left" valign="top"><simpara>asset.call_number.id</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara>asset.call_number</simpara></entry>\r
- <entry align="left" valign="top"><simpara>asset.call_number.id</simpara></entry>\r
- <entry align="left" valign="top"><simpara>asset.call_number.record</simpara></entry>\r
- <entry align="left" valign="top"><simpara>biblio.record_entry.id</simpara></entry>\r
- </row>\r
- <row>\r
- <entry align="left" valign="top"><simpara>biblio.record_entry</simpara></entry>\r
- <entry align="left" valign="top"><simpara>biblio.record_entry.id</simpara></entry>\r
- <entry align="left" valign="top"><simpara></simpara></entry>\r
- <entry align="left" valign="top"><simpara></simpara></entry>\r
- </row>\r
- </tbody>\r
- </tgroup>\r
- </table>\r
- </simplesect>\r
- <simplesect id="_check_constraints">\r
- <title>Check constraints</title>\r
- <simpara>PostgreSQL enables you to define rules to ensure that the value to be inserted\r
- or updated meets certain conditions. For example, you can ensure that an\r
- incoming integer value is within a specific range, or that a ZIP code matches a\r
- particular pattern.</simpara>\r
- </simplesect>\r
- </simplesect>\r
- <simplesect id="_deconstructing_a_table_definition_statement">\r
- <title>Deconstructing a table definition statement</title>\r
- <simpara>The <literal>actor.org_address</literal> table is a simple table in the Evergreen schema that\r
- we can use as a concrete example of many of the properties of databases that\r
- we have discussed so far.</simpara>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-CREATE TABLE actor.org_address (\r
- id SERIAL PRIMARY KEY, <co id="sqlCO1-1"/>\r
- valid BOOL NOT NULL DEFAULT TRUE, <co id="sqlCO1-2"/>\r
- address_type TEXT NOT NULL DEFAULT 'MAILING', <co id="sqlCO1-3"/>\r
- org_unit INT NOT NULL REFERENCES actor.org_unit (id) <co id="sqlCO1-4"/>\r
- DEFERRABLE INITIALLY DEFERRED,\r
- street1 TEXT NOT NULL,\r
- street2 TEXT, <co id="sqlCO1-5"/>\r
- city TEXT NOT NULL,\r
- county TEXT,\r
- state TEXT NOT NULL,\r
- country TEXT NOT NULL,\r
- post_code TEXT NOT NULL\r
-);\r
-</programlisting>\r
- <calloutlist>\r
- <callout arearefs="sqlCO1-1">\r
- <simpara>\r
- The column named <literal>id</literal> is defined with a special data type of <literal>SERIAL</literal>; if\r
- given no value when a row is inserted into a table, the database automatically\r
- generates the next sequential integer value for the column. <literal>SERIAL</literal> is a\r
- popular data type for a primary key because it is guaranteed to be unique - and\r
- indeed, the constraint for this column identifies it as the <literal>PRIMARY KEY</literal>.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="sqlCO1-2">\r
- <simpara>\r
- The data type <literal>BOOL</literal> defines a boolean value: <literal>TRUE</literal> or <literal>FALSE</literal> are the only\r
- acceptable values for the column. The constraint <literal>NOT NULL</literal> instructs the\r
- database to prevent the column from ever containing a NULL value. The column\r
- property <literal>DEFAULT TRUE</literal> instructs the database to automatically set the value\r
- of the column to <literal>TRUE</literal> if no value is provided.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="sqlCO1-3">\r
- <simpara>\r
- The data type <literal>TEXT</literal> defines a text column of practically unlimited length.\r
- As with the previous column, there is a <literal>NOT NULL</literal> constraint, and a default\r
- value of <literal>'MAILING'</literal> will result if no other value is supplied.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="sqlCO1-4">\r
- <simpara>\r
- The <literal>REFERENCES actor.org_unit (id)</literal> clause indicates that this column has a\r
- foreign key relationship to the <literal>actor.org_unit</literal> table, and that the value of\r
- this column in every row in this table must have a corresponding value in the\r
- <literal>id</literal> column in the referenced table (<literal>actor.org_unit</literal>).\r
- </simpara>\r
- </callout>\r
- <callout arearefs="sqlCO1-5">\r
- <simpara>\r
- The column named <literal>street2</literal> demonstrates that not all columns have constraints\r
- beyond data type. In this case, the column is allowed to be NULL or to contain a\r
- <literal>TEXT</literal> value.\r
- </simpara>\r
- </callout>\r
- </calloutlist>\r
- </simplesect>\r
- <simplesect id="_displaying_a_table_definition_using_literal_psql_literal">\r
- <title>Displaying a table definition using <literal>psql</literal></title>\r
- <simpara>The <literal>psql</literal> command-line interface is the preferred method for accessing\r
- PostgreSQL databases. It offers features like tab-completion, readline support\r
- for recalling previous commands, flexible input and output formats, and\r
- is accessible via a standard SSH session.</simpara>\r
- <simpara>If you press the <literal>Tab</literal> key once after typing one or more characters of the\r
- database object name, <literal>psql</literal> automatically completes the name if there are no\r
- other matches. If there are other matches for your current input, nothing\r
- happens until you press the <literal>Tab</literal> key a second time, at which point <literal>psql</literal>\r
- displays all of the matches for your current input.</simpara>\r
- <simpara>To display the definition of a database object such as a table, issue the\r
- command <literal>\d _object-name_</literal>. For example, to display the definition of the\r
- actor.usr_note table:</simpara>\r
-<programlisting language="sh" linenumbering="unnumbered">\r
-$ psql evergreen <co id="sqlCO2-1"/>\r
-psql (8.4.1)\r
-Type "help" for help.\r
-\r
-evergreen=# \d actor.usr_note <co id="sqlCO2-2"/>\r
- Table "actor.usr_note"\r
- Column | Type | Modifiers\r
--------------+--------------------------+-------------------------------------------------------------\r
- id | bigint | not null default nextval('actor.usr_note_id_seq'::regclass)\r
- usr | bigint | not null\r
- creator | bigint | not null\r
- create_date | timestamp with time zone | default now()\r
- pub | boolean | not null default false\r
- title | text | not null\r
- value | text | not null\r
-Indexes:\r
- "usr_note_pkey" PRIMARY KEY, btree (id)\r
- "actor_usr_note_creator_idx" btree (creator)\r
- "actor_usr_note_usr_idx" btree (usr)\r
-Foreign-key constraints:\r
- "usr_note_creator_fkey" FOREIGN KEY (creator) REFERENCES actor.usr(id) ON ...\r
- "usr_note_usr_fkey" FOREIGN KEY (usr) REFERENCES actor.usr(id) ON DELETE ....\r
-\r
-evergreen=# \q <co id="sqlCO2-3"/>\r
-$\r
-</programlisting>\r
- <calloutlist>\r
- <callout arearefs="sqlCO2-1">\r
- <simpara>\r
- This is the most basic connection to a PostgreSQL database. You can use a\r
- number of other flags to specify user name, hostname, port, and other options.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="sqlCO2-2">\r
- <simpara>\r
- The <literal>\d</literal> command displays the definition of a database object.\r
- </simpara>\r
- </callout>\r
- <callout arearefs="sqlCO2-3">\r
- <simpara>\r
- The <literal>\q</literal> command quits the <literal>psql</literal> session and returns you to the shell prompt.\r
- </simpara>\r
- </callout>\r
- </calloutlist>\r
- </simplesect>\r
- </section>\r
- <section id="basic_sql_queries">\r
- <title>Basic SQL queries</title>\r
- <simplesect id="_the_select_statement">\r
- <title>The SELECT statement</title>\r
- <simpara>The SELECT statement is the basic tool for retrieving information from a\r
- database. The syntax for most SELECT statements is:</simpara>\r
- <blockquote>\r
- <literallayout><literal>SELECT</literal> [<emphasis>columns(s)</emphasis>]\r
- <literal>FROM</literal> [<emphasis>table(s)</emphasis>]\r
- [<literal>WHERE</literal> <emphasis>condition(s)</emphasis>]\r
- [<literal>GROUP BY</literal> <emphasis>columns(s)</emphasis>]\r
- [<literal>HAVING</literal> <emphasis>grouping-condition(s)</emphasis>]\r
- [<literal>ORDER BY</literal> <emphasis>column(s)</emphasis>]\r
- [<literal>LIMIT</literal> <emphasis>maximum-results</emphasis>]\r
- [<literal>OFFSET</literal> <emphasis>start-at-result-#</emphasis>]\r
- ;</literallayout>\r
- </blockquote>\r
- <simpara>For example, to select all of the columns for each row in the\r
- <literal>actor.usr_address</literal> table, issue the following query:</simpara>\r
- <programlisting language="sql" linenumbering="unnumbered">SELECT *\r
- FROM actor.usr_address\r
- ;</programlisting>\r
- </simplesect>\r
- <simplesect id="_selecting_particular_columns_from_a_table">\r
- <title>Selecting particular columns from a table</title>\r
- <simpara><literal>SELECT *</literal> returns all columns from all of the tables included in your query.\r
- However, quite often you will want to return only a subset of the possible\r
- columns. You can retrieve specific columns by listing the names of the columns\r
- you want after the <literal>SELECT</literal> keyword. Separate each column name with a comma.</simpara>\r
- <simpara>For example, to select just the city, county, and state from the\r
- actor.usr_address table, issue the following query:</simpara>\r
- <programlisting language="sql" linenumbering="unnumbered">SELECT city, county, state\r
- FROM actor.usr_address\r
- ;</programlisting>\r
- </simplesect>\r
- <simplesect id="_sorting_results_with_the_order_by_clause">\r
- <title>Sorting results with the ORDER BY clause</title>\r
- <simpara>By default, a SELECT statement returns rows matching your query with no\r
- guarantee of any particular order in which they are returned. To force\r
- the rows to be returned in a particular order, use the ORDER BY clause\r
- to specify one or more columns to determine the sorting priority of the\r
- rows.</simpara>\r
- <simpara>For example, to sort the rows returned from your <literal>actor.usr_address</literal> query by\r
- city, with county and then zip code as the tie breakers, issue the\r
- following query:</simpara>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT city, county, state\r
- FROM actor.usr_address\r
- ORDER BY city, county, post_code\r
-;\r
-</programlisting>\r
- </simplesect>\r
- <simplesect id="_filtering_results_with_the_where_clause">\r
- <title>Filtering results with the WHERE clause</title>\r
- <simpara>Thus far, your results have been returning all of the rows in the table.\r
- Normally, however, you would want to restrict the rows that are returned to the\r
- subset of rows that match one or more conditions of your search. The <literal>WHERE</literal>\r
- clause enables you to specify a set of conditions that filter your query\r
- results. Each condition in the <literal>WHERE</literal> clause is an SQL expression that returns\r
- a boolean (true or false) value.</simpara>\r
- <simpara>For example, to restrict the results returned from your <literal>actor.usr_address</literal>\r
- query to only those rows containing a state value of <emphasis>Connecticut</emphasis>, issue the\r
- following query:</simpara>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT city, county, state\r
- FROM actor.usr_address\r
- WHERE state = 'Connecticut'\r
- ORDER BY city, county, post_code\r
-;\r
-</programlisting>\r
- <simpara>You can include more conditions in the <literal>WHERE</literal> clause with the <literal>OR</literal> and <literal>AND</literal>\r
- operators. For example, to further restrict the results returned from your\r
- <literal>actor.usr_address</literal> query to only those rows where the state column contains a\r
- value of <emphasis>Connecticut</emphasis> and the city column contains a value of <emphasis>Hartford</emphasis>,\r
- issue the following query:</simpara>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT city, county, state\r
- FROM actor.usr_address\r
- WHERE state = 'Connecticut'\r
- AND city = 'Hartford'\r
- ORDER BY city, county, post_code\r
-;\r
-</programlisting>\r
- <note><simpara>To return rows where the state is <emphasis>Connecticut</emphasis> and the city is <emphasis>Hartford</emphasis> or\r
- <emphasis>New Haven</emphasis>, you must use parentheses to explicitly group the city value\r
- conditions together, or else the database will evaluate the <literal>OR city = 'New\r
- Haven'</literal> clause entirely on its own and match all rows where the city column is\r
- <emphasis>New Haven</emphasis>, even though the state might not be <emphasis>Connecticut</emphasis>.</simpara></note>\r
- <formalpara><title>Trouble with OR</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT city, county, state\r
- FROM actor.usr_address\r
- WHERE state = 'Connecticut'\r
- AND city = 'Hartford' OR city = 'New Haven'\r
- ORDER BY city, county, post_code\r
-;\r
-\r
--- Can return unwanted rows because the OR is not grouped!\r
-</programlisting>\r
- </para></formalpara>\r
- <formalpara><title>Grouped OR’ed conditions</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT city, county, state\r
- FROM actor.usr_address\r
- WHERE state = 'Connecticut'\r
- AND (city = 'Hartford' OR city = 'New Haven')\r
- ORDER BY city, county, post_code\r
-;\r
-\r
--- The parentheses ensure that the OR is applied to the cities, and the\r
--- state in either case must be 'Connecticut'\r
-</programlisting>\r
- </para></formalpara>\r
- <simplesect id="_comparison_operators">\r
- <title>Comparison operators</title>\r
- <simpara>Here is a partial list of comparison operators that are commonly used in\r
- <literal>WHERE</literal> clauses:</simpara>\r
- <simplesect id="_comparing_two_scalar_values">\r
- <title>Comparing two scalar values</title>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- <literal>x = y</literal> (equal to)\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>x != y</literal> (not equal to)\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>x < y</literal> (less than)\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>x > y</literal> (greater than)\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>x LIKE y</literal> (TEXT value x matches a subset of TEXT y, where y is a string that\r
- can contain <emphasis>%</emphasis> as a wildcard for 0 or more characters, and <emphasis>_</emphasis> as a wildcard\r
- for a single character. For example, <literal>WHERE 'all you can eat fish and chips\r
- and a big stick' LIKE '%fish%stick'</literal> would return TRUE)\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>x ILIKE y</literal> (like LIKE, but the comparison ignores upper-case / lower-case)\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- <literal>x IN y</literal> (x is in the list of values y, where y can be a list or a SELECT\r
- statement that returns a list)\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- </simplesect>\r
- </simplesect>\r
- </simplesect>\r
- <simplesect id="_null_values">\r
- <title>NULL values</title>\r
- <simpara>SQL databases have a special way of representing the value of a column that has\r
- no value: <literal>NULL</literal>. A <literal>NULL</literal> value is not equal to zero, and is not an empty\r
- string; it is equal to nothing, not even another <literal>NULL</literal>, because it has no value\r
- that can be compared.</simpara>\r
- <simpara>To return rows from a table where a given column is not <literal>NULL</literal>, use the\r
- <literal>IS NOT NULL</literal> comparison operator.</simpara>\r
- <formalpara><title>Retrieving rows where a column is not <literal>NULL</literal></title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT id, first_given_name, family_name\r
- FROM actor.usr\r
- WHERE second_given_name IS NOT NULL\r
-;\r
-</programlisting>\r
- </para></formalpara>\r
- <simpara>Similarly, to return rows from a table where a given column is <literal>NULL</literal>, use\r
- the <literal>IS NULL</literal> comparison operator.</simpara>\r
- <formalpara><title>Retrieving rows where a column is <literal>NULL</literal></title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT id, first_given_name, second_given_name, family_name\r
- FROM actor.usr\r
- WHERE second_given_name IS NULL\r
-;\r
-\r
- id | first_given_name | second_given_name | family_name\r
-----+------------------+-------------------+----------------\r
- 1 | Administrator | | System Account\r
-(1 row)\r
-</programlisting>\r
- </para></formalpara>\r
- <simpara>Notice that the <literal>NULL</literal> value in the output is displayed as empty space,\r
- indistinguishable from an empty string; this is the default display method in\r
- <literal>psql</literal>. You can change the behaviour of <literal>psql</literal> using the <literal>pset</literal> command:</simpara>\r
- <formalpara><title>Changing the way <literal>NULL</literal> values are displayed in <literal>psql</literal></title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-evergreen=# \pset null '(null)'\r
-Null display is '(null)'.\r
-\r
-SELECT id, first_given_name, second_given_name, family_name\r
- FROM actor.usr\r
- WHERE second_given_name IS NULL\r
-;\r
-\r
- id | first_given_name | second_given_name | family_name\r
-----+------------------+-------------------+----------------\r
- 1 | Administrator | (null) | System Account\r
-(1 row)\r
-</programlisting>\r
- </para></formalpara>\r
- <simpara>Database queries within programming languages such as Perl and C have\r
- special methods of checking for <literal>NULL</literal> values in returned results.</simpara>\r
- </simplesect>\r
- <simplesect id="_text_delimiter">\r
- <title>Text delimiter: '</title>\r
- <simpara>You might have noticed that we have been using the <literal>'</literal> character to delimit\r
- TEXT values and values such as dates and times that are TEXT values. Sometimes,\r
- however, your TEXT value itself contains a <literal>'</literal> character, such as the word\r
- <literal>you’re</literal>. To prevent the database from prematurely ending the TEXT value at the\r
- first <literal>'</literal> character and returning a syntax error, use another <literal>'</literal> character to\r
- escape the following <literal>'</literal> character.</simpara>\r
- <simpara>For example, to change the last name of a user in the <literal>actor.usr</literal> table to\r
- <literal>L’estat</literal>, issue the following SQL:</simpara>\r
- <formalpara><title>Escaping <literal>'</literal> in TEXT values</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-UPDATE actor.usr\r
- SET family_name = 'L''estat'\r
- WHERE profile IN (\r
- SELECT id\r
- FROM permission.grp_tree\r
- WHERE name = 'Vampire'\r
- )\r
- ;</programlisting>\r
- </para></formalpara>\r
- <simpara>When you retrieve the row from the database, the value is displayed with just\r
- a single <literal>'</literal> character:</simpara>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT id, family_name\r
- FROM actor.usr\r
- WHERE family_name = 'L''estat'\r
-;\r
-\r
- id | family_name\r
-----+-------------\r
- 1 | L'estat\r
-(1 row)\r
-</programlisting>\r
- </simplesect>\r
- <simplesect id="_grouping_and_eliminating_results_with_the_group_by_and_having_clauses">\r
- <title>Grouping and eliminating results with the GROUP BY and HAVING clauses</title>\r
- <simpara>The GROUP BY clause returns a unique set of results for the desired columns.\r
- This is most often used in conjunction with an aggregate function to present\r
- results for a range of values in a single query, rather than requiring you to\r
- issue one query per target value.</simpara>\r
- <formalpara><title>Returning unique results of a single column with <literal>GROUP BY</literal></title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT grp\r
- FROM permission.grp_perm_map\r
- GROUP BY grp\r
- ORDER BY grp;\r
-\r
- grp\r
------+\r
- 1\r
- 2\r
- 3\r
- 4\r
- 5\r
- 6\r
- 7\r
- 10\r
-(8 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- <simpara>While <literal>GROUP BY</literal> can be useful for a single column, it is more often used\r
- to return the distinct results across multiple columns. For example, the\r
- following query shows us which groups have permissions at each depth in\r
- the library hierarchy:</simpara>\r
- <formalpara><title>Returning unique results of multiple columns with <literal>GROUP BY</literal></title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT grp, depth\r
- FROM permission.grp_perm_map\r
- GROUP BY grp, depth\r
- ORDER BY depth, grp;\r
-\r
- grp | depth\r
------+-------\r
- 1 | 0\r
- 2 | 0\r
- 3 | 0\r
- 4 | 0\r
- 5 | 0\r
- 10 | 0\r
- 3 | 1\r
- 4 | 1\r
- 5 | 1\r
- 6 | 1\r
- 7 | 1\r
- 10 | 1\r
- 3 | 2\r
- 4 | 2\r
- 10 | 2\r
-(15 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- <simpara>Extending this further, you can use the <literal>COUNT()</literal> aggregate function to\r
- also return the number of times each unique combination of <literal>grp</literal> and <literal>depth</literal>\r
- appears in the table. <emphasis>Yes, this is a sneak peek at the use of aggregate\r
- functions! Keeners.</emphasis></simpara>\r
- <formalpara><title>Counting unique column combinations with <literal>GROUP BY</literal></title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT grp, depth, COUNT(grp)\r
- FROM permission.grp_perm_map\r
- GROUP BY grp, depth\r
- ORDER BY depth, grp;\r
-\r
- grp | depth | count\r
------+-------+-------\r
- 1 | 0 | 6\r
- 2 | 0 | 2\r
- 3 | 0 | 45\r
- 4 | 0 | 3\r
- 5 | 0 | 5\r
- 10 | 0 | 1\r
- 3 | 1 | 3\r
- 4 | 1 | 4\r
- 5 | 1 | 1\r
- 6 | 1 | 9\r
- 7 | 1 | 5\r
- 10 | 1 | 10\r
- 3 | 2 | 24\r
- 4 | 2 | 8\r
- 10 | 2 | 7\r
-(15 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- <simpara>You can use the <literal>WHERE</literal> clause to restrict the returned results before grouping\r
- is applied to the results. The following query restricts the results to those\r
- rows that have a depth of 0.</simpara>\r
- <formalpara><title>Using the <literal>WHERE</literal> clause with <literal>GROUP BY</literal></title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT grp, COUNT(grp)\r
- FROM permission.grp_perm_map\r
- WHERE depth = 0\r
- GROUP BY grp\r
- ORDER BY 2 DESC\r
-;\r
-\r
- grp | count\r
------+-------\r
- 3 | 45\r
- 1 | 6\r
- 5 | 5\r
- 4 | 3\r
- 2 | 2\r
- 10 | 1\r
-(6 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- <simpara>To restrict results after grouping has been applied to the rows, use the\r
- <literal>HAVING</literal> clause; this is typically used to restrict results based on\r
- a comparison to the value returned by an aggregate function. For example,\r
- the following query restricts the returned rows to those that have more than\r
- 5 occurrences of the same value for <literal>grp</literal> in the table.</simpara>\r
- <formalpara><title><literal>GROUP BY</literal> restricted by a <literal>HAVING</literal> clause</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT grp, COUNT(grp)\r
- FROM permission.grp_perm_map\r
- GROUP BY grp\r
- HAVING COUNT(grp) > 5\r
-;\r
-\r
- grp | count\r
------+-------\r
- 6 | 9\r
- 4 | 15\r
- 5 | 6\r
- 1 | 6\r
- 3 | 72\r
- 10 | 18\r
-(6 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- </simplesect>\r
- <simplesect id="_eliminating_duplicate_results_with_the_distinct_keyword">\r
- <title>Eliminating duplicate results with the DISTINCT keyword</title>\r
- <simpara><literal>GROUP BY</literal> is one way of eliminating duplicate results from the rows returned\r
- by your query. The purpose of the <literal>DISTINCT</literal> keyword is to remove duplicate\r
- rows from the results of your query. However, it works, and it is easy - so if\r
- you just want a quick list of the unique set of values for a column or set of\r
- columns, the <literal>DISTINCT</literal> keyword might be appropriate.</simpara>\r
- <simpara>On the other hand, if you are getting duplicate rows back when you don’t expect\r
- them, then applying the <literal>DISTINCT</literal> keyword might be a sign that you are\r
- papering over a real problem.</simpara>\r
- <formalpara><title>Returning unique results of multiple columns with <literal>DISTINCT</literal></title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT DISTINCT grp, depth\r
- FROM permission.grp_perm_map\r
- ORDER BY depth, grp\r
-;\r
-\r
- grp | depth\r
------+-------\r
- 1 | 0\r
- 2 | 0\r
- 3 | 0\r
- 4 | 0\r
- 5 | 0\r
- 10 | 0\r
- 3 | 1\r
- 4 | 1\r
- 5 | 1\r
- 6 | 1\r
- 7 | 1\r
- 10 | 1\r
- 3 | 2\r
- 4 | 2\r
- 10 | 2\r
-(15 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- </simplesect>\r
- <simplesect id="_paging_through_results_with_the_limit_and_offset_clauses">\r
- <title>Paging through results with the LIMIT and OFFSET clauses</title>\r
- <simpara>The <literal>LIMIT</literal> clause restricts the total number of rows returned from your query\r
- and is useful if you just want to list a subset of a large number of rows. For\r
- example, in the following query we list the five most frequently used\r
- circulation modifiers:</simpara>\r
- <formalpara><title>Using the <literal>LIMIT</literal> clause to restrict results</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT circ_modifier, COUNT(circ_modifier)\r
- FROM asset.copy\r
- GROUP BY circ_modifier\r
- ORDER BY 2 DESC\r
- LIMIT 5\r
-;\r
-\r
- circ_modifier | count\r
----------------+--------\r
- CIRC | 741995\r
- BOOK | 636199\r
- SER | 265906\r
- DOC | 191598\r
- LAW MONO | 126627\r
-(5 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- <simpara>When you use the <literal>LIMIT</literal> clause to restrict the total number of rows returned\r
- by your query, you can also use the <literal>OFFSET</literal> clause to determine which subset\r
- of the rows will be returned. The use of the <literal>OFFSET</literal> clause assumes that\r
- you’ve used the <literal>ORDER BY</literal> clause to impose order on the results.</simpara>\r
- <simpara>In the following example, we use the <literal>OFFSET</literal> clause to get results 6 through\r
- 10 from the same query that we prevously executed.</simpara>\r
- <formalpara><title>Using the <literal>OFFSET</literal> clause to return a specific subset of rows</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT circ_modifier, COUNT(circ_modifier)\r
- FROM asset.copy\r
- GROUP BY circ_modifier\r
- ORDER BY 2 DESC\r
- LIMIT 5\r
- OFFSET 5\r
-;\r
-\r
- circ_modifier | count\r
----------------+--------\r
- LAW SERIAL | 102758\r
- DOCUMENTS | 86215\r
- BOOK_WEB | 63786\r
- MFORM SER | 39917\r
- REF | 34380\r
-(5 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- </simplesect>\r
- </section>\r
- <section id="advanced_sql_queries">\r
- <title>Advanced SQL queries</title>\r
- <simplesect id="_transforming_column_values_with_functions">\r
- <title>Transforming column values with functions</title>\r
- <simpara>PostgreSQL includes many built-in functions for manipulating column data.\r
- You can also create your own functions (and Evergreen does make use of\r
- many custom functions). There are two types of functions used in\r
- databases: scalar functions and aggregate functions.</simpara>\r
- <simplesect id="_scalar_functions">\r
- <title>Scalar functions</title>\r
- <simpara>Scalar functions transform each value of the target column. If your query\r
- would return 50 values for a column in a given query, and you modify your\r
- query to apply a scalar function to the values returned for that column,\r
- it will still return 50 values. For example, the UPPER() function,\r
- used to convert text values to upper-case, modifies the results in the\r
- following set of queries:</simpara>\r
- <formalpara><title>Using the UPPER() scalar function to convert text values to upper-case</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
--- First, without the UPPER() function for comparison\r
-SELECT shortname, name\r
- FROM actor.org_unit\r
- WHERE id < 4\r
-;\r
-\r
- shortname | name\r
------------+-----------------------\r
- CONS | Example Consortium\r
- SYS1 | Example System 1\r
- SYS2 | Example System 2\r
-(3 rows)\r
-\r
--- Now apply the UPPER() function to the name column\r
-SELECT shortname, UPPER(name)\r
- FROM actor.org_unit\r
- WHERE id < 4\r
-;\r
-\r
- shortname | upper\r
------------+--------------------\r
- CONS | EXAMPLE CONSORTIUM\r
- SYS1 | EXAMPLE SYSTEM 1\r
- SYS2 | EXAMPLE SYSTEM 2\r
-(3 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- <simpara>There are so many scalar functions in PostgreSQL that we cannot cover them\r
- all here, but we can list some of the most commonly used functions:</simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- || - concatenates two text values together\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- COALESCE() - returns the first non-NULL value from the list of arguments\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- LOWER() - returns a text value converted to lower-case\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- REPLACE() - returns a text value after replacing all occurrences of a given text value with a different text value\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- REGEXP_REPLACE() - returns a text value after being transformed by a regular expression\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- UPPER() - returns a text value converted to upper-case\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- <simpara>For a complete list of scalar functions, see\r
- <ulink url="http://www.postgresql.org/docs/8.3/interactive/functions.html">the PostgreSQL function documentation</ulink>.</simpara>\r
- </simplesect>\r
- <simplesect id="_aggregate_functions">\r
- <title>Aggregate functions</title>\r
- <simpara>Aggregate functions return a single value computed from the the complete set of\r
- values returned for the specified column.</simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- AVG()\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- COUNT()\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- MAX()\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- MIN()\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- SUM()\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- </simplesect>\r
- </simplesect>\r
- <simplesect id="_sub_selects">\r
- <title>Sub-selects</title>\r
- <simpara>A sub-select is the technique of using the results of one query to feed\r
- into another query. You can, for example, return a set of values from\r
- one column in a SELECT statement to be used to satisfy the IN() condition\r
- of another SELECT statement; or you could return the MAX() value of a\r
- column in a SELECT statement to match the = condition of another SELECT\r
- statement.</simpara>\r
- <simpara>For example, in the following query we use a sub-select to restrict the copies\r
- returned by the main SELECT statement to only those locations that have an\r
- <literal>opac_visible</literal> value of <literal>TRUE</literal>:</simpara>\r
- <formalpara><title>Sub-select example</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT call_number\r
- FROM asset.copy\r
- WHERE deleted IS FALSE\r
- AND location IN (\r
- SELECT id\r
- FROM asset.copy_location\r
- WHERE opac_visible IS TRUE\r
- )\r
-;\r
-</programlisting>\r
- </para></formalpara>\r
- <simpara>Sub-selects can be an approachable way to breaking down a problem that\r
- requires matching values between different tables, and often result in\r
- a clearly expressed solution to a problem. However, if you start writing\r
- sub-selects within sub-selects, you should consider tackling the problem\r
- with joins instead.</simpara>\r
- </simplesect>\r
- <simplesect id="_joins">\r
- <title>Joins</title>\r
- <simpara>Joins enable you to access the values from multiple tables in your query\r
- results and comparison operators. For example, joins are what enable you to\r
- relate a bibliographic record to a barcoded copy via the <literal>biblio.record_entry</literal>,\r
- <literal>asset.call_number</literal>, and <literal>asset.copy</literal> tables. In this section, we discuss the\r
- most common kind of join—the inner join—as well as the less common outer join\r
- and some set operations which can compare and contrast the values returned by\r
- separate queries.</simpara>\r
- <simpara>When we talk about joins, we are going to talk about the left-hand table and\r
- the right-hand table that participate in the join. Every join brings together\r
- just two tables - but you can use an unlimited (for our purposes) number\r
- of joins in a single SQL statement. Each time you use a join, you effectively\r
- create a new table, so when you add a second join clause to a statement,\r
- table 1 and table 2 (which were the left-hand table and the right-hand table\r
- for the first join) now act as a merged left-hand table and the new table\r
- in the second join clause is the right-hand table.</simpara>\r
- <simpara>Clear as mud? Okay, let’s look at some examples.</simpara>\r
- <simplesect id="_inner_joins">\r
- <title>Inner joins</title>\r
- <simpara>An inner join returns all of the columns from the left-hand table in the join\r
- with all of the columns from the right-hand table in the joins that match a\r
- condition in the ON clause. Typically, you use the <literal>=</literal> operator to match the\r
- foreign key of the left-hand table with the primary key of the right-hand\r
- table to follow the natural relationship between the tables.</simpara>\r
- <simpara>In the following example, we return all of columns from the <literal>actor.usr</literal> and\r
- <literal>actor.org_unit</literal> tables, joined on the relationship between the user’s home\r
- library and the library’s ID. Notice in the results that some columns, like\r
- <literal>id</literal> and <literal>mailing_address</literal>, appear twice; this is because both the <literal>actor.usr</literal>\r
- and <literal>actor.org_unit</literal> tables include columns with these names. This is also why\r
- we have to fully qualify the column names in our queries with the schema and\r
- table names.</simpara>\r
- <formalpara><title>A simple inner join</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT *\r
- FROM actor.usr\r
- INNER JOIN actor.org_unit ON actor.usr.home_ou = actor.org_unit.id\r
- WHERE actor.org_unit.shortname = 'CONS'\r
-;\r
-\r
--[ RECORD 1 ]------------------+---------------------------------\r
-id | 1\r
-card | 1\r
-profile | 1\r
-usrname | admin\r
-email |\r
-...\r
-mailing_address |\r
-billing_address |\r
-home_ou | 1\r
-...\r
-claims_never_checked_out_count | 0\r
-id | 1\r
-parent_ou |\r
-ou_type | 1\r
-ill_address | 1\r
-holds_address | 1\r
-mailing_address | 1\r
-billing_address | 1\r
-shortname | CONS\r
-name | Example Consortium\r
-email |\r
-phone |\r
-opac_visible | t\r
-fiscal_calendar | 1\r
-</programlisting>\r
- </para></formalpara>\r
- <simpara>Of course, you do not have to return every column from the joined tables;\r
- you can (and should) continue to specify only the columns that you want to\r
- return. In the following example, we count the number of borrowers for\r
- every user profile in a given library by joining the <literal>permission.grp_tree</literal>\r
- table where profiles are defined against the <literal>actor.usr</literal> table, and then\r
- joining the <literal>actor.org_unit</literal> table to give us access to the user’s home\r
- library:</simpara>\r
- <formalpara><title>Borrower Count by Profile (Adult, Child, etc)/Library</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT permission.grp_tree.name, actor.org_unit.name, COUNT(permission.grp_tree.name)\r
- FROM actor.usr\r
- INNER JOIN permission.grp_tree\r
- ON actor.usr.profile = permission.grp_tree.id\r
- INNER JOIN actor.org_unit\r
- ON actor.org_unit.id = actor.usr.home_ou\r
- WHERE actor.usr.deleted IS FALSE\r
- GROUP BY permission.grp_tree.name, actor.org_unit.name\r
- ORDER BY actor.org_unit.name, permission.grp_tree.name\r
-;\r
-\r
- name | name | count\r
--------+--------------------+-------\r
- Users | Example Consortium | 1\r
-(1 row)\r
-</programlisting>\r
- </para></formalpara>\r
- </simplesect>\r
- <simplesect id="_aliases">\r
- <title>Aliases</title>\r
- <simpara>So far we have been fully-qualifying all of our table names and column names to\r
- prevent any confusion. This quickly gets tiring with lengthy qualified\r
- table names like <literal>permission.grp_tree</literal>, so the SQL syntax enables us to assign\r
- aliases to table names and column names. When you define an alias for a table\r
- name, you can access its column throughout the rest of the statement by simply\r
- appending the column name to the alias with a period; for example, if you assign\r
- the alias <literal>au</literal> to the <literal>actor.usr</literal> table, you can access the <literal>actor.usr.id</literal>\r
- column through the alias as <literal>au.id</literal>.</simpara>\r
- <simpara>The formal syntax for declaring an alias for a column is to follow the column\r
- name in the result columns clause with <literal>AS</literal> <emphasis>alias</emphasis>. To declare an alias for a table name,\r
- follow the table name in the FROM clause (including any JOIN statements) with\r
- <literal>AS</literal> <emphasis>alias</emphasis>. However, the <literal>AS</literal> keyword is optional for tables (and columns as\r
- of PostgreSQL 8.4), and in practice most SQL statements leave it out. For\r
- example, we can write the previous INNER JOIN statement example using aliases\r
- instead of fully-qualified identifiers:</simpara>\r
- <formalpara><title>Borrower Count by Profile (using aliases)</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT pgt.name AS "Profile", aou.name AS "Library", COUNT(pgt.name) AS "Count"\r
- FROM actor.usr au\r
- INNER JOIN permission.grp_tree pgt\r
- ON au.profile = pgt.id\r
- INNER JOIN actor.org_unit aou\r
- ON aou.id = au.home_ou\r
- WHERE au.deleted IS FALSE\r
- GROUP BY pgt.name, aou.name\r
- ORDER BY aou.name, pgt.name\r
-;\r
-\r
- Profile | Library | Count\r
----------+--------------------+-------\r
- Users | Example Consortium | 1\r
-(1 row)\r
-</programlisting>\r
- </para></formalpara>\r
- <simpara>A nice side effect of declaring an alias for your columns is that the alias\r
- is used as the column header in the results table. The previous version of\r
- the query, which didn’t use aliased column names, had two columns named\r
- <literal>name</literal>; this version of the query with aliases results in a clearer\r
- categorization.</simpara>\r
- </simplesect>\r
- <simplesect id="_outer_joins">\r
- <title>Outer joins</title>\r
- <simpara>An outer join returns all of the rows from one or both of the tables\r
- participating in the join.</simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- For a LEFT OUTER JOIN, the join returns all of the rows from the left-hand\r
- table and the rows matching the join condition from the right-hand table, with\r
- NULL values for the rows with no match in the right-hand table.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- A RIGHT OUTER JOIN behaves in the same way as a LEFT OUTER JOIN, with the\r
- exception that all rows are returned from the right-hand table participating in\r
- the join.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- For a FULL OUTER JOIN, the join returns all the rows from both the left-hand\r
- and right-hand tables, with NULL values for the rows with no match in either\r
- the left-hand or right-hand table.\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- <formalpara><title>Base tables for the OUTER JOIN examples</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT * FROM aaa;\r
-\r
- id | stuff\r
-----+-------\r
- 1 | one\r
- 2 | two\r
- 3 | three\r
- 4 | four\r
- 5 | five\r
-(5 rows)\r
-\r
-SELECT * FROM bbb;\r
-\r
- id | stuff | foo\r
-----+-------+----------\r
- 1 | one | oneone\r
- 2 | two | twotwo\r
- 5 | five | fivefive\r
- 6 | six | sixsix\r
-(4 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- <formalpara><title>Example of a LEFT OUTER JOIN</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT * FROM aaa\r
- LEFT OUTER JOIN bbb ON aaa.id = bbb.id\r
-;\r
- id | stuff | id | stuff | foo\r
-----+-------+----+-------+----------\r
- 1 | one | 1 | one | oneone\r
- 2 | two | 2 | two | twotwo\r
- 3 | three | | |\r
- 4 | four | | |\r
- 5 | five | 5 | five | fivefive\r
-(5 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- <formalpara><title>Example of a RIGHT OUTER JOIN</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT * FROM aaa\r
- RIGHT OUTER JOIN bbb ON aaa.id = bbb.id\r
-;\r
- id | stuff | id | stuff | foo\r
-----+-------+----+-------+----------\r
- 1 | one | 1 | one | oneone\r
- 2 | two | 2 | two | twotwo\r
- 5 | five | 5 | five | fivefive\r
- | | 6 | six | sixsix\r
-(4 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- <formalpara><title>Example of a FULL OUTER JOIN</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT * FROM aaa\r
- FULL OUTER JOIN bbb ON aaa.id = bbb.id\r
-;\r
- id | stuff | id | stuff | foo\r
-----+-------+----+-------+----------\r
- 1 | one | 1 | one | oneone\r
- 2 | two | 2 | two | twotwo\r
- 3 | three | | |\r
- 4 | four | | |\r
- 5 | five | 5 | five | fivefive\r
- | | 6 | six | sixsix\r
-(6 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- </simplesect>\r
- <simplesect id="_self_joins">\r
- <title>Self joins</title>\r
- <simpara>It is possible to join a table to itself. You can, in fact you must, use\r
- aliases to disambiguate the references to the table.</simpara>\r
- </simplesect>\r
- </simplesect>\r
- <simplesect id="_set_operations">\r
- <title>Set operations</title>\r
- <simpara>Relational databases are effectively just an efficient mechanism for\r
- manipulating sets of values; they are implementations of set theory. There are\r
- three operators for sets (tables) in which each set must have the same number\r
- of columns with compatible data types: the union, intersection, and difference\r
- operators.</simpara>\r
- <formalpara><title>Base tables for the set operation examples</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT * FROM aaa;\r
-\r
- id | stuff\r
- ----+-------\r
- 1 | one\r
- 2 | two\r
- 3 | three\r
- 4 | four\r
- 5 | five\r
- (5 rows)\r
-\r
-SELECT * FROM bbb;\r
-\r
- id | stuff | foo\r
- ----+-------+----------\r
- 1 | one | oneone\r
- 2 | two | twotwo\r
- 5 | five | fivefive\r
- 6 | six | sixsix\r
-(4 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- <simplesect id="_union">\r
- <title>Union</title>\r
- <simpara>The <literal>UNION</literal> operator returns the distinct set of rows that are members of\r
- either or both of the left-hand and right-hand tables. The <literal>UNION</literal> operator\r
- does not return any duplicate rows. To return duplicate rows, use the\r
- <literal>UNION ALL</literal> operator.</simpara>\r
- <formalpara><title>Example of a UNION set operation</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
--- The parentheses are not required, but are intended to help\r
--- illustrate the sets participating in the set operation\r
-(\r
- SELECT id, stuff\r
- FROM aaa\r
-)\r
-UNION\r
-(\r
- SELECT id, stuff\r
- FROM bbb\r
-)\r
-ORDER BY 1\r
-;\r
-\r
- id | stuff\r
-----+-------\r
- 1 | one\r
- 2 | two\r
- 3 | three\r
- 4 | four\r
- 5 | five\r
- 6 | six\r
-(6 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- </simplesect>\r
- <simplesect id="_intersection">\r
- <title>Intersection</title>\r
- <simpara>The <literal>INTERSECT</literal> operator returns the distinct set of rows that are common to\r
- both the left-hand and right-hand tables. To return duplicate rows, use the\r
- <literal>INTERSECT ALL</literal> operator.</simpara>\r
- <formalpara><title>Example of an INTERSECT set operation</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-(\r
- SELECT id, stuff\r
- FROM aaa\r
-)\r
-INTERSECT\r
-(\r
- SELECT id, stuff\r
- FROM bbb\r
-)\r
-ORDER BY 1\r
-;\r
-\r
- id | stuff\r
-----+-------\r
- 1 | one\r
- 2 | two\r
- 5 | five\r
-(3 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- </simplesect>\r
- <simplesect id="_difference">\r
- <title>Difference</title>\r
- <simpara>The <literal>EXCEPT</literal> operator returns the rows in the left-hand table that do not\r
- exist in the right-hand table. You are effectively subtracting the common\r
- rows from the left-hand table.</simpara>\r
- <formalpara><title>Example of an EXCEPT set operation</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-(\r
- SELECT id, stuff\r
- FROM aaa\r
-)\r
-EXCEPT\r
-(\r
- SELECT id, stuff\r
- FROM bbb\r
-)\r
-ORDER BY 1\r
-;\r
-\r
- id | stuff\r
-----+-------\r
- 3 | three\r
- 4 | four\r
-(2 rows)\r
-\r
--- Order matters: switch the left-hand and right-hand tables\r
--- and you get a different result\r
-(\r
- SELECT id, stuff\r
- FROM bbb\r
-)\r
-EXCEPT\r
-(\r
- SELECT id, stuff\r
- FROM aaa\r
-)\r
-ORDER BY 1\r
-;\r
-\r
- id | stuff\r
-----+-------\r
- 6 | six\r
-(1 row)\r
-</programlisting>\r
- </para></formalpara>\r
- </simplesect>\r
- </simplesect>\r
- <simplesect id="_views">\r
- <title>Views</title>\r
- <simpara>A view is a persistent <literal>SELECT</literal> statement that acts like a read-only table.\r
- To create a view, issue the <literal>CREATE VIEW</literal> statement, giving the view a name\r
- and a <literal>SELECT</literal> statement on which the view is built.</simpara>\r
- <simpara>The following example creates a view based on our borrower profile count:</simpara>\r
- <formalpara><title>Creating a view</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-CREATE VIEW actor.borrower_profile_count AS\r
- SELECT pgt.name AS "Profile", aou.name AS "Library", COUNT(pgt.name) AS "Count"\r
- FROM actor.usr au\r
- INNER JOIN permission.grp_tree pgt\r
- ON au.profile = pgt.id\r
- INNER JOIN actor.org_unit aou\r
- ON aou.id = au.home_ou\r
- WHERE au.deleted IS FALSE\r
- GROUP BY pgt.name, aou.name\r
- ORDER BY aou.name, pgt.name\r
-;\r
-</programlisting>\r
- </para></formalpara>\r
- <simpara>When you subsequently select results from the view, you can apply additional\r
- <literal>WHERE</literal> clauses to filter the results, or <literal>ORDER BY</literal> clauses to change the\r
- order of the returned rows. In the following examples, we issue a simple\r
- <literal>SELECT *</literal> statement to show that the default results are returned in the\r
- same order from the view as the equivalent SELECT statement would be returned.\r
- Then we issue a <literal>SELECT</literal> statement with a <literal>WHERE</literal> clause to further filter the\r
- results.</simpara>\r
- <formalpara><title>Selecting results from a view</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT * FROM actor.borrower_profile_count;\r
-\r
- Profile | Library | Count\r
-----------------------------+----------------------------+-------\r
- Faculty | University Library | 208\r
- Graduate | University Library | 16\r
- Patrons | University Library | 62\r
-...\r
-\r
--- You can still filter your results with WHERE clauses\r
-SELECT *\r
- FROM actor.borrower_profile_count\r
- WHERE "Profile" = 'Faculty';\r
-\r
- Profile | Library | Count\r
----------+----------------------------+-------\r
- Faculty | University Library | 208\r
- Faculty | College Library | 64\r
- Faculty | College Library 2 | 102\r
- Faculty | University Library 2 | 776\r
-(4 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- </simplesect>\r
- <simplesect id="_inheritance">\r
- <title>Inheritance</title>\r
- <simpara>PostgreSQL supports table inheritance: that is, a child table inherits its\r
- base definition from a parent table, but can add additional columns to its\r
- own definition. The data from any child tables is visible in queries against\r
- the parent table.</simpara>\r
- <simpara>Evergreen uses table inheritance in several areas:\r
- * In the Vandelay MARC batch importer / exporter, Evergreen defines base\r
- tables for generic queues and queued records for which authority record and\r
- bibliographic record child tables\r
- * Billable transactions are based on the <literal>money.billable_xact</literal> table;\r
- child tables include <literal>action.circulation</literal> for circulation transactions\r
- and <literal>money.grocery</literal> for general bills.\r
- * Payments are based on the <literal>money.payment</literal> table; its child table is\r
- <literal>money.bnm_payment</literal> (for brick-and-mortar payments), which in turn has child\r
- tables of <literal>money.forgive_payment</literal>, <literal>money.work_payment</literal>, <literal>money.credit_payment</literal>,\r
- <literal>money.goods_payment</literal>, and <literal>money.bnm_desk_payment</literal>. The\r
- <literal>money.bnm_desk_payment</literal> table in turn has child tables of <literal>money.cash_payment</literal>,\r
- <literal>money.check_payment</literal>, and <literal>money.credit_card_payment</literal>.\r
- * Transits are based on the <literal>action.transit_copy</literal> table, which has a child\r
- table of <literal>action.hold_transit_copy</literal> for transits initiated by holds.\r
- * Generic acquisition line items are defined by the\r
- <literal>acq.lineitem_attr_definition</literal> table, which in turn has a number of child\r
- tables to define MARC attributes, generated attributes, user attributes, and\r
- provider attributes.</simpara>\r
- </simplesect>\r
- </section>\r
- <section id="understanding_query_performance_with_explain">\r
- <title>Understanding query performance with EXPLAIN</title>\r
- <simpara>Some queries run for a long, long time. This can be the result of a poorly\r
- written query—a query with a join condition that joins every\r
- row in the <literal>biblio.record_entry</literal> table with every row in the <literal>metabib.full_rec</literal>\r
- view would consume a massive amount of memory and disk space and CPU time—or\r
- a symptom of a schema that needs some additional indexes. PostgreSQL provides\r
- the <literal>EXPLAIN</literal> tool to estimate how long it will take to run a given query and\r
- show you the <emphasis>query plan</emphasis> (how it plans to retrieve the results from the\r
- database).</simpara>\r
- <simpara>To generate the query plan without actually running the statement, simply\r
- prepend the <literal>EXPLAIN</literal> keyword to your query. In the following example, we\r
- generate the query plan for the poorly written query that would join every\r
- row in the <literal>biblio.record_entry</literal> table with every row in the <literal>metabib.full_rec</literal>\r
- view:</simpara>\r
- <formalpara><title>Query plan for a terrible query</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-EXPLAIN SELECT *\r
- FROM biblio.record_entry\r
- FULL OUTER JOIN metabib.full_rec ON 1=1\r
-;\r
-\r
- QUERY PLAN\r
--------------------------------------------------------------------------------//\r
- Merge Full Join (cost=0.00..4959156437783.60 rows=132415734100864 width=1379)\r
- -> Seq Scan on record_entry (cost=0.00..400634.16 rows=2013416 width=1292)\r
- -> Seq Scan on real_full_rec (cost=0.00..1640972.04 rows=65766704 width=87)\r
-(3 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- <simpara>This query plan shows that the query would return 132415734100864 rows, and it\r
- plans to accomplish what you asked for by sequentially scanning (<emphasis>Seq Scan</emphasis>)\r
- every row in each of the tables participating in the join.</simpara>\r
- <simpara>In the following example, we have realized our mistake in joining every row of\r
- the left-hand table with every row in the right-hand table and take the saner\r
- approach of using an <literal>INNER JOIN</literal> where the join condition is on the record ID.</simpara>\r
- <formalpara><title>Query plan for a less terrible query</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-EXPLAIN SELECT *\r
- FROM biblio.record_entry bre\r
- INNER JOIN metabib.full_rec mfr ON mfr.record = bre.id;\r
- QUERY PLAN\r
-----------------------------------------------------------------------------------------//\r
- Hash Join (cost=750229.86..5829273.98 rows=65766704 width=1379)\r
- Hash Cond: (real_full_rec.record = bre.id)\r
- -> Seq Scan on real_full_rec (cost=0.00..1640972.04 rows=65766704 width=87)\r
- -> Hash (cost=400634.16..400634.16 rows=2013416 width=1292)\r
- -> Seq Scan on record_entry bre (cost=0.00..400634.16 rows=2013416 width=1292)\r
-(5 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- <simpara>This time, we will return 65766704 rows - still way too many rows. We forgot\r
- to include a <literal>WHERE</literal> clause to limit the results to something meaningful. In\r
- the following example, we will limit the results to deleted records that were\r
- modified in the last month.</simpara>\r
- <formalpara><title>Query plan for a realistic query</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-EXPLAIN SELECT *\r
- FROM biblio.record_entry bre\r
- INNER JOIN metabib.full_rec mfr ON mfr.record = bre.id\r
- WHERE bre.deleted IS TRUE\r
- AND DATE_TRUNC('MONTH', bre.edit_date) >\r
- DATE_TRUNC ('MONTH', NOW() - '1 MONTH'::INTERVAL)\r
-;\r
-\r
- QUERY PLAN\r
-----------------------------------------------------------------------------------------//\r
- Hash Join (cost=5058.86..2306218.81 rows=201669 width=1379)\r
- Hash Cond: (real_full_rec.record = bre.id)\r
- -> Seq Scan on real_full_rec (cost=0.00..1640972.04 rows=65766704 width=87)\r
- -> Hash (cost=4981.69..4981.69 rows=6174 width=1292)\r
- -> Index Scan using biblio_record_entry_deleted on record_entry bre\r
- (cost=0.00..4981.69 rows=6174 width=1292)\r
- Index Cond: (deleted = true)\r
- Filter: ((deleted IS TRUE) AND (date_trunc('MONTH'::text, edit_date)\r
- > date_trunc('MONTH'::text, (now() - '1 mon'::interval))))\r
-(7 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- <simpara>We can see that the number of rows returned is now only 201669; that’s\r
- something we can work with. Also, the overall cost of the query is 2306218,\r
- compared to 4959156437783 in the original query. The <literal>Index Scan</literal> tells us\r
- that the query planner will use the index that was defined on the <literal>deleted</literal>\r
- column to avoid having to check every row in the <literal>biblio.record_entry</literal> table.</simpara>\r
- <simpara>However, we are still running a sequential scan over the\r
- <literal>metabib.real_full_rec</literal> table (the table on which the <literal>metabib.full_rec</literal>\r
- view is based). Given that linking from the bibliographic records to the\r
- flattened MARC subfields is a fairly common operation, we could create a\r
- new index and see if that speeds up our query plan.</simpara>\r
- <formalpara><title>Query plan with optimized access via a new index</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
--- This index will take a long time to create on a large database\r
--- of bibliographic records\r
-CREATE INDEX bib_record_idx ON metabib.real_full_rec (record);\r
-\r
-EXPLAIN SELECT *\r
- FROM biblio.record_entry bre\r
- INNER JOIN metabib.full_rec mfr ON mfr.record = bre.id\r
- WHERE bre.deleted IS TRUE\r
- AND DATE_TRUNC('MONTH', bre.edit_date) >\r
- DATE_TRUNC ('MONTH', NOW() - '1 MONTH'::INTERVAL)\r
-;\r
-\r
- QUERY PLAN\r
-----------------------------------------------------------------------------------------//\r
- Nested Loop (cost=0.00..1558330.46 rows=201669 width=1379)\r
- -> Index Scan using biblio_record_entry_deleted on record_entry bre\r
- (cost=0.00..4981.69 rows=6174 width=1292)\r
- Index Cond: (deleted = true)\r
- Filter: ((deleted IS TRUE) AND (date_trunc('MONTH'::text, edit_date) >\r
- date_trunc('MONTH'::text, (now() - '1 mon'::interval))))\r
- -> Index Scan using bib_record_idx on real_full_rec\r
- (cost=0.00..240.89 rows=850 width=87)\r
- Index Cond: (real_full_rec.record = bre.id)\r
-(6 rows)\r
-</programlisting>\r
- </para></formalpara>\r
- <simpara>We can see that the resulting number of rows is still the same (201669), but\r
- the execution estimate has dropped to 1558330 because the query planner can\r
- use the new index (<literal>bib_record_idx</literal>) rather than scanning the entire table.\r
- Success!</simpara>\r
- <note><simpara>While indexes can significantly speed up read access to tables for common\r
- filtering conditions, every time a row is created or updated the corresponding\r
- indexes also need to be maintained - which can decrease the performance of\r
- writes to the database. Be careful to keep the balance of read performance\r
- versus write performance in mind if you plan to create custom indexes in your\r
- Evergreen database.</simpara></note>\r
- </section>\r
- <section id="inserting_updating_and_deleting_data">\r
- <title>Inserting, updating, and deleting data</title>\r
- <simplesect id="_inserting_data">\r
- <title>Inserting data</title>\r
- <simpara>To insert one or more rows into a table, use the INSERT statement to identify\r
- the target table and list the columns in the table for which you are going to\r
- provide values for each row. If you do not list one or more columns contained\r
- in the table, the database will automatically supply a <literal>NULL</literal> value for those\r
- columns. The values for each row follow the <literal>VALUES</literal> clause and are grouped in\r
- parentheses and delimited by commas. Each row, in turn, is delimited by commas\r
- (<emphasis>this multiple row syntax requires PostgreSQL 8.2 or higher</emphasis>).</simpara>\r
- <simpara>For example, to insert two rows into the <literal>permission.usr_grp_map</literal> table:</simpara>\r
- <formalpara><title>Inserting rows into the <literal>permission.usr_grp_map</literal> table</title><para>\r
- <programlisting language="sql" linenumbering="unnumbered">INSERT INTO permission.usr_grp_map (usr, grp)\r
- VALUES (2, 10), (2, 4)\r
- ;</programlisting>\r
- </para></formalpara>\r
- <simpara>Of course, as with the rest of SQL, you can replace individual column values\r
- with one or more use sub-selects:</simpara>\r
- <formalpara><title>Inserting rows using sub-selects instead of integers</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-INSERT INTO permission.usr_grp_map (usr, grp)\r
- VALUES (\r
- (SELECT id FROM actor.usr\r
- WHERE family_name = 'Scott' AND first_given_name = 'Daniel'),\r
- (SELECT id FROM permission.grp_tree\r
- WHERE name = 'Local System Administrator')\r
- ), (\r
- (SELECT id FROM actor.usr\r
- WHERE family_name = 'Scott' AND first_given_name = 'Daniel'),\r
- (SELECT id FROM permission.grp_tree\r
- WHERE name = 'Circulator')\r
- )\r
-;\r
-</programlisting>\r
- </para></formalpara>\r
- </simplesect>\r
- <simplesect id="_inserting_data_using_a_select_statement">\r
- <title>Inserting data using a SELECT statement</title>\r
- <simpara>Sometimes you want to insert a bulk set of data into a new table based on\r
- a query result. Rather than a <literal>VALUES</literal> clause, you can use a <literal>SELECT</literal>\r
- statement to insert one or more rows matching the column definitions. This\r
- is a good time to point out that you can include explicit values, instead\r
- of just column identifiers, in the return columns of the <literal>SELECT</literal> statement.\r
- The explicit values are returned in every row of the result set.</simpara>\r
- <simpara>In the following example, we insert 6 rows into the <literal>permission.usr_grp_map</literal>\r
- table; each row will have a <literal>usr</literal> column value of 1, with varying values for\r
- the <literal>grp</literal> column value based on the <literal>id</literal> column values returned from\r
- <literal>permission.grp_tree</literal>:</simpara>\r
- <formalpara><title>Inserting rows via a <literal>SELECT</literal> statement</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-INSERT INTO permission.usr_grp_map (usr, grp)\r
- SELECT 1, id\r
- FROM permission.grp_tree\r
- WHERE id > 2\r
-;\r
-\r
-INSERT 0 6\r
-</programlisting>\r
- </para></formalpara>\r
- </simplesect>\r
- <simplesect id="_deleting_rows">\r
- <title>Deleting rows</title>\r
- <simpara>Deleting data from a table is normally fairly easy. To delete rows from a table,\r
- issue a <literal>DELETE</literal> statement identifying the table from which you want to delete\r
- rows and a <literal>WHERE</literal> clause identifying the row or rows that should be deleted.</simpara>\r
- <simpara>In the following example, we delete all of the rows from the\r
- <literal>permission.grp_perm_map</literal> table where the permission maps to\r
- <literal>UPDATE_ORG_UNIT_CLOSING</literal> and the group is anything other than administrators:</simpara>\r
- <formalpara><title>Deleting rows from a table</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-DELETE FROM permission.grp_perm_map\r
- WHERE grp IN (\r
- SELECT id\r
- FROM permission.grp_tree\r
- WHERE name != 'Local System Administrator'\r
- ) AND perm = (\r
- SELECT id\r
- FROM permission.perm_list\r
- WHERE code = 'UPDATE_ORG_UNIT_CLOSING'\r
- )\r
-;\r
-</programlisting>\r
- </para></formalpara>\r
- <note><simpara>There are two main reasons that a <literal>DELETE</literal> statement may not actually\r
- delete rows from a table, even when the rows meet the conditional clause.</simpara></note>\r
- <orderedlist numeration="arabic">\r
- <listitem>\r
- <simpara>\r
- If the row contains a value that is the target of a relational constraint,\r
- for example, if another table has a foreign key pointing at your target\r
- table, you will be prevented from deleting a row with a value corresponding\r
- to a row in the dependent table.\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- If the table has a rule that substitutes a different action for a <literal>DELETE</literal>\r
- statement, the deletion will not take place. In Evergreen it is common for a\r
- table to have a rule that substitutes the action of setting a <literal>deleted</literal> column\r
- to <literal>TRUE</literal>. For example, if a book is discarded, deleting the row representing\r
- the copy from the <literal>asset.copy</literal> table would severely affect circulation statistics,\r
- bills, borrowing histories, and their corresponding tables in the database that\r
- have foreign keys pointing at the <literal>asset.copy</literal> table (<literal>action.circulation</literal> and\r
- <literal>money.billing</literal> and its children respectively). Instead, the <literal>deleted</literal> column\r
- value is set to <literal>TRUE</literal> and Evergreen’s application logic skips over these rows\r
- in most cases.\r
- </simpara>\r
- </listitem>\r
- </orderedlist>\r
- </simplesect>\r
- <simplesect id="_updating_rows">\r
- <title>Updating rows</title>\r
- <simpara>To update rows in a table, issue an <literal>UPDATE</literal> statement identifying the table\r
- you want to update, the column or columns that you want to set with their\r
- respective new values, and (optionally) a <literal>WHERE</literal> clause identifying the row or\r
- rows that should be updated.</simpara>\r
- <simpara>Following is the syntax for the <literal>UPDATE</literal> statement:</simpara>\r
- <blockquote>\r
- <literallayout><literal>UPDATE</literal> [<emphasis>table-name</emphasis>]\r
- <literal>SET</literal> [<emphasis>column</emphasis>] <literal>TO</literal> [<emphasis>new-value</emphasis>]\r
- <literal>WHERE</literal> [<emphasis>condition</emphasis>]\r
- ;</literallayout>\r
- </blockquote>\r
- </simplesect>\r
- </section>\r
- <section id="query_requests">\r
- <title>Query requests</title>\r
- <simpara>The following queries were requested by Bibliomation, but might be reusable\r
- by other libraries.</simpara>\r
- <simplesect id="_monthly_circulation_stats_by_collection_code_library">\r
- <title>Monthly circulation stats by collection code / library</title>\r
- <formalpara><title>Monthly Circulation Stats by Collection Code/Library</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT COUNT(acirc.id) AS "COUNT", aou.name AS "Library", acl.name AS "Copy Location"\r
- FROM asset.copy ac\r
- INNER JOIN asset.copy_location acl ON ac.location = acl.id\r
- INNER JOIN action.circulation acirc ON acirc.target_copy = ac.id\r
- INNER JOIN actor.org_unit aou ON acirc.circ_lib = aou.id\r
- WHERE DATE_TRUNC('MONTH', acirc.create_time) = DATE_TRUNC('MONTH', NOW() - INTERVAL '3 month')\r
- AND acirc.desk_renewal IS FALSE\r
- AND acirc.opac_renewal IS FALSE\r
- AND acirc.phone_renewal IS FALSE\r
- GROUP BY aou.name, acl.name\r
- ORDER BY aou.name, acl.name, 1\r
-;\r
-</programlisting>\r
- </para></formalpara>\r
- </simplesect>\r
- <simplesect id="_monthly_circulation_stats_by_borrower_stat_library">\r
- <title>Monthly circulation stats by borrower stat / library</title>\r
- <formalpara><title>Monthly Circulation Stats by Borrower Stat/Library</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT COUNT(acirc.id) AS "COUNT", aou.name AS "Library", asceum.stat_cat_entry AS "Borrower Stat"\r
- FROM action.circulation acirc\r
- INNER JOIN actor.org_unit aou ON acirc.circ_lib = aou.id\r
- INNER JOIN actor.stat_cat_entry_usr_map asceum ON asceum.target_usr = acirc.usr\r
- INNER JOIN actor.stat_cat astat ON asceum.stat_cat = astat.id\r
- WHERE DATE_TRUNC('MONTH', acirc.create_time) = DATE_TRUNC('MONTH', NOW() - INTERVAL '3 month')\r
- AND astat.name = 'Preferred language'\r
- AND acirc.desk_renewal IS FALSE\r
- AND acirc.opac_renewal IS FALSE\r
- AND acirc.phone_renewal IS FALSE\r
- GROUP BY aou.name, asceum.stat_cat_entry\r
- ORDER BY aou.name, asceum.stat_cat_entry, 1\r
-;\r
-</programlisting>\r
- </para></formalpara>\r
- </simplesect>\r
- <simplesect id="_monthly_intralibrary_loan_stats_by_library">\r
- <title>Monthly intralibrary loan stats by library</title>\r
- <formalpara><title>Monthly Intralibrary Loan Stats by Library</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT aou.name AS "Library", COUNT(acirc.id)\r
- FROM action.circulation acirc\r
- INNER JOIN actor.org_unit aou ON acirc.circ_lib = aou.id\r
- INNER JOIN asset.copy ac ON acirc.target_copy = ac.id\r
- INNER JOIN asset.call_number acn ON ac.call_number = acn.id\r
- WHERE acirc.circ_lib != acn.owning_lib\r
- AND DATE_TRUNC('MONTH', acirc.create_time) = DATE_TRUNC('MONTH', NOW() - INTERVAL '3 month')\r
- AND acirc.desk_renewal IS FALSE\r
- AND acirc.opac_renewal IS FALSE\r
- AND acirc.phone_renewal IS FALSE\r
- GROUP by aou.name\r
- ORDER BY aou.name, 2\r
-;\r
-</programlisting>\r
- </para></formalpara>\r
- </simplesect>\r
- <simplesect id="_monthly_borrowers_added_by_profile_adult_child_etc_library">\r
- <title>Monthly borrowers added by profile (adult, child, etc) / library</title>\r
- <formalpara><title>Monthly Borrowers Added by Profile (Adult, Child, etc)/Library</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT pgt.name AS "Profile", aou.name AS "Library", COUNT(pgt.name) AS "Count"\r
- FROM actor.usr au\r
- INNER JOIN permission.grp_tree pgt\r
- ON au.profile = pgt.id\r
- INNER JOIN actor.org_unit aou\r
- ON aou.id = au.home_ou\r
- WHERE au.deleted IS FALSE\r
- AND DATE_TRUNC('MONTH', au.create_date) = DATE_TRUNC('MONTH', NOW() - '3 months'::interval)\r
- GROUP BY pgt.name, aou.name\r
- ORDER BY aou.name, pgt.name\r
-;\r
-</programlisting>\r
- </para></formalpara>\r
- </simplesect>\r
- <simplesect id="_borrower_count_by_profile_adult_child_etc_library">\r
- <title>Borrower count by profile (adult, child, etc) / library</title>\r
- <formalpara><title>Borrower Count by Profile (Adult, Child, etc)/Library</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT pgt.name AS "Profile", aou.name AS "Library", COUNT(pgt.name) AS "Count"\r
- FROM actor.usr au\r
- INNER JOIN permission.grp_tree pgt\r
- ON au.profile = pgt.id\r
- INNER JOIN actor.org_unit aou\r
- ON aou.id = au.home_ou\r
- WHERE au.deleted IS FALSE\r
- GROUP BY pgt.name, aou.name\r
- ORDER BY aou.name, pgt.name\r
-;\r
-</programlisting>\r
- </para></formalpara>\r
- </simplesect>\r
- <simplesect id="_monthly_items_added_by_collection_library">\r
- <title>Monthly items added by collection / library</title>\r
- <simpara>We define a <quote>collection</quote> as a shelving location in Evergreen.</simpara>\r
- <formalpara><title>Monthly Items Added by Collection/Library</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-SELECT aou.name AS "Library", acl.name, COUNT(ac.barcode)\r
- FROM actor.org_unit aou\r
- INNER JOIN asset.call_number acn ON acn.owning_lib = aou.id\r
- INNER JOIN asset.copy ac ON ac.call_number = acn.id\r
- INNER JOIN asset.copy_location acl ON ac.location = acl.id\r
- WHERE ac.deleted IS FALSE\r
- AND acn.deleted IS FALSE\r
- AND DATE_TRUNC('MONTH', ac.create_date) = DATE_TRUNC('MONTH', NOW() - '1 month'::interval)\r
- GROUP BY aou.name, acl.name\r
- ORDER BY aou.name, acl.name\r
-;\r
-</programlisting>\r
- </para></formalpara>\r
- </simplesect>\r
- <simplesect id="_hold_purchase_alert_by_library">\r
- <title>Hold purchase alert by library</title>\r
- <simpara>in the following set of queries, we bring together the active title, volume,\r
- and copy holds and display those that have more than a certain number of holds\r
- per title. The goal is to UNION ALL the three queries, then group by the\r
- bibliographic record ID and display the title / author information for those\r
- records that have more than a given threshold of holds.</simpara>\r
- <formalpara><title>Hold Purchase Alert by Library</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
--- Title holds\r
-SELECT all_holds.bib_id, aou.name, rmsr.title, rmsr.author, COUNT(all_holds.bib_id)\r
- FROM\r
- (\r
- (\r
- SELECT target, request_lib\r
- FROM action.hold_request\r
- WHERE hold_type = 'T'\r
- AND fulfillment_time IS NULL\r
- AND cancel_time IS NULL\r
- )\r
- UNION ALL\r
- -- Volume holds\r
- (\r
- SELECT bre.id, request_lib\r
- FROM action.hold_request ahr\r
- INNER JOIN asset.call_number acn ON ahr.target = acn.id\r
- INNER JOIN biblio.record_entry bre ON acn.record = bre.id\r
- WHERE ahr.hold_type = 'V'\r
- AND ahr.fulfillment_time IS NULL\r
- AND ahr.cancel_time IS NULL\r
- )\r
- UNION ALL\r
- -- Copy holds\r
- (\r
- SELECT bre.id, request_lib\r
- FROM action.hold_request ahr\r
- INNER JOIN asset.copy ac ON ahr.target = ac.id\r
- INNER JOIN asset.call_number acn ON ac.call_number = acn.id\r
- INNER JOIN biblio.record_entry bre ON acn.record = bre.id\r
- WHERE ahr.hold_type = 'C'\r
- AND ahr.fulfillment_time IS NULL\r
- AND ahr.cancel_time IS NULL\r
- )\r
- ) AS all_holds(bib_id, request_lib)\r
- INNER JOIN reporter.materialized_simple_record rmsr\r
- INNER JOIN actor.org_unit aou ON aou.id = all_holds.request_lib\r
- ON rmsr.id = all_holds.bib_id\r
- GROUP BY all_holds.bib_id, aou.name, rmsr.id, rmsr.title, rmsr.author\r
- HAVING COUNT(all_holds.bib_id) > 2\r
- ORDER BY aou.name\r
-;\r
-</programlisting>\r
- </para></formalpara>\r
- </simplesect>\r
- <simplesect id="_update_borrower_records_with_a_different_home_library">\r
- <title>Update borrower records with a different home library</title>\r
- <simpara>In this example, the library has opened a new branch in a growing area,\r
- and wants to reassign the home library for the patrons in the vicinity of\r
- the new branch to the new branch. To accomplish this, we create a staging table\r
- that holds a set of city names and the corresponding branch shortname for the home\r
- library for each city.</simpara>\r
- <simpara>Then we issue an <literal>UPDATE</literal> statement to set the home library for patrons with a\r
- physical address with a city that matches the city names in our staging table.</simpara>\r
- <formalpara><title>Update borrower records with a different home library</title><para>\r
-<programlisting language="sql" linenumbering="unnumbered">\r
-CREATE SCHEMA staging;\r
-CREATE TABLE staging.city_home_ou_map (city TEXT, ou_shortname TEXT,\r
- FOREIGN KEY (ou_shortname) REFERENCES actor.org_unit (shortname));\r
-INSERT INTO staging.city_home_ou_map (city, ou_shortname)\r
- VALUES ('Southbury', 'BR1'), ('Middlebury', 'BR2'), ('Hartford', 'BR3');\r
-BEGIN;\r
-\r
-UPDATE actor.usr au SET home_ou = COALESCE(\r
- (\r
- SELECT aou.id\r
- FROM actor.org_unit aou\r
- INNER JOIN staging.city_home_ou_map schom ON schom.ou_shortname = aou.shortname\r
- INNER JOIN actor.usr_address aua ON aua.city = schom.city\r
- WHERE au.id = aua.usr\r
- GROUP BY aou.id\r
- ), home_ou)\r
-WHERE (\r
- SELECT aou.id\r
- FROM actor.org_unit aou\r
- INNER JOIN staging.city_home_ou_map schom ON schom.ou_shortname = aou.shortname\r
- INNER JOIN actor.usr_address aua ON aua.city = schom.city\r
- WHERE au.id = aua.usr\r
- GROUP BY aou.id\r
-) IS NOT NULL;\r
-</programlisting>\r
- </para></formalpara>\r
- </simplesect>\r
- </section>\r
- \r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<chapter xml:id="JSON_Queries" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
- <info>\r
- <title>JSON Queries</title>\r
- <indexterm><primary>JSON</primary></indexterm>\r
- </info>\r
- <para>The json_query facility provides a way for client applications to query the database over the network. Instead of constructing its own SQL, the application encodes a query in the \r
- form of a JSON string and passes it to the json_query service. Then the json_query service parses the JSON, constructs and executes the corresponding SQL, and returns the results to \r
- the client application.</para>\r
- <para>This arrangement enables the json_query service to act as a gatekeeper, protecting the database from potentially damaging SQL commands. In particular, the generated SQL is \r
- confined to SELECT statements, which will not change the contents of the database.</para>\r
-\r
- <para>In addition, the json_query service sometimes uses its knowledge of the database structure to supply column names and join conditions so that the client application doesn't \r
- have to.</para>\r
-\r
- <para>Nevertheless, the need to encode a query in a JSON string adds complications, because the client needs to know how to build the right JSON. JSON queries are also somewhat \r
- limiting -- they can't do all of the things that you can do with raw SQL.</para>\r
- <simplesect>\r
- <title>The IDL</title>\r
-\r
- <para>A JSON query does not refer to tables and columns. Instead, it refers to classes and fields, which the IDL maps to the corresponding database entities.</para>\r
-\r
- <para>The IDL (Interface Definition Language) is an XML file, typically <filename>/openils/conf/fm_IDL.xml</filename>. It maps each class to a table, view, or subquery, and \r
- each field to a column. It also includes information about foreign key relationships.</para>\r
-\r
- <para>(The IDL also defines virtual classes and virtual fields, which don't correspond to database entities. We won't discuss them here, because json_query ignores them.)</para>\r
-\r
- <para>When it first starts up, json_query loads a relevant subset of the IDL into memory. Thereafter, it consults its copy of the IDL whenever it needs to know about the database \r
- structure. It uses the IDL to validate the JSON queries, and to translate classes and fields to the corresponding tables and columns. In some cases it uses the IDL to supply information \r
- that the queries don't provide.\r
- Definitions</para>\r
-\r
- <para>You should also be familiar with JSON. However it is worth defining a couple of terms that have other meanings in other contexts:</para>\r
-\r
- <itemizedlist>\r
- <listitem><para>An "object" is a JSON object, i.e. a comma-separated list of name:value pairs, enclosed in curly braces, like this:</para>\r
- <screen>{ "a":"frobozz", "b":24, "c":null }</screen>\r
- </listitem>\r
- <listitem><para>An "array" is a JSON array, i.e. a comma-separated list of values, enclosed in square brackets, like this:</para>\r
- <screen>[ "Goober", 629, null, false, "glub" ]</screen>\r
- </listitem> \r
- </itemizedlist> \r
- </simplesect>\r
- <simplesect>\r
- <title>The Examples</title>\r
- <para>The test_json_query utility generated the SQL for all of the sample queries in this tutorial. Newlines and indentation were then inserted manually for readability.</para>\r
- <para>All examples involve the actor.org_unit table, sometimes in combination with a few related tables. The queries themselves are designed to illustrate the syntax, not \r
- to do anything useful at the application level. For example, it's not meaningful to take the square root of an org_unit id, except to illustrate how to code a function call. \r
- The examples are like department store mannequins -- they have no brains, they're only for display.</para>\r
- <para>The simplest kind of query defines nothing but a FROM clause. For example:</para>\r
- <programlisting>\r
- {\r
- "from":"aou"\r
- }\r
- </programlisting>\r
- <para>In this minimal example we select from only one table. Later we will see how to join multiple tables.</para>\r
- <para>Since we don't supply a WHERE clause, json_query constructs a default WHERE clause for us, including all the available columns. The resulting SQL looks like this:</para>\r
-<programlisting language="sql">\r
-SELECT\r
- "aou".billing_address AS "billing_address",\r
- "aou".holds_address AS "holds_address",\r
- "aou".id AS "id",\r
- "aou".ill_address AS "ill_address",\r
- "aou".mailing_address AS "mailing_address",\r
- "aou".name AS "name",\r
- "aou".ou_type AS "ou_type",\r
- "aou".parent_ou AS "parent_ou",\r
- "aou".shortname AS "shortname",\r
- "aou".email AS "email",\r
- "aou".phone AS "phone",\r
- "aou".opac_visible AS "opac_visible"\r
-FROM\r
- actor.org_unit AS "aou" ; \r
-</programlisting>\r
- </simplesect>\r
- <simplesect>\r
- <title>Default SELECT Clauses</title>\r
- <indexterm><primary>JSON</primary><secondary>SELECT clauses</secondary></indexterm>\r
- <para>The default SELECT clause includes every column that the IDL defines it as a non-virtual field for the class in question. If a column is present in the database but \r
- not defined in the IDL, json_query doesn't know about it. In the case of the example shown above, all the columns are defined in the IDL, so they all show up in the default \r
- SELECT clause.</para>\r
- <para>If the FROM clause joins two or more tables, the default SELECT clause includes columns only from the core table, not from any of the joined tables.</para>\r
- <para>The default SELECT clause has almost the same effect as "SELECT *", but not exactly. If you were to "SELECT * from actor.org_unit_type in psql, the output would \r
- include all the same columns as in the example above, but not in the same order. A default SELECT clause includes the columns in the order in which the IDL defines them, \r
- which may be different from the order in which the database defines them.</para> \r
- <para>In practice, the sequencing of columns in the SELECT clause is not significant. The result set is returned to the client program in the form of a data structure, which \r
- the client program can navigate however it chooses.</para>\r
- </simplesect> \r
- <simplesect>\r
- <title>Other Lessons</title>\r
- <para>There are other ways to get a default SELECT clause. However, default SELECT clauses are a distraction at this point, because most of the time you'll specify your \r
- own SELECT clause explicitly, as we will discuss later.</para>\r
- <para>Let's consider some more important aspects of this simple example -- more important because they apply to more complex queries as well.</para>\r
- <itemizedlist>\r
- <listitem>\r
- <para> The entire JSON query is an object. In this simple case the object includes only one entry, for the FROM clause. Typically you'll also have entries \r
- for the SELECT clause and the WHERE clause, and possibly for HAVING, ORDER BY, LIMIT, or OFFSET clauses. There is no separate entry for a GROUP BY clause, which you \r
- can specify by other means.</para> \r
- </listitem>\r
- <listitem>\r
- <para>Although all the other entries are optional, you must include an entry for the FROM clause. You cannot, for example, do a SELECT USER the way \r
- you can in psql.</para> \r
- </listitem>\r
- <listitem>\r
- <para>Every column is qualified by an alias for the table. This alias is always the class name for the table, as defined in the IDL.</para> \r
- </listitem>\r
- <listitem>\r
- <para>Every column is aliased with the column name. There is a way to choose a different column alias (not shown here).</para> \r
- </listitem> \r
- </itemizedlist>\r
- </simplesect>\r
- <simplesect>\r
- <title>The SELECT Clause</title>\r
- <para>The following variation also produces a default SELECT clause:</para>\r
-<programlisting>\r
-{\r
- "from":"aou",\r
- "select": {\r
- "aou":"*"\r
- }\r
-}\r
-</programlisting>\r
- <para>...and so does this one:</para>\r
-<programlisting>\r
-{\r
- "select": {\r
- "aou":null\r
- },\r
- "from":"aou"\r
-}\r
-</programlisting>\r
- <para>While this syntax may not be terribly useful, it does illustrate the minimal structure of a SELECT clause in a JSON query: an entry in the outermost JSON object, \r
- with a key of <quote>select</quote>. The value associated with this key is another JSON object, whose keys are class names.</para>\r
- <para>(These two examples also illustrate another point: unlike SQL, a JSON query doesn't care whether the FROM clause or the SELECT clause comes first.)</para>\r
- <para>Usually you don't want the default SELECT clause. Here's how to select only some of the columns:</para>\r
-<programlisting>\r
-{\r
- "from":"aou",\r
- "select": {\r
- "aou":[ "id", "name" ]\r
- }\r
-}\r
-</programlisting>\r
- <para>The value associated with the class name is an array of column names. If you select columns from multiple tables (not shown here), you'll need a separate entry for each table, \r
- and a separate column list for each entry.</para>\r
- <para>The previous example results in the following SQL:</para>\r
-<programlisting>\r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou" ;\r
-</programlisting>\r
- </simplesect>\r
- <simplesect>\r
- <title>Fancier SELECT Clauses</title>\r
- <para>The previous example featured an array of column names. More generally, it featured an array of field specifications, and one kind of field specification is a column name. \r
- The other kind is a JSON object, with some combination of the following keys:</para>\r
- <itemizedlist>\r
- <listitem>\r
- <para><quote>column</quote> -- the column name (required).</para> \r
- </listitem>\r
- <listitem>\r
- <para><quote>alias</quote> -- used to define a column alias, which otherwise defaults to the column name.</para> \r
- </listitem>\r
- <listitem>\r
- <para><quote>aggregate</quote> -- takes a value of true or false. Don't worry about this one yet. It concerns the use of GROUP BY clauses, which we will examine \r
- later.</para> \r
- </listitem>\r
- <listitem>\r
- <para><quote>transform</quote> -- the name of an SQL function to be called.</para> \r
- </listitem>\r
- <listitem>\r
- <para><quote>result_field</quote> -- used with "transform"; specifies an output column of a function that returns multiple columns at a time.</para> \r
- </listitem>\r
- <listitem>\r
- <para><quote>params</quote> -- used with "transform"; provides a list of parameters for the function. They may be strings, numbers, or nulls.</para> \r
- </listitem> \r
- </itemizedlist> \r
- <para>This example assigns a different column alias:</para>\r
-<programlisting>\r
-{\r
- "from":"aou",\r
- "select": {\r
- "aou": [\r
- "id",\r
- { "column":"name", "alias":"org_name" }\r
- ]\r
- }\r
-}\r
-\r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "org_name"\r
-FROM\r
- actor.org_unit AS "aou" ;\r
-</programlisting>\r
- <para>In this case, changing the column alias doesn't accomplish much. But if we were joining to the actor.org_unit_type table, which also has a "name" column, we could \r
- use different aliases to distinguish them.</para>\r
- <para>The following example uses a function to raise a column to upper case:</para>\r
-<programlisting>\r
-{\r
- "from":"aou",\r
- "select": {\r
- "aou": [\r
- "id",\r
- { "column":"name", "transform":"upper" }\r
- ]\r
- }\r
-}\r
- \r
-SELECT\r
- "aou".id AS "id",\r
- upper("aou".name ) AS "name"\r
-FROM\r
- actor.org_unit AS "aou" ;\r
-</programlisting>\r
- <para>Here we take a substring of the name, using the <emphasis role="italics">params</emphasis> element to pass parameters:</para>\r
- <programlisting>\r
- {\r
- "from":"aou",\r
- "select": {\r
- "aou": [\r
- "id", {\r
- "column":"name",\r
- "transform":"substr",\r
- "params":[ 3, 5 ]\r
- }\r
- ]\r
- }\r
- }\r
- \r
- SELECT\r
- "aou".id AS "id",\r
- substr("aou".name,'3','5' ) AS "name"\r
- FROM\r
- actor.org_unit AS "aou" ;\r
- </programlisting>\r
- <para>The parameters specified with <emphasis role="italics">params</emphasis> are inserted after the applicable column (<emphasis role="italics">name</emphasis> in this case), \r
- which is always the first parameter. They are always passed as strings, i.e. enclosed in quotes, even if the JSON expresses them as numbers. PostgreSQL will ordinarily \r
- coerce them to the right type. However if the function name is overloaded to accept different types, PostgreSQL may invoke a function other than the one intended.</para>\r
- <para>Finally we call a fictitious function "frobozz" that returns multiple columns, where we want only one of them:</para>\r
-<programlisting>\r
-{\r
- "from":"aou",\r
- "select": {\r
- "aou": [\r
- "id", {\r
- "column":"name",\r
- "transform":"frobozz",\r
- "result_field":"zamzam"\r
- }\r
- ]\r
- }\r
-}\r
- \r
-SELECT\r
- "aou".id AS "id",\r
- (frobozz("aou".name ))."zamzam" AS "name"\r
-FROM\r
- actor.org_unit AS "aou" ;\r
-</programlisting>\r
- <para>The <emphasis role="italics">frobozz</emphasis> function doesn't actually exist, but json_query doesn't know that. The query won't fail until json_query tries to execute it in \r
- the database.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Things You Can't Do</title>\r
- <para>You can do some things in a SELECT clause with raw SQL (with psql, for example) that you can't do with a JSON query. Some of them matter and some of them don't.</para>\r
- <para>When you do a JOIN, you can't arrange the selected columns in any arbitrary sequence, because all of the columns from a given table must be grouped together. \r
- This limitation doesn't matter. The results are returned in the form of a data structure, which the client program can navigate however it likes.</para>\r
- <para>You can't select an arbitrary expression, such as "percentage / 100" or "last_name || ', ' || first_name". Most of the time this limitation doesn't matter either, because \r
- the client program can do these kinds of manipulations for itself. However, function calls may be a problem. You can't nest them, and you can't pass more than one column value \r
- to them (and it has to be the first parameter).</para> \r
- <para>You can't use a CASE expression. Instead, the client application can do the equivalent branching for itself.</para>\r
- <para>You can't select a subquery. In raw SQL you can do something like the following:</para>\r
-<programlisting>\r
-SELECT\r
- id,\r
- name,\r
- (\r
- SELECT name\r
- FROM actor.org_unit_type AS aout\r
- WHERE aout.id = aou.ou_type\r
- ) AS type_name\r
-FROM\r
- actor.org_unit AS aou;\r
-</programlisting>\r
- <para>This contrived example is not very realistic. Normally you would use a JOIN in this case, and that's what you should do in a JSON query. Other cases may not be so \r
- easy to solve.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>The WHERE Clause</title>\r
- <para>Most queries need a WHERE clause, as in this simple example:</para>\r
-<programlisting>\r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where": {\r
- "parent_ou":"3"\r
- }\r
-}\r
-</programlisting>\r
- <para>Like the SELECT clause, the WHERE clause gets its own entry in the top-level object of a JSON query. The key is <quote>where</quote>, and the associated value is either \r
- an object (as shown here) or an array (to be discussed a bit later). Each entry in the object is a separate condition.</para>\r
- <para>In this case, we use a special shortcut for expressing an equality condition. The column name is on the left of the colon, and the value to which we are equating it is on \r
- the right.</para>\r
- <para>Here's the resulting SQL:</para>\r
-<programlisting>\r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
- "aou".parent_ou = 3;\r
-</programlisting>\r
- <para>Like the SELECT clause, the generated WHERE clause qualifies each column name with the alias of the relevant table.</para>\r
- <para>If you want to compare a column to NULL, put <quote>null</quote> (without quotation marks) to the right of the colon instead of a literal value. The \r
- resulting SQL will include <quote>IS NULL</quote> instead of an equals sign.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Other Kinds of Comparisons</title>\r
- <para>Here's the same query (which generates the same SQL) without the special shortcut:</para>\r
-<programlisting>\r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where": {\r
- "parent_ou":{ "=":3 }\r
- }\r
-}\r
-</programlisting>\r
- <para>We still have an entry whose key is the column name, but this time the associated value is another JSON object. It must contain exactly one entry, \r
- with the comparison operator on the left of the colon, and the value to be compared on the right.</para>\r
- <para>The same syntax works for other kinds of comparison operators. For example:</para>\r
-<programlisting>\r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where": {\r
- "parent_ou":{ ">":3 }\r
- }\r
-}\r
-</programlisting>\r
- <para>...turns into:</para>\r
-<programlisting>\r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
- "aou".parent_ou > 3 ;\r
-</programlisting>\r
- <para>The condition '<quote>=</quote>:null' turns into IS NULL. Any other operator used with <quote>null</quote> turns into IS NOT NULL.</para>\r
- <para>You can use most of the comparison operators recognized by PostgreSQL:</para>\r
- <literallayout> \r
- = <> !=\r
- < > <= >=\r
- ~ ~* !~ !~*\r
- like ilike\r
- similar to\r
- </literallayout> \r
- <para>The only ones you can't use are <quote>is distinct from</quote> and <quote>is not distinct from</quote>.</para> \r
- </simplesect>\r
- <simplesect>\r
- <title>Custom Comparisons</title>\r
- <para>Here's a dirty little secret: json_query doesn't really pay much attention to the operator you supply. It merely checks to make sure that the operator doesn't contain \r
- any semicolons or white space, in order to prevent certain kinds of SQL injection. It also allows "similar to" as a special exception.</para>\r
- <para>As a result, you can slip an operator of your own devising into the SQL, so long as it doesn't contain any semicolons or white space, and doesn't create invalid syntax. \r
- Here's a contrived and rather silly example:</para>\r
-<programlisting>\r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where": {\r
- "parent_ou":{ "<2+":3 }\r
- }\r
-}\r
-</programlisting>\r
- <para>...which results in the following SQL:</para>\r
-<programlisting>\r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
- "aou".parent_ou <2+ 3;\r
-</programlisting>\r
- <para>It's hard to come up with a realistic case where this hack would be useful, but it could happen.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Comparing One Column to Another</title>\r
- <para>Here's how to put another column on the right hand side of a comparison:</para>\r
-<programlisting>\r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where": {\r
- "id": { ">": { "+aou":"parent_ou" } }\r
- }\r
-};\r
-</programlisting>\r
- <para>This syntax is similar to the previous examples, except that instead of comparing to a literal value, we compare to an object. This object has only a single entry, \r
- whose key is a table alias preceded by a leading plus sign. The associated value is the name of the column.</para>\r
- <para>Here's the resulting SQL:</para>\r
-<programlisting>\r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
-(\r
- "aou".id > ( "aou".parent_ou )\r
-);\r
-</programlisting>\r
- <para>The table alias must correspond to the appropriate table. Since json_query doesn't validate the choice of alias, it won't detect an invalid alias until it tries to \r
- execute the query. In this simple example there's only one table to choose from. The choice of alias is more important in a subquery or join.</para>\r
- <para>The leading plus sign, combined with a table alias, can be used in other situations to designate the table to which a column belongs. We shall defer a discussion of \r
- this usage to the section on joins.</para>\r
- </simplesect> \r
- <simplesect>\r
- <title>Testing Boolean Columns</title>\r
- <para>In SQL, there are several ways to test a boolean column such as actor.org_unit.opac_visible. The most obvious way is to compare it to true or false:</para>\r
-<programlisting>\r
-SELECT\r
- id\r
-FROM\r
- actor.org_unit\r
-WHERE\r
- opac_visible = true;\r
-</programlisting>\r
- <para>In a JSON query this approach doesn't work. If you try it, the "= true" test will turn into IS NULL. Don't do that. Instead, use a leading plus sign, as described in \r
- the preceding section, to treat the boolean column as a stand-alone condition:</para>\r
-<programlisting>\r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id" ] },\r
- "where": {\r
- "+aou":"opac_visible"\r
- }\r
-}\r
-</programlisting>\r
- <para>Result:</para>\r
-<programlisting>\r
-SELECT\r
- "aou".id AS "id"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
- "aou".opac_visible ;\r
-</programlisting>\r
- <para>If you need to test for falsity, then write a test for truth and negate it with the "-not" operator. We will discuss the "-not" operator later, but here's a preview:</para>\r
-<programlisting>\r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id" ] },\r
- "where": {\r
- "-not": {\r
- "+aou":"opac_visible"\r
- }\r
- }\r
-} \r
-\r
-SELECT\r
- "aou".id AS "id"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
- NOT ( "aou".opac_visible ); \r
-</programlisting>\r
- <para>You can also compare a boolean column directly to a more complex condition:</para>\r
-<programlisting>\r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id" ] },\r
- "where": {\r
- "opac_visible": {\r
- "=": { "parent_ou":{ ">":3 } }\r
- }\r
- }\r
-}\r
-</programlisting>\r
- <para>Here we compare a boolean column, not to a literal value, but to a boolean expression. The resulting SQL looks a little goofy, but it works:</para>\r
-<programlisting>\r
-SELECT\r
- "aou".id AS "id"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
- (\r
- "aou".opac_visible = ( "aou".parent_ou > 3 )\r
- );\r
-</programlisting>\r
- <para>In this case we compare the boolean column to a single simple condition. However you can include additional complications -- multiple conditions, IN lists, \r
- BETWEEN clauses, and other features as described below.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Multiple Conditions</title>\r
- <para>If you need multiple conditions, just add them to the "where" object, separated by commas:</para>\r
-<programlisting>\r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where": {\r
- "parent_ou":{ ">":3 },\r
- "id":{ "<>":7 }\r
- }\r
-}\r
-</programlisting>\r
- <para>The generated SQL connects the conditions with AND:</para>\r
-<programlisting>\r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
- "aou".parent_ou g 3\r
- AND "aou".id <> 7;\r
-</programlisting>\r
- <para>Later we will see how to use OR instead of AND.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Using Arrays</title>\r
- <para>Here's a puzzler. Suppose you need two conditions for the same column. How do you code them in the same WHERE clause? For example, suppose you want something like this:</para>\r
-<programlisting>\r
-SELECT\r
- id,\r
- name\r
-FROM\r
- actor.org_unit\r
-WHERE\r
- parent_ou > 3\r
- AND parent_ou <> 7;\r
-</programlisting>\r
- <para>You might try a WHERE clause like this:</para>\r
-<programlisting>\r
-"where": {\r
- "parent_ou":{ ">":3 },\r
- "parent_ou":{ "<>":7 }\r
- }\r
-</programlisting>\r
- <para>Nope. Won't work. According to JSON rules, two entries in the same object can't have the same key.</para>\r
- <para>After slapping yourself in the forehead, you try something a little smarter:</para>\r
-<programlisting>\r
-"where": {\r
- "parent_ou": {\r
- ">":3,\r
- "<>":7\r
- }\r
-}\r
-</programlisting>\r
- <para>Nice try, but that doesn't work either. Maybe it ought to work -- at least it's legal JSON -- but, no.</para>\r
- <para>Here's what works:</para>\r
-<programlisting>\r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where": [\r
- { "parent_ou":{ ">":3 } },\r
- { "parent_ou":{ "<>":7 } }\r
- ]\r
-}\r
-</programlisting>\r
- <para>We wrapped the two conditions into two separate JSON objects, and then wrapped those objects together into a JSON array. The resulting SQL looks like this:</para>\r
-<programlisting>\r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
- ( "aou".parent_ou > 3 )\r
-AND\r
- ( "aou".parent_ou <> 7 );\r
-</programlisting>\r
- <para>That's not quite what we were hoping for, because the extra parentheses are so ugly. But they're harmless. This will do.</para>\r
- <para>If you're in the mood, you can use arrays to as many parentheses as you like, even if there is only one condition inside:</para>\r
-<programlisting>\r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where":\r
- [[[[[[\r
- {\r
- "parent_ou":{ ">":3 }\r
- },\r
- ]]]]]]\r
-} \r
-</programlisting>\r
- <para>...yields:</para>\r
-<programlisting>\r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
- ( ( ( ( ( ( "aou".parent_ou > 3 ) ) ) ) ) );\r
-</programlisting>\r
- </simplesect>\r
- <simplesect>\r
- <title>How to OR</title>\r
- <para>By default, json_query combines conditions with AND. When you need OR, here's how to do it:</para> \r
-<programlisting>\r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where": {\r
- "-or": {\r
- "id":2,\r
- "parent_ou":3\r
- }\r
- }\r
-}\r
-</programlisting>\r
- <para>We use <quote>-or</quote> as the key, with the conditions to be ORed in an associated object. The leading minus sign is there to make sure that the operator isn't confused with a \r
- column name. Later we'll see some other operators with leading minus signs. In a couple of spots we even use plus signs.</para>\r
- <para>Here are the results from the above example:</para>\r
-<programlisting>\r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
- (\r
- "aou".id = 2\r
- OR "aou".parent_ou = 3\r
- );\r
-</programlisting>\r
- <para>The conditions paired with <quote>-or</quote> are linked by OR and enclosed in parentheses.</para>\r
- <para>Here's how to do the same thing using an array, except that it produces an extra layer of parentheses:</para>\r
-<programlisting>\r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where": {\r
- "-or": [\r
- { "id":2 },\r
- { "parent_ou":3 }\r
- ]\r
- }\r
-}\r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
- (\r
- ( "aou".id = 2 )\r
- OR ( "aou".parent_ou = 3 )\r
- );\r
-</programlisting>\r
- <para>It's possible, though not very useful, to have only a single condition subject to the <quote>-or</quote> operator. In that case, the condition appears by itself, since there's nothing \r
- to OR it to. This trick is another way to add an extraneous layer of parentheses.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Another way to AND</title>\r
- <para>You can also use the <quote>-and</quote> operator. It works just like <quote>-or</quote>, except that it combines conditions with AND instead of OR. Since AND is the default, we don't usually \r
- need a separate operator for it, but it's available.</para>\r
- <para>In rare cases, nothing else will do -- you can't include two conditions in the same list because of the duplicate key problem, but you can't combine them with \r
- arrays either. In particular, you might need to combine them within an expression that you're comparing to a boolean column (see the subsection above on Testing Boolean Columns).</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Negation with NOT</title>\r
- <para>The <quote>-not</quote> operator negates a condition or set of conditions. For example:</para>\r
-<programlisting>\r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where": {\r
- "-not": {\r
- "id":{ ">":2 },\r
- "parent_ou":3\r
- }\r
- }\r
-}\r
- \r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
- NOT\r
- (\r
- "aou".id > 2\r
- AND "aou".parent_ou = 3\r
- );\r
-</programlisting>\r
- <para>In this example we merely negate a combination of two comparisons. However the condition to be negated may be as complicated as it needs to be. Anything that can be \r
- subject to <quote>where</quote> can be subject to <quote>-not</quote>.</para>\r
- <para>In most cases you can achieve the same result by other means. However the <quote>-not</quote> operator is the only way to represent NOT BETWEEN \r
- (to be discussed later).</para> \r
- </simplesect>\r
- <simplesect>\r
- <title>EXISTS with Subqueries</title>\r
- <para>Two other operators carry a leading minus sign: <quote>-exists</quote> and its negation <quote>-not-exists</quote>. These operators apply to subqueries, which have the \r
- same format as a full query. For example:</para>\r
-<programlisting> \r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where": {\r
- "-exists": {\r
- "from":"asv",\r
- "select":{ "asv":[ "id" ] },\r
- "where": {\r
- "owner":7\r
- }\r
- }\r
- }\r
-}\r
- \r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
-EXISTS\r
- (\r
- SELECT "asv".id AS "id"\r
- FROM action.survey AS "asv"\r
- WHERE "asv".owner = 7\r
- );\r
-</programlisting>\r
- <para>This kind of subquery is of limited use, because its WHERE clause doesn't have anything to do with the main query. It just shuts down the main query altogether \r
- if it isn't satisfied.</para>\r
- <para>More typical is a correlated subquery, whose WHERE clause refers to a row from the main query. For example:</para>\r
-<programlisting> \r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where": {\r
- "-exists": {\r
- "from":"asv",\r
- "select":{ "asv":[ "id" ] },\r
- "where": {\r
- "owner":{ "=":{ "+aou":"id" }}\r
- }\r
- }\r
- }\r
-} \r
-</programlisting>\r
- <para>Note the use of <quote>+aou</quote> to qualify the id column in the inner WHERE clause.</para>\r
-<programlisting> \r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
- EXISTS\r
- (\r
- SELECT "asv".id AS "id"\r
- FROM action.survey AS "asv"\r
- WHERE ("asv".owner = ( "aou".id ))\r
- );\r
-</programlisting>\r
- <para>This latter example illustrates the syntax, but in practice, it would probably be more natural to use an IN clause with a subquery (to be discussed later).</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>BETWEEN Clauses</title>\r
- <para>Here's how to express a BETWEEN clause:</para>\r
-<programlisting> \r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id" ] },\r
- "where": {\r
- "parent_ou": { "between":[ 3, 7 ] }\r
- }\r
-}\r
-</programlisting>\r
- <para>The value associated with the column name is an object with a single entry, whose key is "between". The corresponding value is an array with exactly two values, defining the \r
- range to be tested.</para>\r
- <para>The range bounds must be either numbers or string literals. Although SQL allows them to be null, a null doesn't make sense in this context, because a null never matches \r
- anything. Consequently json_query doesn't allow them.</para>\r
- <para>The resulting SQL is just what you would expect:</para>\r
-<programlisting> \r
-SELECT\r
- "aou".id AS "id"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
- parent_ou BETWEEN '3' AND '7';\r
-</programlisting>\r
- </simplesect>\r
- <simplesect>\r
- <title>IN and NOT IN Lists</title>\r
- <para>There are two ways to code an IN list. One way is simply to include the list of values in an array:</para>\r
-<programlisting> \r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where": {\r
- "parent_ou": [ 3, 5, 7 ]\r
- }\r
-}\r
-</programlisting>\r
- <para>As with a BETWEEN clause, the values in the array must be numbers or string literals. Nulls aren't allowed. Here's the resulting SQL, which again is just what \r
- you would expect:</para>\r
-<programlisting> \r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
- "aou".parent_ou IN (3, 5, 7);\r
-</programlisting>\r
- <para>The other way is similar to the syntax shown above for a BETWEEN clause, except that the array may include any non-zero number of values:</para>\r
-<programlisting> \r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where": {\r
- "parent_ou": { "in": [ 3, 5, 7 ] }\r
- }\r
-}\r
-</programlisting>\r
- <para>This version results in the same SQL as the first one.</para>\r
- <para>For a NOT IN list, you can use the latter format, using the <quote>not in</quote> operator instead of <quote>in</quote>. Alternatively, you can use either format together with \r
- the <quote>-not</quote> operator.</para> \r
- </simplesect>\r
- <simplesect>\r
- <title>IN and NOT IN Clauses with Subqueries</title>\r
- <para>For an IN clause with a subquery, the syntax is similar to the second of the two formats for an IN list (see the previous subsection). The "in" or "not in" operator \r
- is paired, not with an array of values, but with an object representing the subquery. For example:</para>\r
-<programlisting> \r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where": {\r
- "id": {\r
- "in": {\r
- "from":"asv",\r
- "select":{ "asv":[ "owner" ] },\r
- "where":{ "name":"Voter Registration" }\r
- }\r
- }\r
- }\r
-}\r
-</programlisting>\r
- <para>The results:</para>\r
-<programlisting> \r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
- "aou".id IN\r
- (\r
- SELECT\r
- "asv".owner AS "owner"\r
- FROM\r
- action.survey AS "asv"\r
- WHERE\r
- "asv".name = 'Voter Registration'\r
- );\r
-</programlisting>\r
- <para>In SQL the subquery may select multiple columns, but in a JSON query it can select only a single column.</para>\r
- <para>For a NOT IN clause with a subquery, use the <quote>not in</quote> operator instead of <quote>in</quote>.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Comparing to a Function</title>\r
- <para>Here's how to compare a column to a function call:</para>\r
-<programlisting> \r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where": {\r
- "id":{ ">":[ "sqrt", 16 ] }\r
- }\r
-}\r
-</programlisting>\r
- <para>A comparison operator (<quote>></quote> in this case) is paired with an array. The first entry in the array must be a string giving the name of the function. The remaining parameters, \r
- if any, are the parameters. They may be strings, numbers, or nulls. The resulting SQL for this example:</para>\r
-<programlisting> \r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
- "aou".id > sqrt( '16' );\r
-</programlisting>\r
- <para>All parameters are passed as quoted strings -- even if, as in this case, they are really numbers.</para>\r
- <para>This syntax is somewhat limited in that the function parameters must be constants (hence the use of a silly example).</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Putting a Function Call on the Left</title>\r
- <para>In the discussion of the SELECT clause, we saw how you could transform the value of a selected column by passing it to a function. In the WHERE clause, you can \r
- use similar syntax to transform the value of a column before comparing it to something else.</para>\r
- <para>For example:</para>\r
-<programlisting> \r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where": {\r
- "name": {\r
- "=": {\r
- "transform":"upper",\r
- "value":"CARTER BRANCH"\r
- }\r
- }\r
- }\r
-}\r
-</programlisting>\r
- <para>The "transform" entry gives the name of the function that we will use on the left side of the comparison. The "value" entry designates the value on the right side \r
- of the comparison.</para>\r
-<programlisting> \r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
- upper("aou".name ) = 'CARTER BRANCH' ;\r
-</programlisting>\r
- <para>As in the SELECT clause, you can pass literal values or nulls to the function as additional parameters by using an array tagged as <quote>params</quote>:</para>\r
-<programlisting> \r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where": {\r
- "name": {\r
- "=": {\r
- "transform":"substr",\r
- "params":[ 1, 6 ],\r
- "value":"CARTER"\r
- }\r
- }\r
- }\r
-}\r
- \r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
- substr("aou".name,'1','6' ) = 'CARTER' ;\r
-</programlisting>\r
- <para>The first parameter is always the column name, qualified by the class name, followed by any additional parameters (which are always enclosed in quotes even if they \r
- are numeric).</para>\r
- <para>As in the SELECT clause: if the function returns multiple columns, you can specify the one you want by using a "result_field" entry (not shown here).</para>\r
- <para>If you leave out the "transform" entry (or misspell it), the column name will appear on the left without any function call. This syntax works, but it's more \r
- complicated than it needs to be.</para>\r
- </simplesect>\r
-\r
- <simplesect>\r
- <title>Putting Function Calls on Both Sides</title>\r
- <para>If you want to compare one function call to another, you can use the same syntax shown in the previous subsection -- except that the <quote>value</quote> entry carries an \r
- array instead of a literal value. For example:</para>\r
-<programlisting> \r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where": {\r
- "id": {\r
- ">": {\r
- "transform":"factorial",\r
- "value":[ "sqrt", 1000 ]\r
- }\r
- }\r
- }\r
-} \r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
- factorial("aou".id ) > sqrt( '1000' ) ;\r
-</programlisting>\r
- <para>The format for the right side function is similar to what we saw earlier, in the subsection Comparing to a Function. Note that there are two different formats \r
- for defining function calls:</para>\r
- <itemizedlist>\r
- <listitem>\r
- <para>For a function call to the left of the comparison, the function name is tagged as <quote>transform</quote>. The first parameter is always the relevant \r
- column name; additional parameters, if any, are in an array tagged as "params". The entry for <quote>result_field</quote>, if present, specifies a subcolumn.</para> \r
- </listitem>\r
- <listitem>\r
- <para>For a function call to the right of the comparison, the function name is the first entry in an array, together with any parameters. \r
- There's no way to specify a subcolumn.</para> \r
- </listitem>\r
- </itemizedlist> \r
- </simplesect>\r
- <simplesect>\r
- <title>Comparing a Function to a Condition</title>\r
- <para>So far we have seen two kinds of data for the <quote>value</quote> tag. A string or number translates to a literal value, and an array translates to a function call. \r
- The third possibility is a JSON object, which translates to a condition. For example:</para>\r
-<programlisting> \r
-{\r
- "from":"aou",\r
- "select": { "aou":[ "id", "name" ] },\r
- "where": {\r
- "id": {\r
- "=": {\r
- "value":{ "parent_ou":{ ">":3 } },\r
- "transform":"is_prime"\r
- }\r
- }\r
- }\r
-}\r
-</programlisting>\r
- <para>The function tagged as <quote>transform</quote> must return boolean, or else json_query will generate invalid SQL. The function used here, <quote>is_prime</quote>, \r
- is fictitious.</para>\r
-<programlisting> \r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-WHERE\r
-(\r
- is_prime("aou".id ) = ( "aou".parent_ou > 3 )\r
-);\r
-</programlisting>\r
- <para>If we left out the <quote>transform</quote> entry, json_query would compare the column on the left (which would to be boolean) to the condition on the right. The results are similar \r
- to those for a simpler format described earlier (see the subsection Testing Boolean Columns).</para>\r
- <para>In the example above we compared the boolean to a simple condition. However the expression on the right may include multiple conditions, IN lists, subqueries, \r
- and whatever other complications are necessary.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Things You Can't Do</title>\r
- <para>The WHERE clause is subject to some of the same limitations as the SELECT clause. However, in the WHERE clause these limitations are more limiting, because \r
- the client program can't compensate by doing some of the work for itself.</para>\r
- <para>You can't use arbitrary expressions in a WHERE condition, such as "WHERE id > parent_ou -- 3". In some cases you may be able to contrive a custom operator in order to \r
- fake such an expression. However this mechanism is neither very general nor very aesthetic.</para>\r
- <para>To the right of a comparison operator, all function parameters must be literals or null. You can't pass a column value, nor can you nest function calls.</para>\r
- <para>Likewise you can't include column values or arbitrary expressions in an IN list or a BETWEEN clause.</para>\r
- <para>You can't include null values in an IN list or a BETWEEN list, not that you should ever want to.</para>\r
- <para>As noted earlier: you can't use the comparison operators <quote>is distinct from</quote> or <quote>is not distinct from</quote>.</para>\r
- <para>Also as noted earlier: a subquery in an IN clause cannot select more than one column.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>JOIN clauses</title>\r
- <para>Until now, our examples have selected from only one table at a time. As a result, the FROM clause has been very simple -- just a single string containing \r
- the class name of the relevant table.</para>\r
- <para>When the FROM clause joins multiple tables, the corresponding JSON naturally gets more complicated.</para>\r
- <para>SQL provides two ways to define a join. One way is to list both tables in the FROM clause, and put the join conditions in the WHERE clause:</para>\r
-<programlisting> \r
-SELECT\r
- aou.id,\r
- aout.name\r
-FROM\r
- actor.org_unit aou,\r
- actor.org_unit_type aout\r
-WHERE\r
- aout.id = aou.ou_type;\r
-</programlisting>\r
- <para>The other way is to use an explicit JOIN clause:</para>\r
-<programlisting> \r
-SELECT\r
- aou.id,\r
- aout.name\r
-FROM\r
- actor.org_unit aou\r
- JOIN actor.org_unit_type aout\r
- ON ( aout.id = aou.ou_type );\r
-</programlisting>\r
- <para>JSON queries use only the second of these methods. The following example expresses the same query in JSON:</para>\r
-<programlisting> \r
-{\r
- "select": { "aou":[ "id" ], "aout":[ "name" ] },\r
- "from": {\r
- "aou":"aout"\r
- }\r
-}\r
-</programlisting>\r
- <para>First, let's review the SELECT clause. Since it selects rows from two different tables, the data for <quote>select</quote> includes two entries, one for each table.</para>\r
- <para>As for the FROM clause, it's no longer just a string. It's a JSON object, with exactly one entry. The key of this entry is the class name of the core table, i.e. \r
- the table named immediately after the FROM keyword. The data associated with this key contains the rest of the information about the join. In this simple example, \r
- that information consists entirely of a string containing the class name of the other table.</para>\r
- <para>So where is the join condition?</para>\r
- <para>It's in the IDL. Upon reading the IDL, json_query knows that actor.org_unit has a foreign key pointing to actor.org_unit_type, and builds a join condition accordingly:</para>\r
-<programlisting> \r
-SELECT\r
- "aou".id AS "id",\r
- "aout".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
- INNER JOIN actor.org_unit_type AS "aout"\r
- ON ( "aout".id = "aou".ou_type ) ;\r
-</programlisting>\r
- <para>In this case the core table is the child table, and the joined table is the parent table. We could just as well have written it the other way around:</para>\r
-<programlisting> \r
-{\r
- "select": { "aou":[ "id" ], "aout":[ "name" ] },\r
- "from": {\r
- "aout":"aou"\r
- }\r
-}\r
- \r
-SELECT\r
- "aou".id AS "id",\r
- "aout".name AS "name"\r
-FROM\r
- actor.org_unit_type AS "aout"\r
- INNER JOIN actor.org_unit AS "aou"\r
- ON ( "aou".ou_type = "aout".id ) ;\r
-</programlisting>\r
- </simplesect>\r
- <simplesect>\r
- <title>Specifying The Join Columns Explicitly</title>\r
- <para>While it's convenient to let json_query pick the join columns, it doesn't always work.</para>\r
- <para>For example, the actor.org_unit table has four different address ids, for four different kinds of addresses. Each of them is a foreign key to the actor.org_address table. \r
- Json_query can't guess which one you want if you don't tell it.</para>\r
- <para>(Actually it will try to guess. It will pick the first matching link that it finds in the IDL, which may or may not be the one you want.)</para>\r
- <para>Here's how to define exactly which columns you want for the join:</para>\r
-<programlisting> \r
-{\r
- "select": { "aou":[ "id" ], "aoa":[ "street1" ] },\r
- "from": {\r
- "aou": {\r
- "aoa": {\r
- "fkey":"holds_address",\r
- "field":"id"\r
- }\r
- }\r
- }\r
-}\r
-</programlisting>\r
- <para>Before, the table we were joining was represented merely by its class name. Now it's represented by an entry in a JSON object. The key of that entry is the \r
- class name, and the associated data is another layer of JSON object containing the attributes of the join.</para>\r
- <para>Later we'll encounter other kinds of join attributes. For now, the only attributes that we're looking at are the ones that identify the join columns: \r
- <quote>fkey</quote> and <quote>field</quote>. The hard part is remembering which is which:</para>\r
- <itemizedlist>\r
- <listitem>\r
- <para><quote>fkey</quote> identifies the join column from the left table;</para> \r
- </listitem>\r
- <listitem>\r
- <para><quote>field</quote> identifies the join column from the right table. </para> \r
- </listitem>\r
- </itemizedlist> \r
- <para>When there are only two tables involved, the core table is on the left, and the non-core table is on the right. In more complex queries neither table may be the \r
- core table.</para>\r
- <para>Here is the result of the preceding JSON:</para>\r
-<programlisting> \r
-SELECT\r
- "aou".id AS "id",\r
- "aoa".street1 AS "street1"\r
-FROM\r
- actor.org_unit AS "aou"\r
- INNER JOIN actor.org_address AS "aoa"\r
- ON ( "aoa".id = "aou".holds_address ) ;\r
-</programlisting>\r
- <para>In this example the child table is on the left and the parent table is on the right. We can swap the tables if we swap the join columns as well:</para>\r
-<programlisting> \r
-{\r
- "select": { "aou":[ "id" ], "aoa":[ "street1" ] },\r
- "from": {\r
- "aoa": {\r
- "aou": {\r
- "fkey":"id",\r
- "field":"holds_address"\r
- }\r
- }\r
- }\r
-}\r
- \r
-SELECT\r
- "aou".id AS "id",\r
- "aoa".street1 AS "street1"\r
-FROM\r
- actor.org_address AS "aoa"\r
- INNER JOIN actor.org_unit AS "aou"\r
- ON ( "aou".holds_address = "aoa".id ) ;\r
-</programlisting>\r
- <para>When you specify both of the join columns, json_query assumes that you know what you're doing. It doesn't check the IDL to confirm that the join makes sense. \r
- The burden is on you to avoid absurdities.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Specifying Only One Join Column</title>\r
- <para>We just saw how to specify both ends of a join. It turns out that there's a shortcut -- most of the time you only need to specify one end. Consider \r
- the following variation on the previous example:</para>\r
-<programlisting> \r
-{\r
- "select": { "aou":[ "id" ], "aoa":[ "street1" ] },\r
- "from": {\r
- "aoa": {\r
- "aou": {\r
- "field":"holds_address"\r
- }\r
- }\r
- }\r
-}\r
-</programlisting>\r
- <para>..which results in exactly the same SQL as before.</para>\r
- <para>Here we specified the join column from the child table, the column that is a foreign key pointing to another table. As long as that linkage is defined in the IDL, \r
- json_query can look it up and figure out what the corresponding column is in the parent table.</para>\r
- <para>However this shortcut doesn't work if you specify only the column in the parent table, because it would lead to ambiguities. Suppose we had specified the id \r
- column of actor.org_address. As noted earlier, there are four different foreign keys from actor.org_unit to actor.org_address, and json_query would have no way to guess \r
- which one we wanted.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Joining to Multiple Tables</title>\r
- <para>So far we have joined only two tables at a time. What if we need to join one table to two different tables?</para>\r
- <para>Here's an example:</para>\r
-<programlisting> \r
-{\r
- "select": { "aou":[ "id" ], "aout":[ "depth" ], "aoa":[ "street1" ] },\r
- "from": {\r
- "aou": {\r
- "aout":{},\r
- "aoa": {\r
- "fkey":"holds_address"\r
- }\r
- }\r
- }\r
-}\r
-</programlisting>\r
- <para>The first join, to actor.org_unit_type, is simple. We could have specified join columns, but we don't have to, because json_query will construct that join on the basis of \r
- what it finds in the IDL. Having no join attributes to specify, we leave that object empty.</para>\r
- <para>For the second join, to actor.org_address, we have to specify at least the join column in the child table, as discussed earlier. We could also have specified the join \r
- column from the parent table, but we don't have to, so we didn't.</para>\r
- <para>Here is the resulting SQL:</para>\r
-<programlisting> \r
-SELECT\r
- "aou".id AS "id",\r
- "aout".depth AS "depth",\r
- "aoa".street1 AS "street1"\r
-FROM\r
- actor.org_unit AS "aou"\r
- INNER JOIN actor.org_unit_type AS "aout"\r
- ON ( "aout".id = "aou".ou_type )\r
- INNER JOIN actor.org_address AS "aoa"\r
- ON ( "aoa".id = "aou".holds_address ) ;\r
-</programlisting>\r
- <para>Since there can be only one core table, the outermost object in the FROM clause can have only one entry, whose key is the class name of the core table. The next \r
- level has one entry for every table that's joined to the core table.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Nested Joins</title>\r
- <para>Let's look at that last query again. It joins three tables, and the core table is the one in the middle. Can we make one of the end tables the core table instead?</para>\r
- <para>Yes, we can:</para>\r
-<programlisting> \r
-{\r
- "select": { "aou":[ "id" ], "aout":[ "depth" ], "aoa":[ "street1" ] },\r
- "from": {\r
- "aoa": {\r
- "aou": {\r
- "field":"holds_address",\r
- "join": {\r
- "aout":{ "fkey":"ou_type" }\r
- }\r
- }\r
- }\r
- }\r
-}\r
-</programlisting>\r
- <para>The <quote>join</quote> attribute introduces another level of join. In this case "aou" is the left table for the nested join, and the right table for the original join. \r
- Here are the results:</para>\r
-<programlisting> \r
-SELECT\r
- "aou".id AS "id",\r
- "aout".depth AS "depth",\r
- "aoa".street1 AS "street1"\r
-FROM\r
- actor.org_address AS "aoa"\r
- INNER JOIN actor.org_unit AS "aou"\r
- ON ( "aou".holds_address = "aoa".id )\r
- INNER JOIN actor.org_unit_type AS "aout"\r
- ON ( "aout".id = "aou".ou_type ) ;\r
-</programlisting>\r
- </simplesect>\r
- <simplesect>\r
- <title>Outer Joins</title>\r
- <para>By default, json_query constructs an inner join. If you need an outer join, you can add the join type as an attribute of the join:</para>\r
- <para>Yes, we can:</para>\r
-<programlisting> \r
-{\r
- "select": { "aou":[ "id" ], "aoa":[ "street1" ] },\r
- "from": {\r
- "aoa": {\r
- "aou": {\r
- "field":"mailing_address",\r
- "type":"left"\r
- }\r
- }\r
- }\r
-}\r
-</programlisting>\r
- <para>Here is the resulting SQL for this example:</para>\r
-<programlisting> \r
-SELECT\r
- "aou".id AS "id",\r
- "aoa".street1 AS "street1"\r
-FROM\r
- actor.org_address AS "aoa"\r
- LEFT JOIN actor.org_unit AS "aou"\r
- ON ( "aou".mailing_address = "aoa".id ) ;\r
-</programlisting>\r
- </simplesect>\r
- <simplesect>\r
- <title>Referring to Joined Tables in the WHERE Clause</title>\r
- <para>In the WHERE clause of the generated SQL, every column name is qualified by a table alias, which is always the corresponding class name.</para>\r
- <para>If a column belongs to the core table, this qualification happens by default. If it belongs to a joined table, the JSON must specify what class name \r
- to use for an alias. For example:</para>\r
-<programlisting> \r
-{\r
- "select": { "aou":[ "id" ], "aout":[ "name" ] },\r
- "from": {\r
- "aout":"aou"\r
- },\r
- "where": {\r
- "+aou":{ "parent_ou":2 }\r
- }\r
-}\r
-</programlisting>\r
- <para>Note the peculiar operator <quote>+aou</quote> -- a plus sign followed by the relevant class name. This operator tells json_query to apply the specified class to the condition that \r
- follows. The result:</para>\r
-<programlisting> \r
-SELECT\r
- "aou".id AS "id",\r
- "aout".name AS "name"\r
-FROM\r
- actor.org_unit_type AS "aout"\r
- INNER JOIN actor.org_unit AS "aou"\r
- ON ( "aou".ou_type = "aout".id )\r
-WHERE\r
- ( "aou".parent_ou = 2 );\r
-</programlisting>\r
- <para>The plus-class operator may apply to multiple conditions:</para>\r
-<programlisting> \r
-{\r
- "select": { "aou":[ "id" ], "aout":[ "name" ] },\r
- "from": {\r
- "aout":"aou"\r
- },\r
- "where": {\r
- "+aou":{\r
- "parent_ou":2,\r
- "id":{ "<":42 }\r
- }\r
- }\r
-}\r
- \r
-SELECT\r
- "aou".id AS "id",\r
- "aout".name AS "name"\r
-FROM\r
- actor.org_unit_type AS "aout"\r
- INNER JOIN actor.org_unit AS "aou"\r
- ON ( "aou".ou_type = "aout".id )\r
-WHERE\r
- (\r
- "aou".parent_ou = 2\r
- AND "aou".id < 42\r
- );\r
-</programlisting>\r
- <para>For these artificial examples, it would have been simpler to swap the tables, so that actor.org_unit is the core table. Then you wouldn't need to go through any \r
- special gyrations to apply the right table alias. In a more realistic case, however, you might need to apply conditions to both tables. Just swapping the tables \r
- wouldn't solve the problem.</para>\r
- <para>You can also use a plus-class operator to compare columns from two different tables:</para>\r
-<programlisting> \r
-{\r
- "select": { "aou":[ "id" ], "aout":[ "name" ] },\r
- "from": {\r
- "aout":"aou"\r
- },\r
- "where": {\r
- "depth": { ">": { "+aou":"parent_ou" } }\r
- }\r
-}\r
- \r
-\r
-SELECT\r
- "aou".id AS "id",\r
- "aout".name AS "name"\r
-FROM\r
- actor.org_unit_type AS "aout"\r
- INNER JOIN actor.org_unit AS "aou"\r
- ON ( "aou".ou_type = "aout".id )\r
-WHERE\r
- (\r
- "aout".depth > ( "aou".parent_ou )\r
- );\r
-</programlisting>\r
- <para>Please don't expect that query to make any sense. It doesn't. But it illustrates the syntax.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Join Filters</title>\r
- <para>While the above approach certainly works, the special syntax needed is goofy and awkward. A somewhat cleaner solution is to include a condition in the JOIN clause:</para>\r
-<programlisting> \r
-{\r
- "select": { "aou":[ "id" ], "aout":[ "name" ] },\r
- "from": {\r
- "aout": {\r
- "aou": {\r
- "filter": {\r
- "parent_ou":2\r
- }\r
- }\r
- }\r
- }\r
-} \r
-\r
-SELECT\r
- "aou".id AS "id", "aout".name AS "name"\r
-FROM\r
- actor.org_unit_type AS "aout"\r
- INNER JOIN actor.org_unit AS "aou"\r
- ON ( "aou".ou_type = "aout".id\r
- AND "aou".parent_ou = 2 ) ;\r
-</programlisting>\r
- <para>By default, json_query uses AND to combine the <quote>filter</quote> condition with the original join condition. If you need OR, you can use the <quote>filter_op</quote> attribute to \r
- say so:</para>\r
-<programlisting> \r
-{\r
- "select": { "aou":[ "id" ], "aout":[ "name" ] },\r
- "from": {\r
- "aout": {\r
- "aou": {\r
- "filter": {\r
- "parent_ou":2\r
- },\r
- "filter_op":"or"\r
- }\r
- }\r
- }\r
-} \r
-\r
-SELECT\r
- "aou".id AS "id",\r
- "aout".name AS "name"\r
-FROM\r
- actor.org_unit_type AS "aout"\r
- INNER JOIN actor.org_unit AS "aou"\r
- ON ( "aou".ou_type = "aout".id\r
- OR "aou".parent_ou = 2 ) ;\r
-</programlisting>\r
- <para>If the data tagged by <quote>filter_op</quote> is anything but <quote>or</quote> (in upper, lower, or mixed case), json_query uses AND instead of OR.</para>\r
- <para>The condition tagged by <quote>filter</quote> may be much more complicated. In fact it accepts all the same syntax as the WHERE clause.</para>\r
- <para>Remember, though, that it all gets combined with the the original join condition with an AND, or with an OR if you so specify. If \r
- you're not careful, the result may be a confusing mixture of AND and OR at the same level.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Joining to a Subquery</title>\r
- <para>In SQL you can put a subquery in a FROM clause, and select from it as if it were a table. A JSON query has no way to do that directly. The IDL, however, \r
- can define a class as a subquery instead of as a table. When you SELECT from it, json_query inserts the corresponding subquery into the FROM clause. For example:</para>\r
-<programlisting> \r
-{\r
- "select":{ "iatc":[ "id", "dest", "copy_status" ] },\r
- "from": "iatc"\r
-}\r
-</programlisting>\r
- <para>There's nothing special-looking about this JSON, but json_query expands it as follows:</para>\r
-<programlisting> \r
-SELECT\r
- "iatc".id AS "id",\r
- "iatc".dest AS "dest",\r
- "iatc".copy_status AS "copy_status"\r
-FROM\r
- (\r
- SELECT t.*\r
- FROM\r
- action.transit_copy t\r
- JOIN actor.org_unit AS s\r
- ON (t.source = s.id)\r
- JOIN actor.org_unit AS d\r
- ON (t.dest = d.id)\r
- WHERE\r
- s.parent_ou <> d.parent_ou\r
- ) AS "iatc" ;\r
-</programlisting>\r
- <para>The <quote>iatc</quote> class is like a view, except that it's defined in the IDL instead of the database. In this case it provides a way to do a join that would otherwise be \r
- impossible through a JSON query, because it joins the same table in two different ways (see the next subsection).</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Things You Can't Do</title>\r
- <para>In a JOIN, as with other SQL constructs, there are some things that you can't do with a JSON query.</para>\r
- <para>In particular, you can't specify a table alias, because the table alias is always the class name. As a result:</para>\r
- <itemizedlist>\r
- <listitem>\r
- <para>You can't join a table to itself. For example, you can't join actor.org_unit to itself in order to select the name of the parent for every org_unit.</para> \r
- </listitem>\r
- <listitem>\r
- <para>You can't join to the same table in more than one way. For example, you can't join actor.org_unit to actor.org_address through four different foreign \r
- keys, to get four kinds of addresses in a single query.</para> \r
- </listitem>\r
- </itemizedlist> \r
- <para>The only workaround is to perform the join in a view, or in a subquery defined in the IDL as described in the previous subsection.</para>\r
- <para>Some other things, while not impossible, require some ingenuity in the use of join filters.</para>\r
- <para>For example: by default, json_query constructs a join condition using only a single pair of corresponding columns. As long as the database is designed accordingly, \r
- a single pair of columns will normally suffice. If you ever need to join on more than one pair of columns, you can use join filters for the extras.</para> \r
- <para>Likewise, join conditions are normally equalities. In raw SQL it is possible (though rarely useful) to base a join on an inequality, or to use a function call in a join \r
- condition, or to omit any join condition in order to obtain a Cartesian product. If necessary, you can devise such unconventional joins by combining the normal join \r
- conditions with join filters.</para>\r
- <para>For example, here's how to get a Cartesian product:</para>\r
-<programlisting> \r
-{\r
- "select": { "aou":[ "id" ], "aout":[ "name" ] },\r
- "from": {\r
- "aout": {\r
- "aou": {\r
- "filter": {\r
- "ou_type":{ "<>": { "+aout":"id" } }\r
- },\r
- "filter_op":"or"\r
- }\r
- }\r
- }\r
-}\r
- \r
-\r
-SELECT\r
- "aou".id AS "id",\r
- "aout".name AS "name"\r
-FROM\r
- actor.org_unit_type AS "aout"\r
- INNER JOIN actor.org_unit AS "aou"\r
- ON\r
- (\r
- "aou".ou_type = "aout".id\r
- OR ("aou".ou_type <> ( "aout".id ))\r
- ) ;\r
-</programlisting>\r
- <para>Yes, it's ugly, but at least you're not likely to do it by accident.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Selecting from Functions</title>\r
- <para>In SQL, you can put a function call in the FROM clause. The function may return multiple columns and multiple rows. Within the query, the function behaves like a table.</para>\r
- <para>A JSON query can also select from a function:</para>\r
-<programlisting> \r
-{\r
- "from": [ "actor.org_unit_ancestors", 5 ]\r
-}\r
-</programlisting>\r
- <para>The data associated with <quote>from</quote> is an array instead of a string or an object. The first element in the array specifies the name of the function. Subsequent elements, \r
- if any, supply the parameters of the function; they must be literal values or nulls.</para>\r
- <para>Here is the resulting query:</para>\r
-<programlisting> \r
-SELECT *\r
-FROM\r
- actor.org_unit_ancestors( '5' ) AS "actor.org_unit_ancestors" ;\r
-</programlisting>\r
- <para>In a JSON query this format is very limited, largely because the IDL knows nothing about the available functions. You can't join the function to a table or to \r
- another function. If you try to supply a SELECT list or a WHERE clause, json_query will ignore it. The generated query will always select every column, via a wild card asterisk, \r
- from every row.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>The ORDER BY Clause</title>\r
- <para>In most cases you can encode an ORDER BY clause as either an array or an object. Let's take a simple example and try it both ways. First the array:</para>\r
-<programlisting> \r
-{\r
- "select":{ "aou":[ "name" ] },\r
- "from": "aou",\r
- "order_by": [\r
- { "class":"aou", "field":"name" }\r
- ]\r
-}\r
-</programlisting>\r
- <para>Now the object:</para>\r
-<programlisting> \r
-{\r
- "select":{ "aou":[ "name" ] },\r
- "from": "aou",\r
- "order_by": {\r
- "aou":{ "name":{} }\r
- }\r
-}\r
-</programlisting>\r
- <para>The results are identical from either version:</para>\r
-<programlisting> \r
-SELECT\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-ORDER BY\r
- "aou".name;\r
-</programlisting>\r
- <para>The array format is more verbose, but as we shall see, it is also more flexible. It can do anything the object format can do, plus some things that the object \r
- format can't do.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>ORDER BY as an Array</title>\r
- <para>In the array format, each element of the array is an object defining one of the sort fields. Each such object must include at least two tags:</para>\r
- <itemizedlist>\r
- <listitem>\r
- <para>The <quote>class</quote> tag provides the name of the class, which must be either the core class or a joined class.</para> \r
- </listitem>\r
- <listitem>\r
- <para>The <quote>field</quote> tag provides the field name, corresponding to one of the columns of the class.</para> \r
- </listitem>\r
- </itemizedlist> \r
- <para>If you want to sort by multiple fields, just include a separate object for each field.</para>\r
- <para>If you want to sort a field in descending order, add a <quote>direction</quote> tag:</para>\r
-<programlisting> \r
-{\r
- "select":{ "aou":[ "name" ] },\r
- "from": "aou",\r
- "order_by": [\r
- {\r
- "class":"aou",\r
- "field":"name",\r
- "transform":"upper"\r
- }\r
- ]\r
-}\r
- \r
-\r
-SELECT\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-ORDER BY\r
- upper("aou".name );\r
-</programlisting>\r
- <para>If you need additional parameters for the function, you can use the <quote>params</quote> tag to pass them:</para>\r
-<programlisting> \r
-{\r
- "select":{ "aou":[ "name" ] },\r
- "from": "aou",\r
- "order_by": [\r
- {\r
- "class":"aou",\r
- "field":"name",\r
- "transform":"substr",\r
- "params":[ 1, 8 ]\r
- }\r
- ]\r
-}\r
-</programlisting>\r
- <para>The additional parameters appear as elements in an array. They may be numbers, strings, or nulls.</para>\r
-<programlisting> \r
-SELECT\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-ORDER BY\r
- substr("aou".name,'1','8' );\r
-</programlisting>\r
- <para>As we have seen elsewhere, all literal values are passed as quoted strings, even if they are numbers.</para>\r
- <para>If the function returns multiple columns, you can use the <quote>result_field</quote> tag to indicate which one you want (not shown).</para>\r
- </simplesect>\r
-\r
- <simplesect>\r
- <title>ORDER BY as an Object</title>\r
- <para>When you encode the ORDER BY clause as an object, the keys of the object are class names. Each class must be either the core class or a joined class. The data for \r
- each class can be either an array or another layer of object. Here's an example with one of each:</para>\r
-<programlisting> \r
-{\r
- "select":{ "aout":"id", "aou":[ "name" ] },\r
- "from": { "aou":"aout" },\r
- "order_by": {\r
- "aout":[ "id" ],\r
- "aou":{ "name":{ "direction":"desc" } }\r
- }\r
-}\r
-</programlisting>\r
- <para>For the <quote>aout</quote> class, the associated array is simply a list of field names (in this case, just one). Naturally, each field must reside in the class with which \r
- it is associated.</para>\r
- <para>However, a list of field names provides no way to specify the direction of sorting, or a transforming function. You can add those details only if the class \r
- name is paired with an object, as in the example for the "aou" class. The keys for such an object are field names, and the associated tags define other details.</para>\r
- <para>In this example, we use the <quote>direction"</quote> tag to specify that the name field be sorted in descending order. This tag works the same way here as described earlier. \r
- If the associated string starts with "D" or "d", the sort will be descending; otherwise it will be ascending.</para>\r
- <para>Here is the resulting SQL:</para>\r
-<programlisting> \r
-SELECT\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
- INNER JOIN actor.org_unit_type AS "aout"\r
- ON ( "aout".id = "aou".ou_type )\r
-ORDER BY\r
- "aout".id,\r
- "aou".name DESC;\r
-</programlisting>\r
-<programlisting>\r
-{\r
- "select":{ "aou":[ "name", "id" ] },\r
- "from": "aou",\r
- "order_by": {\r
- "aou":{\r
- "name":{ "transform":"substr", "params":[ 1, 8 ] }\r
- }\r
- }\r
-} \r
-\r
-SELECT\r
- "aou".name AS "name",\r
- "aou".id AS "id"\r
-FROM\r
- actor.org_unit AS "aou"\r
-ORDER BY\r
- substr("aou".name,'1','8' );\r
-</programlisting>\r
- </simplesect>\r
- <simplesect>\r
- <title>Things You Can't Do</title>\r
- <para>If you encode the ORDER BY clause as an object, you may encounter a couple of restrictions.</para>\r
- <para>Because the key of such an object is the class name, all the fields from a given class must be grouped together. You can't sort by a column from one table, followed by \r
- a column from another table, followed by a column from the first table. If you need such a sort, you must encode the ORDER BY clause in the array format, which suffers \r
- from no such restrictions.</para>\r
- <para>For similar reasons, with an ORDER BY clause encoded as an object, you can't reference the same column more than once. Although such a sort may seem perverse, \r
- there are situations where it can be useful, provided that the column is passed to a transforming function.</para>\r
- <para>For example, you might want a case-insensitive sort, except that for any given letter you want lower case to sort first. For example, you want <quote>diBona</quote> to sort \r
- before <quote>Dibona</quote>. Here's a way to do that, coding the ORDER BY clause as an array:</para>\r
-<programlisting> \r
-{\r
- "select":{ "au":[ "family_name", "id" ] },\r
- "from": "au",\r
- "order_by": [\r
- { "class":"au", "field":"family_name", "transform":"upper" },\r
- { "class":"au", "field":"family_name" }\r
- ]\r
-}\r
-SELECT\r
- "au".family_name AS "family_name",\r
- "au".id AS "id"\r
-FROM\r
- actor.usr AS "au"\r
-ORDER BY\r
- upper("au".family_name ),\r
- "au".family_name;\r
-</programlisting>\r
- <para>Such a sort is not possible where the ORDER BY clause is coded as an object.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>The GROUP BY Clause</title>\r
- <para>A JSON query has no separate construct to define a GROUP BY clause. Instead, the necessary information is distributed across the SELECT clause. However, \r
- the way it works is a bit backwards from what you might expect, so pay attention.</para>\r
- <para>Here's an example:</para>\r
-<programlisting> \r
-{\r
- "select": {\r
- "aou": [\r
- { "column":"parent_ou" },\r
- { "column":"name", "transform":"max", "aggregate":true }\r
- ]\r
- },\r
- "from": "aou"\r
-}\r
-</programlisting>\r
- <para>The <quote>transform</quote> tag is there just to give us an excuse to do a GROUP BY. What's important to notice is the <quote>aggregate</quote> tag.</para>\r
- <para>Here's the resulting SQL:</para>\r
-<programlisting> \r
-SELECT\r
- "aou".parent_ou AS "parent_ou",\r
- max("aou".name ) AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-GROUP BY\r
- 1;\r
-</programlisting>\r
- <para>The GROUP BY clause references fields from the SELECT clause by numerical reference, instead of by repeating them. Notice that the field it references, \r
- parent_ou, is the one that doesn't carry the <quote>aggregate</quote> tag in the JSON.</para>\r
- <para>Let's state that more generally. The GROUP BY clause includes only the fields that do not carry the <quote>aggregate</quote> tag (or that carry it with a value of false).</para>\r
- <para>However, that logic applies only when some field somewhere does carry the <quote>aggregate</quote> tag, with a value of true. If there is no <quote>aggregate</quote> tag, or \r
- it appears only with a value of false, then there is no GROUP BY clause.</para>\r
- <para>If you really want to include every field in the GROUP BY clause, don't use <quote>aggregate</quote>. Use the <quote>distinct</quote> tag, as described in the next section.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>The DISTINCT Clause</title>\r
- <para>JSON queries don't generate DISTINCT clauses. However, they can generate GROUP BY clauses that include every item from the SELECT clause. The effect is the same as \r
- applying DISTINCT to the entire SELECT clause.</para>\r
- <para>For example:</para>\r
-<programlisting> \r
-{\r
- "select": {\r
- "aou": [\r
- "parent_ou",\r
- "ou_type"\r
- ]\r
- },\r
- "from":"aou",\r
- "distinct":"true"\r
-}\r
-</programlisting>\r
- <para>Note the <quote>distinct</quote> entry at the top level of the query object, with a value of <quote>true</quote>.</para>\r
-<programlisting> \r
-SELECT\r
- "aou".parent_ou AS "parent_ou",\r
- "aou".ou_type AS "ou_type"\r
-FROM\r
- actor.org_unit AS "aou"\r
-GROUP BY\r
- 1, 2;\r
-</programlisting>\r
- <para>The generated GROUP BY clause references every column in the SELECT clause by number.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>The HAVING Clause</title>\r
- <para>For a HAVING clause, add a <quote>having</quote> entry at the top level of the query object. For the associated data, you can use all the same syntax \r
- that you can use for a WHERE clause.</para>\r
- <para>Here's a simple example:</para>\r
-<programlisting> \r
-{\r
- "select": {\r
- "aou": [\r
- "parent_ou", {\r
- "column":"id",\r
- "transform":"count",\r
- "alias":"id_count",\r
- "aggregate":"true"\r
- }\r
- ]\r
- },\r
- "from":"aou",\r
- "having": {\r
- "id": {\r
- ">" : {\r
- "transform":"count",\r
- "value":6\r
- }\r
- }\r
- }\r
-}\r
-</programlisting>\r
- <para>We use the <quote>aggregate</quote> tag in the SELECT clause to give us a GROUP BY to go with the HAVING. Results:</para>\r
-<programlisting> \r
-SELECT\r
- "aou".parent_ou AS "parent_ou",\r
- count("aou".id ) AS "id_count"\r
-FROM\r
- actor.org_unit AS "aou"\r
-GROUP BY\r
- 1\r
-HAVING\r
- count("aou".id ) > 6 ;\r
-</programlisting>\r
- <para>In raw SQL we could have referred to <quote>count( 1 )</quote>. But since JSON queries cannot encode arbitrary expressions, we applied the count function to a column that \r
- cannot be null.</para>\r
- </simplesect>\r
- <simplesect>\r
- <title>The LIMIT and OFFSET Clauses</title>\r
- <para>To add an LIMIT or OFFSET clause, add an entry to the top level of a query object. For example:</para>\r
-<programlisting> \r
-{\r
- "select": {\r
- "aou": [ "id", "name" ]\r
- },\r
- "from":"aou",\r
- "order_by": { "aou":[ "id" ] },\r
- "offset": 7,\r
- "limit": 42\r
-}\r
-</programlisting>\r
- <para>The data associated with <quote>offset</quote> and <quote>limit</quote> may be either a number or a string, but if it's a string, it should have a number inside.</para>\r
- <para>Result:</para>\r
-<programlisting> \r
-SELECT\r
- "aou".id AS "id",\r
- "aou".name AS "name"\r
-FROM\r
- actor.org_unit AS "aou"\r
-ORDER BY\r
- "aou".id\r
-LIMIT 42 \r
-OFFSET 7;\r
-</programlisting>\r
- </simplesect>\r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<chapter xml:id="supercat" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
- <info>\r
- <title>SuperCat</title>\r
- </info>\r
- <section xml:id="usingsupercat">>\r
- <title>Using SuperCat</title> \r
- <indexterm><primary>SuperCat</primary></indexterm>\r
- <para>SuperCat allows Evergreen record and information retrieval from a web browser using a based on a number of open web standards and formats. The following record types are \r
- supported:</para>\r
- <itemizedlist>\r
- <listitem>isbn</listitem>\r
- <listitem>metarecord</listitem>\r
- <listitem>record</listitem>\r
- </itemizedlist>\r
- <simplesect>\r
- <title>Return a list of ISBNs for related records</title>\r
- <indexterm><primary>SuperCat</primary><secondary>ISBNs</secondary></indexterm>\r
- <para>Similar to the OCLC xISBN service, Evergreen can return a list of related records based on its oISBN algorithm:</para>\r
- <para><uri>http://<hostname>/opac/extras/osibn/<ISBN></uri></para>\r
- <para>For example, <uri>http://dev.gapines.org/opac/extras/oisbn/0439136350</uri> returns:</para>\r
-<screen>\r
-<idlist metarecord="302670">\r
-<isbn record="250060">0790783525</isbn>\r
-<isbn record="20717">0736691316</isbn>\r
-<isbn record="250045">0790783517</isbn>\r
-<isbn record="199060">9500421151</isbn>\r
-<isbn record="250061">0790783495</isbn>\r
-<isbn record="154477">0807286028</isbn>\r
-<isbn record="227297">1594130027</isbn>\r
-<isbn record="26682">0786222743</isbn>\r
-<isbn record="17179">0807282316</isbn>\r
-<isbn record="34885">0807282316</isbn>\r
-<isbn record="118019">8478885196</isbn>\r
-<isbn record="1231">0738301477</isbn>\r
-</idlist>\r
-</screen>\r
- </simplesect>\r
- <simplesect>\r
- <title>Return records</title>\r
- <indexterm><primary>SuperCat</primary><secondary>records</secondary></indexterm>\r
- <para>SuperCat can return records and metarecords in many different formats (see <xref linkend='supportedsupercatformats' /></para>\r
- <para><uri>http://<hostname>/opac/extras/supercat/retrieve/<format>/<record-type>/<bib-ID></uri></para>\r
- <para>For example, <uri>http://dev.gapines.org/opac/extras/supercat/retrieve/mods/record/555</uri> returns:</para>\r
-<screen>\r
-<mods:modsCollection version="3.0">\r
- <mods:mods xsi:schemaLocation="http://www.loc.gov/mods/ http://www.loc.gov/standards/mods/mods.xsd">\r
- <titleInfo>\r
- <title>More Brer Rabbit stories /</title>\r
- </titleInfo>\r
- <typeOfResource>text</typeOfResource>\r
- <originInfo>\r
- <place>\r
- <code authority="marc">xx</c0de>\r
- </place>\r
- <publisher>Award Publications</publisher>\r
- <dateIssued>c1982, 1983</dateIssued>\r
- <dateIssued encoding="marc" point="start">1983</dateIssued>\r
- <dateIssued encoding="marc" point="end">1982</dateIssued>\r
- <issuance>monographic</issuance>\r
- </originInfo>\r
- <language authority="iso639-2b">eng</language>\r
- <physicalDescription>\r
- <form authority="marcform">print</form>\r
- <extent>unp. : col. ill.</extent>\r
- </physicalDescription>\r
- <note type="statement of responsibility">ill. by Rene Cloke.</note>\r
- <subject authority="lcsh">\r
- <topic>Animals</topic>\r
- <topic>Fiction</topic>\r
- </subject>\r
- <subject authority="lcsh">\r
- <topic>Fables</topic>\r
- </subject>\r
- <recordInfo>\r
- <recordContentSource>(BRO)</recordContentSource>\r
- <recordCreationDate encoding="marc">930903</recordCreationDate>\r
- <recordChangeDate encoding="iso8601">19990703024637.0</recordChangeDate>\r
- <recordIdentifier>PIN60000007 </recordIdentifier>\r
- </recordInfo>\r
- </mods:mods>\r
-</mods:modsCollection>\r
-</screen>\r
- </simplesect>\r
- <simplesect>\r
- <title>Return a feed of recently edited or created records</title>\r
- <indexterm><primary>SuperCat</primary><secondary>recent records</secondary></indexterm>\r
- <para>SuperCat can return feeds of recently edited or created authority and bibliographic records:</para>\r
- <para><uri>http://<hostname>/opac/extras/feed/freshmeat/<feed-type>/[authority|biblio]/[import|edit]/<limit>/<date></uri></para>\r
- <para>The limit records imported or edited following the supplied date will be returned. If you do not supply a date, then the most recent limit records will be returned.</para>\r
- <para>If you do not supply a limit, then up to 10 records will be returned.</para> \r
- <para>Feed-type can be one of atom, html, htmlholdings, marcxml, mods, mods3, or rss2.</para> \r
- <para><uri>For example, http://dev.gapines.org/opac/extras/feed/freshmeat/atom/biblio/import/10/2008-01-01</uri></para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Browse records</title>\r
- <para>SuperCat can browse records in HTML and XML formats:</para>\r
- <para><uri>http://<hostname>/opac/extras/supercat/browse/<format>/call_number/<org_unit>/<call_number></uri></para>\r
- <para>For example, <uri>http://dev.gapines.org/opac/extras/browse/xml/call_number/-/GV</uri> returns:</para>\r
-<screen>\r
-<hold:volumes xmlns:hold='http://open-ils.org/spec/holdings/v1'>\r
- <hold:volume id="tag:open-ils.org,2008:asset-call_number/130607" lib="FRRLS-FA" label="GUTCHEON BETH">\r
- <act:owning_lib id="tag:open-ils.org,2008:actor-org_unit/111" name="Fayette County Public Library"/>\r
- <record xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/ \r
- standards/marcxml/schema/MARC21slim.xsd"\r
- id="tag:open-ils.org,2008:biblio-record_entry/21669/FRRLS-FA">\r
- <leader>09319pam a2200961 a 4500</leader>\r
- <controlfield tag="001"/>\r
- <controlfield tag="005">20000302124754.0</controlfield>\r
- <controlfield tag="008">990817s2000 nyu 000 1 eng </controlfield>\r
- <datafield tag="010" ind1=" " ind2=" ">\r
- <subfield code="a"> 99045936</subfield>\r
- </datafield>\r
- ..\r
- </record>\r
- <record>\r
- ..\r
- </record>\r
- </hold:volume>\r
-</hold:volumes> \r
-</screen>\r
- </simplesect>\r
- <simplesect xml:id="supportedsupercatformats">\r
- <title>Supported formats</title>\r
- <indexterm><primary>SuperCat</primary><secondary>formats</secondary></indexterm>\r
- <para>SuperCat maintains a list of supported formats for records and metarecords:</para>\r
- <para><uri>http://<hostname>/opac/extras/supercat/formats/<record-type></uri></para>\r
- <para>For example, <uri>http://dev.gapines.org/opac/extras/supercat/formats/record</uri> returns:</para>\r
-<screen>\r
-<formats>\r
- <format>\r
- <name>opac</name>\r
- <type>text/html</type>\r
- </format>\r
- <format>\r
- <name>htmlholdings</name>\r
- <type>text/html</type>\r
- </format>\r
-...\r
-</screen>\r
- </simplesect>\r
- </section>\r
- <section xml:id="addingsupercatformats">\r
- <title>Adding new SuperCat Formats</title>\r
- <indexterm><primary>SuperCat</primary><secondary>formats</secondary><tertiary>adding</tertiary></indexterm>\r
- <para>Adding SuperCat formats requires experience editing XSL files and familiarity with XML and Perl.</para> \r
- <para>SuperCat web services are based on the OpenSRF service, <systemitem class="service">>open-ils.supercat</systemitem>.</para> \r
- <para>Developers are able to add new formats by adding the <emphasis>xsl</emphasis> stylesheet for the format. By default, the location of the stylesheets is <filename class="directory">/openils/var/xsl/</filename>. You must also add the feed to the perl \r
- modules <filename>openils/lib/perl5/OpenILS/WWW/SuperCat/feed.pm</filename> and <filename>openils/lib/perl5/OpenILS/WWW/SuperCat.pm</filename>. An Evergreen restart is \r
- required for the feed to be activated.</para>\r
- <tip><para>Use an existing xsl stylesheet and Perl module entry as a template for your new format.</para></tip>\r
- </section>\r
- <section xml:id="editingsupercatformats">\r
- <title>Customizing SuperCat Formats</title>\r
- <indexterm><primary>SuperCat</primary><secondary>formats</secondary><tertiary>customizing</tertiary></indexterm> \r
- <para>Editing SuperCat formats requires experience editing XSL files and familiarity with XML..</para> \r
- <para>It is possible to customize existing supercat formats using XSL stylesheets. You are able to change the content to be displayed and the design of the pages.</para> \r
- <para>In order to change the display of a specific format, edit the corresponding XSL file(s) for the particular format. The default location for the XSL stylesheets is \r
- <filename class="directory">/openils/var/xsl/</filename>. </para>\r
- </section>\r
-</chapter>\r
-\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<chapter xml:id="releasenotes" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
- <chapterinfo>\r
- <title>2.0 Feature List</title>\r
- </chapterinfo>\r
- \r
- \r
- <simplesect>\r
- <title>Circulation</title>\r
- <simplesect>\r
- <title>Patron Registration Enhancements</title>\r
- <itemizedlist>\r
- <listitem>Zip code information can be added to a local table which will pre-populate the City/State fields during patron registration. </listitem>\r
- <listitem>Added the ability to delete patrons by anonymizing the patron's personally identifiable data and purging the related data from other tables \r
- without destroying information important to the integrity of the database as a whole (does not delete the actor.usr row). </listitem>\r
- <listitem>Supports the ability to merge patrons; when it is determined that more than one account exists for a single patron. There is an interface for \r
- side-by-side comparison of the records; ability to delete addresses on merged accounts, delete cards and deactivate cards. Patrons with a status of in collections \r
- are not eligible for merging. </listitem>\r
- <listitem>Added quick links for staff to copy and paste patron address information. Information will paste in a standard mailing format. </listitem>\r
- <listitem>Patrons with an address alert (invalid/bad address) will be displayed at the top of a duplicates list. </listitem>\r
- <listitem>Patrons may create library accounts through the OPAC. These are set as pending until they can be confirmed by staff. The backend support for this \r
- is done.</listitem>\r
- <listitem>The system recognizes certain categories of patrons like Card Canceled, Deceased, etc. and will not place holds for these categories. </listitem>\r
- \r
- <listitem>The patron record screen obscures certain information which can be considered sensitive. </listitem>\r
- <listitem>Patrons may create library accounts through the OPAC. These are set as pending until they can be confirmed by staff. The backend support for this \r
- is done.</listitem>\r
- <listitem>Evergreen has the ability to automatically enter date, user, and location in messages and notes.</listitem>\r
- </itemizedlist> \r
- </simplesect>\r
- <simplesect>\r
- <title>Item Checkout enhancements</title>\r
- <itemizedlist>\r
- <listitem>During check-out, the patron's fines list appears first if there is a balance. If there is an alert, the alert page will show first, then fines \r
- screen. </listitem>\r
- <listitem>Evergreen has the ability to track hourly checkout stats. Self-check now operates by workstation and it's possible to gather statistics for checkouts \r
- between staff workstations and self-check workstations. (There is a workstation registration wizard built into the self-check UI.) </listitem>\r
- <listitem>Audible cue support, for successful and unsuccessful check-out, at self check-out stations has been added. This is customizable at the database level.</listitem>\r
- <listitem>Evergreen has fast-add capability. During check-out, if an item is found not to be cataloged,you can pre-cat the item quickly, we've added other field \r
- such as library, ISBN and circ modifier to this pre-cat. </listitem>\r
- <listitem>The system supports sets or kits of items and has the ability to display the number of items and a list of descriptions. </listitem>\r
- <listitem>Evergreen allows patrons to renew a title as long as they have not exceeded the allowed number of renewals and there are more available items \r
- than there are unfrozen holds. This is an administration setting. </listitem>\r
- </itemizedlist> \r
- </simplesect>\r
- <simplesect>\r
- <title>Self Check module enhancements</title>\r
- <itemizedlist>\r
- <listitem>In self check and SC, if a staff member checks out an item to a patron that is already checked out to that patron, the item will simply renew. This does \r
- have configurable age-based parameters to prevent a double scan at checkout resulting in a renewal. </listitem>\r
- <listitem>For self check receipts, receipts include the same information for renewal as checkouts and includes notes on items that failed to renew. </listitem>\r
- <listitem>In the self-check UI, patrons can view holds and patron position vs. the number of circulating copies. </listitem>\r
- <listitem>The self check-out station displays holds ready for pickup, then removes each hold as the item is checked out. </listitem>\r
- <listitem>Evergreen supports the ability to pay fines with a credit card at self check-out stations. This requires the library to have a merchant account with a credit \r
- card processor like Paypal. The current supported processors include Authorize.net and Paypal.</listitem>\r
- </itemizedlist> \r
- </simplesect>\r
- <simplesect>\r
- <title>Item Check-in enhancements</title>\r
- <itemizedlist>\r
- <listitem>Evergreen supports a set number of claim returns allowed; beyond that, additional claim returns require supervisor authorization. This is based off the \r
- claims returned counter. This only blocks another claim returned, and circulation can still occur. Also, there is a new permission to allow changing the claims \r
- returned count for a patron. In order to use this feature, staff needs to have the appropriate permission. </listitem>\r
- <listitem>There's a new calendar widget in the backdating function in the item check-in module. The system has the ability to select items already checked in \r
- and retroactively backdate those items, using a button with a calendar selector. Any fines resulting from original check-in are removed. When a check-in is backdated, \r
- the item record retains both the actual date of check-in and backdate used. This information will display in the copy details interface. </listitem>\r
- <listitem>When marking an item damaged, several library settings are checked to determine whether the patron should be charged the copy price and/or a processing fee. \r
- Staff is prompted with this amount, which can either be applied or modified or canceled. </listitem>\r
- </itemizedlist> \r
- </simplesect>\r
- <simplesect>\r
- <title>Holds Enhancements</title>\r
- <itemizedlist>\r
- <listitem>Evergreen allows for hold slips to be customized to include any field from the patron record and/or item record, in any position and orientation on the \r
- slip. Font, font size, and font weight are customizable. In addition, the hold slip may include a branch symbol (gif or jpg format) </listitem>\r
- <listitem>Evergreen supports behind the desk indicator printing on holds slip for patrons who have this flag in their patron record. (This would be for libraries \r
- with public hold shelves.) </listitem>\r
- <listitem>In Evergreen, between the time that a hold is checked in and a hold is placed on the hold shelf, there is a configurable delay before the status is changed \r
- to On Hold Shelf. </listitem>\r
- <listitem>Evergreen has the ability to ensure that manually edited copies (either deleting or changing to a non-holdable status) will have their holds \r
- retargeted. </listitem>\r
- <listitem>In Evergreen, between the time that a hold is checked in and a hold is placed on the hold shelf, there is a configurable delay before the status is \r
- changed to On Hold Shelf. </listitem>\r
- <listitem>The system supports a Clear Hold Shelf process. First, it removes holds from items that have expired on the hold shelf, and generates a report (aka clear \r
- hold shelf report) listing items to be cleared from hold shelf. Then staff can print the list, go out and physically pull the items off of the hold shelf. Next, \r
- staff scan the items in EG to either reset the items to the correct shelving location, capture the next hold or put the items in transit to the correct owning \r
- location.</listitem>\r
- <listitem>Staff can extend pickup deadlines for holds.</listitem>\r
- <listitem>In the patron view in the SC (staff client), you can select multiple holds in actions for selected holds and choose to change the pickup location. \r
- Evergreen has the ability to change the pickup location for all of a patron's holds in a single process. Additionally, Evergreen has the ability to modify all \r
- holds attached to a bibliographic record, including the ability to change the hold expiration date. This functionality is covered with current bib holds list \r
- interface. </listitem>\r
- <listitem>Evergreen allows patrons with specific permissions to place holds on items they have already checked out. All other patrons cannot. This works by warning the \r
- user that the item is already checked out to them and, if they have the permission, the system gives them the ability to override. </listitem>\r
- <listitem>The system supports the ability to place holds on titles with status on-order. For additional information, see the Acquisitions notes later in this \r
- document. </listitem>\r
- <listitem>Evergreen has the ability to designate specific org units that will not trigger a hold upon check-in. </listitem>\r
- <listitem>Evergreen added logic to hold targeting to skip branches that are closed at the time of hold placement and <varname>x</varname> time (<varname>x</varname> \r
- time being a set interval). This is \r
- to prevent the hold being targeted at branches that will be closed Saturday and Sunday (for example), making it impossible for patrons to receive their hold. This \r
- presumes there is another copy available at another branch. </listitem>\r
- <listitem>There are more options now for hold settings. One option is library weighting as well as looping. If looping is set, the holds targeter will skip any \r
- libraries that it targeted in a previous loop and will continue doing so until it has tried all libraries at which point it will start the process over again. If max \r
- loops are being used in hold management, at the end of the last determined loop, if there are no copies that could potentially fill a hold, the hold may be canceled. \r
- If there are checked-out copies, the hold stays in queue; otherwise, the hold is canceled and a cancellation notice is sent to the patron. </listitem>\r
- <listitem>The system offers the ability to secondarily sort the Holds Pull List by physical shelving location within the library.</listitem>\r
- <listitem>The system offers the ability to distinguish between staff-placed holds and patron-placed holds through a column in the holds interface. </listitem>\r
- <listitem>Hold cancellation can be displayed, along with information regarding the cancellation (e.g., cause, cancellation type, date, item, patron, etc.) </listitem>\r
- <listitem>There is support now in the system to allow configuration to disallow holds for items that are on the shelf at the location from which the patron is \r
- searching. </listitem>\r
- <listitem>The system supports patron specific hold notes that can display in the OPAC and print in the hold notice, but do not necessarily print on hold slips. </listitem>\r
- <listitem>The system supports ability for staff to move someone to the top of the holds queue. This was developed due to cases where a patron picked up a hold but the \r
- item was damaged. Since the patron had picked up the hold, it was considered filled. </listitem>\r
- <listitem>The patron can change the pickup location before the hold is ready for pickup. Then, the item is put in transit & a new holds slip is printed with a \r
- special symbol to indicate that the pickup location has been changed. If the location is changed while the item is in transit, than at next checkin the item is put \r
- in transit to the new location. A new holds slip is printed. </listitem>\r
- <listitem>The system supports a separate hold note field for staff use that can print on hold slip.</listitem>\r
- <listitem>Ability for patrons to view recently canceled holds and easily re-place holds.</listitem>\r
- </itemizedlist> \r
- </simplesect>\r
- </simplesect>\r
- <simplesect>\r
- <title>Staff Client Interface Enhancements</title>\r
- <itemizedlist>\r
- <listitem>Evergreen includes color-coding into staff view of patrons when there is a bad or invalid address. Also included is an alert to patrons in the My Account view \r
- in the OPAC to alert them to the bad address problem. System automatically blocks /unblocks a patron when an address is marked invalid/valid. </listitem>\r
- <listitem>Ability to have the staff client automatically minimize after a settable period of inactivity to protect patron privacy. This is controlled through an org \r
- unit setting.</listitem>\r
- <listitem>Summary of bills, checkouts, and holds are visible from all of the patron screens.</listitem>\r
- <listitem>Historical summary of paid fines is sortable by column and displays sub-totals for each column; also allows the ability to limit by voided/non-voided \r
- payments. Fines history detail includes more information including location and time/date where item was returned and much more. </listitem>\r
- <listitem>More streamlined display of copy information including number of copies, copy status, and number of holds in both staff client interface and patron \r
- OPAC.</listitem>\r
- <listitem>The system supports the ability to edit item records from any item record access point. </listitem>\r
- <listitem>From holding maintenance or item status by barcode, you can retrieve more item details. For example, total circulations by current and previous year, last \r
- status change, last checkout date & works station, last checkin time and workstation, and more. </listitem>\r
- <listitem>The system includes a separate date field for the last change to the item in the item record. </listitem>\r
- <listitem>In the item record, the system displays total check-outs and renewals for year-to-date, previous year, and lifetime. </listitem>\r
- <listitem>Better audio signal handling.</listitem>\r
- <listitem>In Evergreen, there is an org setting to disable all staff client circ popups unless an unhandled exception occurs. The exception handling has been automated \r
- as much as possible, based in settings, to prevent the amount of popups that require staff attention at the circ desk. Alerts are communicated visually (e.g., screen \r
- color change) or audibly. </listitem>\r
- <listitem>The system supports two views of patron information: horizontal and vertical. </listitem>\r
- <listitem>From the patrons screen, under holds, clicking place hold will bring up an embedded catalog. Placing a hold from the embedded catalog will automatically \r
- generate a hold for the current account of the patron you are viewing. </listitem>\r
- <listitem>The system supports a new messages (notes) UI in the info tab of the patron screen. </listitem>\r
- <listitem>The system supports a new interface that shows the most recent activity on the workstation (checkout/checkin/ renewal/ patron-reg activity, with links to \r
- relevant patron from each item). This would be helpful to a supervisor trying to backtrack an issue to assist a staff member. </listitem>\r
- <listitem>The system now captures and displays check-in and workstation history. </listitem>\r
- <listitem>Added the ability to pre-define messages, populated in a drop-down menu, to be applied to patron accounts. Includes: the ability to configure the message to \r
- act as a penalty (if desired), record the date and staff who applied the message, include a flag to mark item as resolved. If item is marked as resolved it will not \r
- display as an alert. </listitem>\r
- <listitem>Under grocery billings in Evergreen, billing type can be pre-populated with a list of common fine events (such as types and costs). </listitem>\r
- <listitem>Evergreen has the ability to retrieve users by numberic ID (separate from the barcode) in the staff client. This functionality is optional and set to false \r
- by default. </listitem>\r
- <listitem>Backend support for other types of receipts (like holds/fines).</listitem>\r
- </itemizedlist> \r
- </simplesect>\r
- <simplesect>\r
- <title>OPAC and My Account Enhancements</title>\r
- <itemizedlist>\r
- <listitem>There is backend code support for a method to allow patrons to link their records in a way that grant privileges. This could be utilized in future \r
- implementations for social networking features. </listitem>\r
- <listitem>Patron passwords are now more flexible in length and content (shorter and numeric-only passwords are now allowed). Libraries can set minimum and maximum \r
- limits on password length in Password format in the Library Settings Editor. </listitem>\r
- <listitem>Patrons can select a username, which can then be used to access OPAC and self check-out stations.</listitem>\r
- <listitem>My Account can allow patrons to update some information including: street address, e-mail address and preferred pick-up library for holds. Changes to address \r
- will be marked as pending in the patron's file until a staff member verifies the new address and completes the change. </listitem>\r
- <listitem>From the My Account interface, patrons can see their estimated wait time for a hold. Evergreen calculates the estimated wait time from the circ mods on the set \r
- of potential copies available to fill the holds on that title. Hold wait estimate is configurable at the consortial level and each Evergreen implementation would need \r
- to take into consideration their avg circulation time, hold wait time or other factors like transit time which might influence hold wait estimates. </listitem>\r
- <listitem>Patrons can title their bookbags (aka reading list) and place holds from it. </listitem>\r
- <listitem>Backend support has been developed to allow patrons to waive certain kinds of notices. </listitem>\r
- <listitem>The system supports combining multiple notices of the same type to the same patron into one event, so long as the system is configured to batch notices \r
- on an approximately daily basis.</listitem>\r
- </itemizedlist>\r
- </simplesect>\r
- <simplesect>\r
- <title>Billing, Collections and Fine/Fee Enhancements</title>\r
- <itemizedlist>\r
- <listitem>Fines now consistently link to item record details.</listitem>\r
- <listitem>The fine record includes a comments field, editable by staff. Staff can annotate payments and add notes to a specific billing. Staff can sort on payment \r
- type. When adding note, the current text shows as default in a pop-up window, so it can be appended or over-written. </listitem>\r
- <listitem>Staff and users can now only pay using the latest user data, which prevents accidental/duplicate payments against the same transaction or against stale \r
- data. </listitem>\r
- <listitem>The system supports setting the maximum fine based on item type (e.g. generic=.50) AND not to exceed the cost of item. This works as an inheritable OU \r
- setting, circ.max_fine.cap_at_price, that changes the max_fine amount to the price IF the price is not null and is less than the rule-based max_fine amount. </listitem>\r
- <listitem>The system has the ability to run a report of accounts with users with overall negative balances, including the balance owed and last billing activity \r
- time, optionally filtered by home org. There is an option for issuing refunds for selected accounts on the resulting list. The report also captures patrons with \r
- any refundable transaction. </listitem>\r
- <listitem>Evergreen provides 3 distinct and independent types of blocks: system, manual and collections. Manual and collections are set manually by staff. </listitem>\r
- <listitem>A new penalty type of <varname>PATRON_IN_COLLECTIONS</varname> has been added. Its set when the collections agency puts the patron into collections, staff can define the blocks \r
- and clear threshold for each group, etc. The system supports removing collection block immediately once charges are paid down to zero (applies to both ecommerce and at \r
- CIRC desk).</listitem>\r
- </itemizedlist> \r
- </simplesect>\r
- <simplesect>\r
- <title>Action/Triggered Event and Notice Enhancements</title>\r
- <itemizedlist>\r
- <listitem>Action Triggers (AT) support many new notices for events such as items that are about to expire off of the hold shelf; items that are on hold and are about \r
- to reach the max hold time (if one is set); courtesy notices that are prior to due date. AT also logs all notices sent to patrons and this is accessible to staff in the \r
- SC to view all notices or cancel all pending notices.</listitem>\r
- <listitem>The system has the ability to cancel unsent notices before they are sent and the ability to search pending notices by item barcode.</listitem>\r
- <listitem>Administrators can choose to implement a collections warning prior to sending patrons to collections. When the account balance of the patron meets a \r
- certain threshold, they are sent a bill notice. This is driven by the total amount owed, not by individual bills. The patron is sent to collections after a \r
- configurable number of days since the bill notice was sent. The billing notice is handled with a new PATRON_EXCEEDS_COLLECTIONS_WARNING penalty. Files can be sent via \r
- <systemitem class="protocol">SCP</systemitem> and <systemitem class="protocol">FTP</systemitem>.</listitem>\r
- </itemizedlist> \r
- </simplesect>\r
- <simplesect>\r
- <title>Acquisitions</title>\r
- <itemizedlist>\r
- <listitem>From within the general acquisitions search page, users are able to search on many fields in the acquisitions /serials workflow. For example on attributes \r
- of invoices, purchase orders, selection lists, bib records, etc.</listitem>\r
- <listitem>General catalog searching is now supported for explicit truncation/wildcard searches.</listitem>\r
- <listitem>Acquisitions line item searches support NOT searches. </listitem>\r
- <listitem>Money can be transferred from one fund to another (or to none).</listitem>\r
- <listitem>All transactions (except batch EDI delivery to vendors) post in real time including: purchase orders, invoices, fund balances, vendors balances, vendor \r
- statistics and history. EDI delivery delay is configurable at the system level admin interface.</listitem>\r
- <listitem>In the User Interface, users now have access to all active funds, spanning multiple years, in the various ordering/invoicing/etc interfaces.</listitem>\r
- <listitem>There is support for year-end fiscal turnover process that closes out funds and transfers encumbered amounts into a new fiscal year. This includes the ability \r
- to selectively roll certain funds over, while not rolling over others. </listitem>\r
- <listitem> Evergreen handles validation of ordering, receiving,and invoicing processes, using validated data, to satisfy auditor requirements. In the staff client, \r
- there is a menu option which allows staff to locate the PO that resulted in the purchase of that copy.</listitem>\r
- <listitem>Selection lists are collections of bibliographic records (short or full) that temporarily store titles being considered for purchase. Selection lists can be \r
- shared for collaborative input.</listitem> \r
- <listitem>Library staff have the ability to create distribution formulas for ease of receiving, processing and distributing materials. Branch, shelving location, and fund need \r
- to be separate from the distribution formula, so that staff can enter the distribution sets. Staff are able to use that formula for any shelving location they decide. Staff \r
- also have the ability to add multiple distribution formulas together and the ability to override distribution formulas. After applying the distribution formula; it will be an \r
- all or none redistribution of copies from one branch to another. Staff can add or delete individual copies because the distribution pattern may not account for the exact total \r
- of copies. If the total number of copies has not been allocated, the user will receive a flag or warning. This puts the use count for each distribution formula in the DF \r
- dropdown for users to see.</listitem>\r
- <listitem>The system supports Batch ISBN/UPC search. This is located in the general Acquisitions search page, where you can choose to search by single isbn, upc, or you can \r
- choose to upload a batch of isbns. The ISBN search method looks at MARC tag 024, where UPC codes are supposed to live. For LI searching, the system uses \r
- open-ils.acq.lineitem.search.ident. Catalog records are included in the batch isbn/upc search and staff can now search catalog records in the acq search. </listitem>\r
- <listitem>Backend support has been integrated to give patrons the ability to submit purchase requests through the OPAC. The UI for this has not yet been integrated into the \r
- OPAC.</listitem>\r
- <listitem> The system supports claiming, specifically there is:\r
- <itemizedlist>\r
- <listitem>a place to store the default claim interval for each vendor</listitem>\r
- <listitem>a way to show the selected claim date during the order</listitem>\r
- ` <listitem>a way to show the selected claim date during the order</listitem>\r
- <listitem>a way to override the claim date during order</listitem>\r
- <listitem>a way to list items/orders that have reached the claim date.</listitem>\r
- </itemizedlist>\r
- A list of items that meet claims requirements can be generated, but claims must be initiated by librarians. </listitem>\r
- <listitem>From the UI, staff can access the lineitem and PO history. Entries in the history table are ordered from most recent to oldest.</listitem>\r
- <listitem>The purchase order printout is customizable, including the ability to break up a single order into separate purchase orders. Also, staff can print groups \r
- of POs from a search as a single printout, which can be used to generate physical POs for vendors who do not support EDI. Staff can add notes and there is an indicator \r
- in the PO interface of the existence/number of attached notes. </listitem>\r
- <listitem>Staff are able to see all of the lineitems (with prices, copy counts, etc.) for a set of Pos and summary information is listed along the top of the page. \r
- The summary information includes: total price, total # lineitems, and total # of copies. Additionally, staff can do a PO search by vendor for all \r
- activated-but-not-yet-sent Pos (i.e., show me what we are about to order) and view the results.</listitem>\r
- <listitem>The system supports flagging prepaid orders so that invoicing is handled correctly.</listitem>\r
- <listitem>The system allows building orders based on templates (distribution formulas); by shelving location or owning library.</listitem>\r
- <listitem>The system supports the ability to gather orders together and send them all at once, instead of manually and individually, a rolling FTP function that runs \r
- every 15 minutes (or other set interval) with detailed log information and control of frequency and action. Additionally, there is an automatic retrieval of status \r
- reports records from the vendor, which are then automatically inserted into the order records. </listitem>\r
- <listitem>Staff have the ability to apply and view notes and cancel causes on purchase orders as well as cancel causes on lineitems. In the UI, there is a staff client \r
- menu entry for cancel cause.</listitem>\r
- <listitem>There is an interface in the ACQ system for viewing what was sent to vendors via EDI. There are two ways to approach the viewing of sent orders: via PO \r
- search interface (for the general case) which gives finer detail on EDI orders and the ability to reset failed outbound EDI deliveries. </listitem>\r
- <listitem>Pending final UI work in the OPAC, the system has the ability to allow patrons to place volume level and issue level holds. </listitem>\r
- <listitem>Ability to create and print routing worksheets for manual receiving processes.</listitem>\r
- <listitem>Nothing in the selection lists is holdable (either by patrons or by most staff, apart from acquisitions staff). When an on-order title has been canceled and \r
- the lineitem is canceled, the corresponding bib record and on-order copies will be deleted so the copies will no longer be holdable. The lineitem has a cancel cause to \r
- show why order was canceled. Selection list records are never visible in the OPAC. Catalog records with no visible copies (within the search scope) do not show up in \r
- the public OPAC. This also applies to on-order records. </listitem>\r
- <listitem>Deleted bibs, callnumbers, copies, and patrons are retained for reporting purposes. Only patrons can be purged (by staff). “Deleted” items are more \r
- accurately described as “inactive.” However, patrons can now be complete purged, however this isn't recommended as you lose historical data.</listitem>\r
- <listitem> The system supports shared and floating items by collection. Item records can be added or removed from the collection group and can be updated in batch \r
- via buckets in the copy edit interface.</listitem>\r
- <listitem>ACQ permissions control which workgroups have view/edit access to lineitem and catalog records while PO/PL and copy-level ownership and permission depths \r
- affect viewing in other, more location-specific interfaces. </listitem> \r
- <listitem>The system supports the ability to transfer patron holds queue from one bibliographic record to another, singly or in batch, while preserving the original \r
- hold order. </listitem>\r
- <listitem>The system has a reporting view which allows staff to identify bibs (shows ISBNs) for which the last item was removed based on the date of removal. \r
- Report templates can be built from this view for external processes.</listitem>\r
- <listitem>The system supports lineitem alerts, lineitem receive alerts, and lineitem detail alerts for EDI messaging.</listitem>\r
- <listitem>The system supports the ability to exclude some types of items from patron hold limits.</listitem>\r
- <listitem>There is support for new, locally defined, cancel reasons for EDI. There is also support for EG interpretation of EDI defined cancellation standards. </listitem>\r
- <listitem>The system supports the ability to send batches of orders to vendors, including orders for multiple accounts. The process of breaking outbound EDI messages \r
- into controlled and timed batch sizes is automated but settable to a specific, preferred, time interval.</listitem>\r
- <listitem>The system supports the ability to FTP orders directly to vendors and receive acknowledgements and status reports from vendors. More specifically, the \r
- system supports push and pull of files via <systemitem class="protocol">FTP</systemitem>, <systemitem class="protocol">SFTP</systemitem> and \r
- <systemitem class="protocol">SSH</systemitem>. </listitem>\r
- <listitem>The system supports MARC file import with PO data.</listitem>\r
- <listitem>The OPAC accepts enhanced content from the following vendors: ChiliFresh, Content Café & Novelist. (note that these are subscription services)\r
- </listitem>\r
- <listitem>You can set up vendor profiles and flag those that are active. Those that aren't can be saved for historical purposes.</listitem>\r
- <listitem>The system supports the ability to “flag” vendor records for vendor who require pre-payment of purchase orders with a number of visual cues in the UI. During \r
- PO creation, the pre-payment flag in the form will show and pre-populate it's value with the value from the chosen provider. During PO activation, if prepayment \r
- is required, a confirmation dialog is inserted before sending the activate request. It indicates in the PO summary when a PO requires pre-payment. </listitem>\r
- <listitem>The system supports sequential barcode generation for ease of receiving and processing of new items and easily changing large groups of barcodes. There is \r
- a choice to use auto generated barcodes in interfaces where they would normally be used (such as receiving). Some parameters about the barcode symbology may need to \r
- be entered in the admin interface to correctly calculate the barcodes.</listitem>\r
- <listitem>The system supports the ability to manually select libraries to receive items when partial orders are received or when items come in multiple deliveries. \r
- Orders with multiple copies will have an owning library per copy, so staff can pick which copies to mark as received.</listitem>\r
- <listitem>The system is compatible with Zebra Z4M thermal transfer printers. </listitem>\r
- <listitem>The system supports the ability to create, format and print spine labels. </listitem>\r
- <listitem>In the ACQ UI, there is a batch fund updater. When there is a given set of line items, the batch fund updater updates the fund for all attached copies in \r
- batch.</listitem>\r
- <listitem>The system has a configurable drop-down of alerts for line items that staff can control. </listitem>\r
- <listitem>The system supports the ability to update order records at the receiving stage; the ability to receive partial orders and unreceive orders; and the order \r
- record is updated automatically when the balance of a partial order is received. </listitem>\r
- <listitem>The system supports the ability to transfer item records from one bibliographic record to another. </listitem>\r
- <listitem>The system supports a worksheet for each title received, to include title, call number, number of copies received, distribution, and processing notes. </listitem>\r
- <listitem>The system supports the ability to easily scan over a “dummy” or placeholder barcode in a temporary, brief or on-order record by simply scanning the \r
- <quote>real</quote> barcode.</listitem>\r
- <listitem>The system supports the import/export of MARC bibliographic and authority records via Vandelay. An option has been added to use the internal bib ID as the TCN \r
- for all records while retaining the OCLC number in the record. The authority import now matches bib import in overlay/merge functionality.</listitem>\r
- <listitem>The system is fully compatible with OCLC Connexion for editing and transferring bibliographic and authority records (Z39.50). </listitem>\r
- <listitem>The system supports the ability to create a <quote>short bib</quote> record pending creation of the full MARC record. Short bibs can be created from a lineitem \r
- search. </listitem>\r
- <listitem>The system supports a utility to facilitate searching for full bibliographic records and create temporary <quote>short</quote> bibliographic records if no full \r
- records are found. </listitem>\r
- <listitem>Added the ability to perform electronic receiving and invoicing as follows: ability to receive electronic packing slips and invoices by purchase order or \r
- invoice number; ability to edit number of copies, amount due, freight and service charges, and tax; ability to delete line items; ability to recalculate total \r
- amounts; ability to authorize payment within ILS.</listitem>\r
- <listitem>System supports the ability to do both regular and generic or blanket invoicing (refers to invoices without a purchase order number, e.g., direct charges to \r
- a fund).</listitem>\r
- <listitem>System supports simultaneous access to invoice interface.</listitem>\r
- <listitem>System supports a number of fields including: date, invoice number, invoice type, shipping vendor name, billing vendor, purchase order number, title, \r
- author, number of copies ordered, number of copies paid or received, number of copies available for payment, number of copies being paid for, amount, notes, \r
- invoice subtotal, freight charge, service charge, tax, invoice total, & vendor order was placed with. </listitem>\r
- <listitem>The system prevents overpayment in the invoice view page by linking invoices to PO/Lineitems. </listitem>\r
- <listitem>Staff can print a list of invoices paid before/after a specified date. When searching for invoices in the unified search interface, there's now a button that \r
- will print a voucher for whichever invoices have checked checkboxes.</listitem>\r
- <listitem>The system supports the ability to search invoices by number or vendor name, with links to vendors, and vendor records include links to invoice history.</listitem>\r
- <listitem>Staff can retrieve a PO or lineitem and access all the related invoicing data. </listitem>\r
- <listitem>The system supports reopening a closed invoice (example: an invoice was paid from the wrong fund; staff wants to go back and change the fund). There is \r
- a <guibutton>Reopen</guibutton> button, which requires permissions. </listitem>\r
- <listitem>The system has the ability to pay a partial invoice for partial receipt of shipment, and then generate claims for the items that were not received. Also, \r
- the system supports invoicing extra copies when a vendor sends more copies than what staff ordered and staff decides to keep the extra copies. </listitem>\r
- <listitem>Issues can be automatically moved to a configured shelving location upon receipt of the newer issue. This can be done on a per item basis and is based on \r
- the owning library of the copies. </listitem>\r
- <listitem>When using full serials control, the default behavior for serials issue sorting and display in the holdings display will be reverse chronological order.</listitem>\r
- <listitem>Staff can label serials issuances with easily identifiable text such as <quote>YYYYMONTH</quote> or <quote>V.12 NO.1</quote>.</listitem>\r
- <listitem>In serials receiving staff are able to choose which issues to receive and distribute to which locations.</listitem> \r
- <listitem>Staff can add regular, supplemental, and index issues in the serials interface. </listitem>\r
- <listitem>The system supports purchase alert query (aka holds ratio report, holds alert report) compares holds to items and flags titles that need more copies. \r
- The option exists to include inprint/out-of-print status from the bibliographic record. The system also handles the ability to add query results directly to \r
- selection lists, singly or in batch, and the ability to create order records directly from query results. This is handled by an interface for uploading a CSV file \r
- to generate a page of bib records that can have lineitems created from them to go into selection lists and/or POs.</listitem>\r
- </itemizedlist> \r
- </simplesect>\r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<chapter version="5.0" xml:id="add-data-source" xml:lang="EN"
- xmlns="http://docbook.org/ns/docbook"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:xi="http://www.w3.org/2001/XInclude"
- xmlns:ns5="http://www.w3.org/1998/Math/MathML"
- xmlns:ns4="http://www.w3.org/2000/svg"
- xmlns:ns3="http://www.w3.org/1999/xhtml"
- xmlns:ns="http://docbook.org/ns/docbook">
- <info>
- <title>Adding Data Sources to Reporter</title>
- </info>
-
- <para>You can further customize your Evergreen reporting environment by
- adding additional data sources.</para>
-
- <para>The Evergreen reporter module does not build and execute SQL queries
- directly, but instead uses a data abstraction layer called Fieldmapper to
- mediate queries on the Evergreen database. Fieldmapper is also used by other
- core Evergreen DAO services, including cstore and permacrud. The
- configuration file fm_IDL.xml contains the mapping between Fieldmapper class
- definitions and the database. The fm_IDL.xml file is located in the
- /openils/conf directory.</para>
-
- <para>There are 3 basic steps to adding a new data source. Each step will be
- discussed in more detail in the</para>
-
- <orderedlist>
- <listitem>
- <para>Create a PostgreSQL query, view, or table that will provide the
- data for your data source.</para>
- </listitem>
-
- <listitem>
- <para>Add a new class to fm_IDL.xml for your data source.</para>
- </listitem>
-
- <listitem>
- <para>Restart the affected services to see the new data source in
- Reporter.</para>
- </listitem>
- </orderedlist>
-
- <para>There are two possbile sources for new data sources:</para>
-
- <itemizedlist>
- <listitem>
- <para>An SQL query built directly into the class definition in
- fm_IDL.xml. You can use this method if you are only going to access this
- data source through the Evergreen reporter and/or cstore code that you
- write.</para>
- </listitem>
-
- <listitem>
- <para>A new table or view in the Evergreen PostgresSQL database on which
- a class definition in fm_IDL.xml. You can use this method if you want to
- be able to access this data source through directly through SQL or using
- other reporting tool.</para>
- </listitem>
- </itemizedlist>
-
- <section>
- <title>Create a PostgreSQL query, view, or table that will provide the
- data for your data source</title>
-
- <para>You need to decide whether you will create your data source as a
- query, a view, or a table.</para>
-
- <itemizedlist>
- <listitem>
- <para>Create a <emphasis>query</emphasis> if you are planning to
- access this data source only through the Evergreen reporter and/or
- cstore code that you write. You will use this query to create an IDL
- only view.</para>
- </listitem>
-
- <listitem>
- <para>Create a <emphasis>view</emphasis> if you are planning to access
- this data source through other methods in addition to the Evergreen
- reporter, or if you may need to do performance tuning to optimize your
- query.</para>
- </listitem>
-
- <listitem>
- <para>You may also need to use an additional
- <emphasis>table</emphasis> as part of your data source if you have
- additional data that's not included in the base Evergreen, or if you
- need to use a table to store the results of a query for performance
- reasons.</para>
- </listitem>
- </itemizedlist>
-
- <para>To develop and test queries, views, and tables, you will need</para>
-
- <itemizedlist>
- <listitem>
- <para>Access to the Evergree PostgreSQL database at the command line.
- This is normally the psql application. For introductory information,
- please see <xref linkend="intro_to_sql" />. You can access the
- Postgres documentation at the <link
- xlink:href="http://www.postgresql.org/docs/">Official Postgres
- documentation</link> for more information about PostgreSQL.</para>
- </listitem>
-
- <listitem>
- <para>Knowledge of the Evergreen database structure for the data that
- you want to access. You can find this information by looking at the
- Evergreen schema - see <xref linkend="databaseschema" /> and <xref
- linkend="data_models_and_access" /></para>
- </listitem>
- </itemizedlist>
-
- <para>If the views that you are creating are purely local in usage are are
- intended for contribution to the core Evergreen code, create the Views and
- Tables in the extend_reporter schema. This schema is intended to be used
- for local customizations and will not be modified during upgrades to the
- Evergreen system.</para>
-
- <para>You should make that you have an appropriate version control pocess
- for the SQL used to create you data sources.</para>
-
- <para>Here's an example of a view created to incorporate some locally
- defined user statistical categories.<programlisting>create view extend_reporter.patronstats as
-select u.id,
-grp.name as "ptype",
-rl.stat_cat_entry as "reg_lib",
-gr.stat_cat_entry as "gender",
-ag.stat_cat_entry as "age_group",
-EXTRACT(YEAR FROM age(u.dob)) as "age",
-hl.id as "home_lib",
-u.create_date,
-u.expire_date,
-ms_balance_owed
-from actor.usr u
-join permission.grp_tree grp on (u.profile = grp.id and (grp.parent = 2 or grp.name = 'patron'))
-join actor.org_unit hl on (u.home_ou = hl.id)
-left join money.open_usr_summary ms on (ms.usr = u.id)
-left join actor.stat_cat_entry_usr_map rl on (u.id = rl.target_usr and rl.stat_cat = 4)
-left join actor.stat_cat_entry_usr_map bt on (u.id = bt.target_usr and bt.stat_cat = 3)
-left join actor.stat_cat_entry_usr_map gr on (u.id = gr.target_usr and gr.stat_cat = 2)
-left join actor.stat_cat_entry_usr_map gr on (u.id = gr.target_usr and gr.stat_cat = 2)
-left join actor.stat_cat_entry_usr_map ag on (u.id = ag.target_usr and ag.stat_cat = 1)
-where u.active = 't' and u.deleted <> 't';
-</programlisting></para>
- </section>
-
- <section>
- <title>Add a new class to fm_IDL.xml for your data source</title>
-
- <para>Once you have your data source, the next step is to add that data
- source as a new class in fm_IDL.xml. </para>
-
- <para>You will need to add the following attributes for the class
- definition</para>
-
- <itemizedlist>
- <listitem>
- <para><emphasis>id.</emphasis> You should follow a consistent naming
- convention for your class names that won't create conflicts in the
- future with any standard classes added in future upgrades. Evergreen
- normally names each class with the first letter of each word in the
- schema and table names. You may want to add a local prefix or suffix
- to your local class names.</para>
- </listitem>
-
- <listitem>
- <para><emphasis>controller=”open-ils.cstore”</emphasis></para>
- </listitem>
-
- <listitem>
- <para><emphasis>oils_obj:fieldmapper</emphasis>=”extend_reporter::long_name_of_view”</para>
- </listitem>
-
- <listitem>
- <para><emphasis>oils_persist.readonly</emphasis>=”true”</para>
- </listitem>
-
- <listitem>
- <para><emphasis>reporter:core</emphasis>=”true” (if you want this to
- show up as a “core” reporting source)</para>
- </listitem>
-
- <listitem>
- <para><emphasis>reporter</emphasis>:label. This is the name that will
- appear on the data source list in the Evergreen reporter.</para>
- </listitem>
-
- <listitem>
- <para><emphasis>oils_persist:source_definition</emphasis>. If this is
- an IDL-only view, add the SQL query here. You don't need this
- attribute if your class is based on a PostgreSQL view or table.</para>
- </listitem>
-
- <listitem>
- <para><emphasis>oils_persist:tablename=</emphasis>"schemaname.viewname
- or tablename" If this class is based on a PostgreSQL view or table,
- add the table name here. You don't need this attribute is your class
- is an IDL-only view.</para>
- </listitem>
- </itemizedlist>
-
- <para>For each column in the view or query output, add
- <emphasis>field</emphasis> element and set the following attributes. The
- fields should be wrapped with <field> </field> </para>
-
- <itemizedlist>
- <listitem>
- <para>reporter:label. This is the name that appears in the Evergreen
- reporter.</para>
- </listitem>
-
- <listitem>
- <para>name. This should match the column name in the view or query
- output.</para>
- </listitem>
-
- <listitem>
- <para>reporter:datatype (which can be id, bool, money, org_unit, int,
- number, interval, float, text, timestamp, or link)</para>
- </listitem>
- </itemizedlist>
-
- <para>For each linking field, add a <emphasis>link</emphasis> element with
- the following attributes. The elements should be wrapped with <link>
- </link></para>
-
- <itemizedlist>
- <listitem>
- <para>field (should match field.name)</para>
- </listitem>
-
- <listitem>
- <para>reltype (“has_a”, “might_have”, or “has_many”)</para>
- </listitem>
-
- <listitem>
- <para>map (“”)</para>
- </listitem>
-
- <listitem>
- <para>key (name of the linking field in the foreign table)</para>
- </listitem>
-
- <listitem>
- <para>class (ID of the IDL class of the table that is to be linked
- to)</para>
- </listitem>
- </itemizedlist>
-
- <para>The following example is a class definition for the example view
- that was created in the previous section.</para>
-
- <para><programlisting><class id="erpstats" controller="open-ils.reporter-store" oils_obj:fieldmapper="extend_reporter::patronstats" oils_persist:tablename="extend_reporter.patronstats" oils_persist:readonly="true" reporter:label="Patron Statistics" reporter:core="true">
- <fields oils_persist:primary="id">
- <field reporter:label="Patron ID" name="id" reporter:datatype="link" />
- <field reporter:label="Patron Type" name="ptype" reporter:datatype="text" />
- <field reporter:label="Reg Lib" name="reg_lib" reporter:datatype="text" />
- <field reporter:label="Boro/Twp" name="boro_twp" reporter:datatype="text" />
- <field reporter:label="Gender" name="gender" reporter:datatype="text" />
- <field reporter:label="Age Group" name="age_group" reporter:datatype="text" />
- <field reporter:label="Age" name="age" reporter:datatype="int" />
- <field reporter:label="Home Lib ID" name="home_lib_id" reporter:datatype="link" />
- <field reporter:label="Home Lib Code" name="home_lib_code" reporter:datatype="text" />
- <field reporter:label="Home Lib" name="home_lib" reporter:datatype="text" />
- <field reporter:label="Create Date" name="create_date" reporter:datatype="timestamp" />
- <field reporter:label="Expire Date" name="expire_date" reporter:datatype="timestamp" />
- <field reporter:label="Balance Owed" name="balance_owed" reporter:datatype="money" />
-</fields>
-<links>
- <link field="id" reltype="has_a" key="id" map="" class="au"/>
- <link field="home_lib_id" reltype="has_a" key="id" map="" class="aou"/>
-</links>
-</class></programlisting><caution>
- <para>fm_IDL.xml is used by other core Evergreen DAO services,
- including cstore and permacrud. So changes to this file can affect the
- entire Evergreen application, not just reporter. After making changes
- fm_IDL.xml, it is a good idea to ensure that it is valid XML by using
- a utility such as xmllint – a syntax error can render much of
- Evergreen nonfunctional. Set up a good change control system for any
- changes to fm_IDL.xml. You will need to keep a separate copy of you
- local class definitions so that you can reapply the changes to
- fm_IDL.xml after Evergreen upgrades.</para>
- </caution></para>
- </section>
-
- <section>
- <title>Restart the affected services to see the new data source in the
- reporter</title>
-
- <para>The following steps are needed to for Evergreen to recognize the
- changes to fm_IDL.xml</para>
-
- <orderedlist>
- <listitem>
- <para>Copy the updated fm_IDL.xml Update /openils/conf/fm_IDL.xml to
- /openils/var/web/reports/fm_IDL.xml<programlisting>cp /openils/conf/fm_IDL.xml /openils/var/web/reports/fm_IDL.xml</programlisting></para>
- </listitem>
-
- <listitem>
- <para>Run Autogen to to update the Javascript versions of the
- fieldmapper definitions.</para>
-
- <programlisting>/openils/bin/autogen.sh</programlisting>
- </listitem>
-
- <listitem>
- <para>Restart C services<programlisting>osrf_ctl.sh -l -a restart_c</programlisting></para>
- </listitem>
-
- <listitem>
- <para>Restart the Evergreen reporter. You may need to modify this
- command depending on your system configuration and pid
- path<programlisting>opensrf-perl.pl -l -action restart -service open-ils.reporter -config /openils/conf/opensrf_core.xml -pid-dir /openils/var/run</programlisting></para>
- </listitem>
-
- <listitem>
- <para>Restart the Evergreen application or use Admin, For Developers,
- Clear Cache</para>
- </listitem>
- </orderedlist>
- </section>
-</chapter>
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<chapter xml:id="create-template" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
-\r
- <info>\r
- <title>Creating Templates</title>\r
- </info>\r
-\r
- <para>Once you have created a folder, the next step in building a report is to create or clone a\r
- template. Templates allow you to run a report more than once without building it anew every\r
- time, by changing definitions to suit current requirements. For example, you can create a\r
- shared template that reports on circulation at a given library. Then, other libraries can\r
- use your template and simply select their own library when they run the report.</para>\r
-\r
- <para>It may take several tries to refine a report to give the output that you want. It can be\r
- useful to plan out your report on paper before getting started with the reporting tool.\r
- Group together related fields and try to identify the key fields that will help you select\r
- the correct <emphasis>source</emphasis>. </para>\r
-\r
- <para>It may be useful to create complex queries in several steps. For example, first add all\r
- fields from the table at the highest source level. Run a report and check to see that you\r
- get results that seem reasonable. Then clone the report, add any filters on fields at that\r
- level and run another report. Then drill down to the next table and add any required fields.\r
- Run another report. Add any filters at that level. Run another report. Continue until you’ve\r
- drilled down to all the fields you need and added all the filters. This might seem time\r
- consuming and you will end up cloning your initial report several times. However, it will\r
- help you to check the correctness of your results, and will help to debug if you run into\r
- problems because you will know exactly what changes caused the problem. Also consider adding\r
- extra fields in the intermediate steps to help you check your results for correctness. </para>\r
-\r
- <para>This example illustrates creating a template for circulation statistics. This is an\r
- example of the most basic template that you can create. The steps required to create a\r
- template are the same every time, but the tables chosen, how the data is transformed and\r
- displayed, and the filters used will vary depending on your needs. </para>\r
-\r
- <section xml:id="create-template-choosing">\r
- <info>\r
- <title>Choosing Report Fields</title>\r
- </info>\r
-\r
-\r
- <procedure>\r
- <step>\r
-\r
-\r
- <informalfigure>\r
- <para>Click on the <guilabel>My Folder</guilabel> template folder where you want\r
- the template to be saved.</para>\r
- <para>\r
- <mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-1.png"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </step>\r
-\r
- <step>\r
-\r
- <informalfigure>\r
- <para>Click on <guilabel>Create a new Template for this\r
- folder</guilabel>.</para>\r
- <para> <mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-2.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
- </informalfigure>\r
- </step>\r
-\r
- <step>\r
-\r
- <informalfigure>\r
- <para>You can now see the template creating interface. The upper half of the\r
- screen is the <guilabel>Database Source Browser</guilabel>. The top left\r
- hand pane contains the database <guilabel>Sources</guilabel> drop-down list.\r
- This is the list of tables available as a starting point for your report.\r
- Commonly used sources are <guimenuitem>Circulation</guimenuitem> (for circ\r
- stats and overdue reports), <guimenuitem>ILS User</guimenuitem> (for patron\r
- reports), and <guimenuitem>Item</guimenuitem> (for reports on a library's\r
- holdings).</para>\r
- <para>\r
- <mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata width="100%" scalefit="1"\r
- fileref="../media/create-template-3.png"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- <para>The <guilabel>Enable source nullability</guilabel> checkbox below the sources\r
- list is for advanced reporting and should be left unchecked by default.</para>\r
-\r
- </step>\r
-\r
-\r
- <step>\r
-\r
- <informalfigure>\r
- <para>Select <guimenuitem>Circulation</guimenuitem> in the <guimenu>Sources\r
- </guimenu> dropdown menu. Note that the <guimenuitem>Core\r
- Sources</guimenuitem> for reporting are listed first, however it is\r
- possible to access all available sources at the bottom of this dropdown\r
- menu. You may only specify one source per template.</para>\r
- <para>\r
- <mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-4.png"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </step>\r
-\r
- <step>\r
-\r
-\r
- <informalfigure>\r
- <para>Click on <guilabel>Circulation</guilabel> to retrieve all the field names\r
- in the <guilabel>Field Name</guilabel> pane. Note that the <guilabel>Source\r
- Specifier</guilabel> (above the middle and right panes) shows the path\r
- that you took to get to the specific field. </para>\r
- <para> <mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata width="100%" scalefit="1"\r
- fileref="../media/create-template-5.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
- </informalfigure>\r
-\r
-\r
-\r
- </step>\r
-\r
- <step>\r
- <informalfigure>\r
- <para>Select <guimenuitem>Circ ID</guimenuitem> in the middle <guilabel>Field\r
- Name</guilabel> pane, and <guimenuitem>Count Distinct</guimenuitem> from\r
- the right <guilabel>Field Transform</guilabel> pane. The <guilabel>Field\r
- Transform</guilabel> pane is where you choose how to manipulate the data\r
- from the selected fields. You are counting the number of\r
- circulations.</para>\r
- <para><mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata width="100%" scalefit="1"\r
- fileref="../media/create-template-6.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
-\r
- </informalfigure>\r
- <para><guilabel>Field Transforms</guilabel> have either an\r
- <guilabel>Aggregate</guilabel> or <guilabel>Non-Aggregate</guilabel> output\r
- type. See <xref linkend="create-template-transforms"/> for more about\r
- <guilabel>Count, Count Distinct,</guilabel> and other transform\r
- options.</para>\r
-\r
- </step>\r
-\r
- <step>\r
- <informalfigure>\r
- <para>Click <guibutton>Add Selected Fields</guibutton> underneath the\r
- <guilabel>Field Transform</guilabel> pane to add this field to your\r
- report output. Note that <guimenuitem>Circ ID</guimenuitem> now shows up in\r
- the bottom left hand pane under the <guilabel>Displayed Fields</guilabel>\r
- tab. </para>\r
- <para><mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata width="100%" scalefit="1"\r
- fileref="../media/create-template-7.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
- </informalfigure>\r
-\r
-\r
- </step>\r
- <step xml:id="create-template-step8" xreflabel="Create Templates Step 8">\r
-\r
- <informalfigure>\r
- <para><guimenuitem>Circ ID</guimenuitem> will be the column header in the report\r
- output. You can rename default display names to something more meaningful.\r
- To do so in this example, select the <guimenuitem>Circ ID</guimenuitem> row\r
- and click <guibutton>Alter Display Header</guibutton>. </para>\r
- <para><mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-8.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
-\r
- </informalfigure>\r
-\r
-\r
- <para>Double-clicking on the displayed field name is a shortcut to altering the\r
- display header.</para>\r
- </step>\r
- <step>\r
-\r
- <informalfigure>\r
- <para>Type in the new column header name, for example <emphasis>Circ\r
- count</emphasis> and click <guibutton>OK</guibutton>. </para>\r
- <para><mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-9.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
-\r
- </informalfigure>\r
-\r
-\r
- </step>\r
- <step xml:id="create-template-add-field" xreflabel="Step">\r
- <para> Add other data to your report by going back to the\r
- <guilabel>Sources</guilabel> pane and selecting the desired fields. In this\r
- example, we are going to add <menuchoice>\r
- <guimenu>Circulating Item</guimenu>\r
- <guimenuitem>Shelving Location</guimenuitem>\r
- </menuchoice> to further refine the circulation report. </para>\r
- <informalfigure>\r
- <para>In the top left hand <guilabel>Sources</guilabel> pane, expand\r
- <guimenuitem>Circulation</guimenuitem>. Depending on your computer you\r
- will either click on the + sign or on an arrow to expand the tree. </para>\r
- <para><mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-10.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
-\r
- </informalfigure>\r
-\r
- </step>\r
- <step>\r
-\r
- <informalfigure>\r
- <para>Click on the + or arrow to expand <guimenuitem>Circulating\r
- Item</guimenuitem>. Select <guimenuitem>Shelving Location</guimenuitem>. </para>\r
- <para> <mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-11.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
-\r
- </informalfigure>\r
- <para>When you are creating a template take the shortest path to the field you need\r
- in the left hand <guilabel>Sources</guilabel> pane. Sometimes it is possible to\r
- find the same field name further in the file structure, but the shortest path is\r
- the most efficient. </para>\r
-\r
- </step>\r
-\r
- <step>\r
-\r
- <informalfigure>\r
- <para> In the <guilabel>Field Name</guilabel> pane select\r
- <guimenuitem>Name</guimenuitem>. </para>\r
- <para> <mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata width="100%" scalefit="1"\r
- fileref="../media/create-template-12.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
-\r
- </informalfigure>\r
-\r
- </step>\r
- <step>\r
- <informalfigure>\r
- <para>In the upper right <guilabel>Field Transform</guilabel> pane, select\r
- <guimenuitem>Raw Data</guimenuitem> and click <guibutton>Add Selected\r
- Fields</guibutton>. Use <guilabel>Raw Data</guilabel> when you do not\r
- wish to transform field data in any manner. </para>\r
- <para><mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata width="100%" scalefit="1"\r
- fileref="../media/create-template-13.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
-\r
- </informalfigure>\r
- </step>\r
-\r
-\r
- <step xml:id="create-template-step15" xreflabel="Create Templates Step 15">\r
- <informalfigure>\r
- <para>\r
- <guilabel>Name</guilabel> will appear in the bottom left pane. Select the\r
- <guilabel>Name</guilabel> row and click <guibutton>Alter Display\r
- Header</guibutton>. </para>\r
- <para> <mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-15.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
-\r
- </informalfigure>\r
- </step>\r
- <step>\r
- <informalfigure>\r
- <para> Enter a new, more descriptive column header, for example,\r
- <emphasis>Shelving location</emphasis>. Click <guibutton>OK</guibutton>. </para>\r
- <para><mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-16.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
-\r
- </informalfigure>\r
- </step>\r
- <step>\r
- <informalfigure>\r
- <para> Note that the order of rows (top to bottom) will correspond to the order\r
- of columns (left to right) on the final report. Select <guimenuitem>Shelving\r
- location</guimenuitem> and click on <guibutton>Move Up</guibutton> to\r
- move <guimenuitem>Shelving location</guimenuitem> before <guimenuitem>Circ\r
- count</guimenuitem>.</para>\r
- <para><mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-17.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
-\r
- </informalfigure>\r
- </step>\r
-\r
- <step>\r
- <informalfigure>\r
- <para>Return to the <guilabel>Sources</guilabel> pane to add more fields to your\r
- template. Under <guilabel>Sources</guilabel> click\r
- <guilabel>Circulation</guilabel>, then select <guilabel>Check Out\r
- Date/Time</guilabel> from the middle <guilabel>Field Name</guilabel>\r
- pane.</para>\r
- <para> <mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata width="100%" scalefit="1" fileref="../media/create-template-19.png"/>\r
- </imageobject>\r
- </mediaobject>\r
-</para>\r
-\r
- </informalfigure>\r
- </step>\r
-\r
- <step>\r
- <informalfigure>\r
- <para>Select <guimenuitem>Year + Month</guimenuitem> in the right hand\r
- <guilabel>Field Transform</guilabel> pane and click <guibutton>Add\r
- Selected Fields</guibutton></para>\r
- <para> <mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata width="100%" scalefit="1"\r
- fileref="../media/create-template-20.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
-\r
-\r
- </informalfigure>\r
-\r
- </step>\r
- <step>\r
- <informalfigure>\r
- <para>\r
- <guimenuitem>Check Out Date/Time</guimenuitem> will appear in the\r
- <guilabel>Displayed Fields</guilabel> pane. In the report it will appear\r
- as a year and month (YYYY-MM) corresponding to the selected tranform.</para>\r
- <para><mediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-21.png"/>\r
- </imageobject>\r
- </mediaobject></para>\r
- </informalfigure>\r
- </step>\r
-\r
- <step xml:id="create-template-step22" xreflabel="Create Templates Step 22">\r
- <informalfigure>\r
- <para>Select the <guimenuitem>Check Out Date/Time</guimenuitem> row. Click\r
- <guibutton>Alter Display Header</guibutton> and change the column header\r
- to <emphasis>Check out month</emphasis>.</para>\r
- <para> <mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-22.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
-\r
- </informalfigure>\r
- </step>\r
-\r
- <step>\r
- <informalfigure>\r
- <para>Move <guimenuitem>Check out month</guimenuitem> to the top of the list\r
- using the <guibutton>Move Up</guibutton> button, so that it will be the\r
- first column in an MS Excel spreadsheet or in a chart. Report output will\r
- sort by the first column.</para>\r
- <para><mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-23.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
- </informalfigure>\r
- </step>\r
-\r
- </procedure>\r
- <tip>\r
-\r
- <informalfigure>\r
-\r
- <para> Note the <guibutton>Change Transform</guibutton> button in the bottom left\r
- hand pane. It has the same function as the upper right <guilabel>Field\r
- Transform</guilabel> pane for fields that have already been added. </para>\r
-\r
-\r
-\r
- <para> <mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-24.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
- </informalfigure>\r
-\r
-\r
-\r
- </tip>\r
- </section>\r
-\r
- <section xml:id="create-template-filters">\r
- <info>\r
- <title>Applying Filters</title>\r
- </info>\r
-\r
- <para>Evergreen reports access the entire database, so to limit report output to a single\r
- library or library system you need to apply filters. </para>\r
-\r
- <para>After following the steps in the previous section you will see\r
- three fields in the bottom left hand <guilabel>Template Configuration</guilabel> pane.\r
- There are three tabs in this pane: <guilabel>Displayed Fields</guilabel> (covered in the\r
- previous section), <guilabel>Base Filters</guilabel> and <guilabel>Aggregate\r
- Filters</guilabel>. A filter allows you to return only the results that meet the\r
- criteria you set. </para>\r
-\r
- <para><guilabel>Base Filters</guilabel> apply to non-aggregate output types, while \r
- <guilabel>Aggregate Filters</guilabel> are used for aggregate types. In most reports you will be using the\r
- <guilabel>Base Filters</guilabel> tab. For more information on\r
- aggregate and non-aggregate types see\r
- <xref linkend="create-template-transforms"/>. </para>\r
-\r
-\r
- \r
- \r
- <para>There are many available <guilabel>operators</guilabel> when using filters. Some\r
- examples are <emphasis>Equals</emphasis>, <emphasis>In list</emphasis>, <emphasis>is\r
- NULL</emphasis>, <emphasis>Betwee</emphasis>, <emphasis>Greater than or equal\r
- to</emphasis>, and so on. <emphasis>In list</emphasis> is the most flexible\r
- operator, and in this case will allow you flexibility when running a report from this\r
- template. For example, it would be possible to run a report on a list of timestamps (in\r
- this case will be trimmed to year and month only), run a report on a single month, or\r
- run a report comparing two months. It is also possible to set up recurring reports to\r
- run at the end of each month.</para>\r
- <para>In this example we are going to use a <emphasis>Base Filter</emphasis> to filter out\r
- one library’s circulations for a specified time frame. The time frame in the template\r
- will be configured so that you can change it each time you run the report.</para>\r
-\r
- <procedure>\r
- <info>\r
- <title>Using Base Filters</title>\r
- </info>\r
-\r
- <step>\r
- <para>Select the <guilabel>Base Filters</guilabel> tab in the bottom\r
- <guilabel>Template Configuration</guilabel> pane. </para>\r
- </step>\r
-\r
- <step>\r
- <informalfigure>\r
- <para> For this circulation statistics example, select <menuchoice>\r
- <guimenu>Circulation </guimenu>\r
- <guisubmenu>Check Out Date/Time</guisubmenu>\r
- <guimenuitem>Year + Month</guimenuitem>\r
- </menuchoice> and click on <guibutton>Add Selected Fields</guibutton>. You\r
- are going to filter on the time period. </para>\r
- <para><mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata width="100%" scalefit="1" fileref="../media/create-template-25.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
- </informalfigure>\r
- </step>\r
- <step>\r
- <informalfigure>\r
- <para>Select <guimenuitem>Check Out Date/Time</guimenuitem>. Click on\r
- <guibutton>Change Operator</guibutton> and select <guimenuitem>In\r
- list</guimenuitem> from the dropdown menu. </para>\r
- <para> <mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-26.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
-\r
- </informalfigure>\r
- </step>\r
- <step xml:id="create-template-filter-step" xreflabel="above">\r
- <informalfigure>\r
- <para>To filter on the location of the circulation select <menuchoice>\r
- <guisubmenu>Circulation</guisubmenu>\r
- <guisubmenu> Circulating library</guisubmenu>\r
- <guimenuitem> Raw Data</guimenuitem>\r
- </menuchoice> and click on <guibutton>Add Selected Fields</guibutton>. </para>\r
- <para> <mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata width="100%" scalefit="1" fileref="../media/create-template-27.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
- </informalfigure>\r
- </step>\r
- <step>\r
- <informalfigure>\r
- <para>Select <guilabel>Circulating Library</guilabel> and click on\r
- <guibutton>Change Operator</guibutton> and select\r
- <guimenuitem>Equals</guimenuitem>. Note that this is a template, so the\r
- value for <emphasis>Equals</emphasis> will be filled out when you run the\r
- report </para>\r
- <para><mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-28.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
-\r
- </informalfigure>\r
- <para> For multi-branch libraries, you would select <emphasis>Circulating\r
- Library</emphasis> with <emphasis>In list</emphasis> as the operator, so you\r
- could specify the branch(es) when you run the report. This leaves the template\r
- configurable to current requirements. In comparison, sometimes you will want to\r
- hardcode true/false values into a template. For example, deleted bibliographic\r
- records remain in the database, so perhaps you want to hardcode deleted=false,\r
- so that deleted records don’t show up in the results. You might want to use\r
- deleted=true, for a template for a report on deleted items in the last month.\r
- </para>\r
- </step>\r
-\r
- <step>\r
- <informalfigure>\r
- <para>Once you have configured your template, you must name and save it. Name\r
- this template <emphasis>Circulations by month for one library</emphasis>.\r
- You can also add a description. In this example, the title is descriptive\r
- enough, so a description is not necessary. Click\r
- <guibutton>Save</guibutton>. </para>\r
- <para><mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-29.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
-\r
- </informalfigure>\r
- </step>\r
- <step>\r
- <informalfigure>\r
- <para> Click <guibutton>OK</guibutton>. </para>\r
- <para><mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-30.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
-\r
- </informalfigure>\r
- </step>\r
- <step>\r
- <informalfigure>\r
- <para> You will get a confirmation dialogue box that the template was\r
- successfully saved. Click <guibutton>OK</guibutton>. </para>\r
- <para><mediaobject>\r
- <alt>Screenshot of staff client report interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-31.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
-\r
- </informalfigure>\r
- </step>\r
- </procedure>\r
-\r
- <para> After saving it is not possible to edit a template. To make changes you will need to\r
- clone it and edit the clone</para>\r
- <tip>\r
-\r
-\r
-\r
- <informalfigure>\r
- <para> The bottom right hand pane is also a source specifier. By selecting one of\r
- these rows you will limit the fields that are visible to the sources you have\r
- specified. This may be helpful when reviewing templates with many fields. Use <keycombo>\r
- <keycap>Ctrl</keycap>\r
- <mousebutton>Click</mousebutton>\r
- </keycombo> to select or deselect items. </para>\r
-\r
- <para> <mediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-32.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
- </informalfigure>\r
-\r
-\r
- </tip>\r
- </section>\r
-\r
- \r
-\r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<chapter xml:id="report-exporting-report-templates-using-phpPgAdmin" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
- <info>\r
- <title>Exporting Report Templates Using phpPgAdmin</title>\r
- </info>\r
- <para>Once the data is exported. Database Administrators/Systems Administrators can easily import this data into the templates folder to make it available in the client.</para>\r
- <simplesect xml:id="dump-entire-reports-template-table">\r
- <title>Dump the Entire Reports Template Table</title>\r
- <para>The data exported in this method can create issues importing into a different system if you do not have a matching folder and owner. This is going to export report templates created in your system. The most important fields for importing into the new system are <emphasis>name</emphasis>, <emphasis>description</emphasis>, and <emphasis>data</emphasis>. Data defines the actual structure of the report. The <emphasis>owner</emphasis> and <emphasis>folder</emphasis> fields will unique to the system they were exported from and will have to be altered to ensure they match the appropriate owner and folder information for the new system.</para>\r
- \r
- <orderedlist>\r
- <listitem>Go to the <emphasis role="bold">Reporter</emphasis> schema. Report templates are located in the <emphasis role="bold">Template</emphasis> table</listitem>\r
- <listitem>Click on the link to the <emphasis role="bold">Template</emphasis> table</listitem>\r
- <listitem>Click the <emphasis role="bold">export</emphasis> button at the top right of the phpPgAdmin screen</listitem>\r
- <listitem>Make sure the following is selected\r
- <orderedlist>\r
- <listitem>Data Only (checked)</listitem>\r
- <listitem>Format: Select CSV or Tabbed did get the data in a text format</listitem>\r
- <listitem>Download checked</listitem>\r
- </orderedlist>\r
- </listitem>\r
- <listitem>Click export button at the bottom</listitem>\r
- <listitem>A text file will download to your local system</listitem>\r
- </orderedlist>\r
-\r
- </simplesect>\r
- <simplesect xml:id="dump-data-sql-statement">\r
- <title>Dump Data with an SQL Statement</title>\r
- <para>The following statement could be used to grab the data in the folder and dump it with admin account as the owner and the first folder in your system.</para>\r
- <screen>SELECT 1 as owner, name, description, data, 1 as folder FROM reporter.template</screen>\r
- <para>or use the following to capture your folder names for export</para>\r
- <screen>SELECT 1 as owner, t.name, t.description, t.data, f.name as folder FROM reporter.template t JOIN reporter.template_folder f ON t.folder=f.id</screen>\r
- \r
- <orderedlist>\r
- <listitem>Run the above query</listitem>\r
- <listitem>Click the <emphasis role="bold">download</emphasis> link at the bottom of the page</listitem>\r
- <listitem>Select the file format (CSV or Tabbed)</listitem>\r
- <listitem>Check download</listitem>\r
- <listitem>A text file with the report template data will be downloaded.</listitem>\r
- </orderedlist>\r
- \r
- </simplesect>\r
-</chapter>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<chapter xml:id="folder" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
- <info>\r
- <title>Folders</title>\r
- </info>\r
- <para>There are three main components to reports: <guilabel>Templates</guilabel>, <guilabel>Reports</guilabel>, and <guilabel>Output</guilabel>. Each of these\r
- components must be stored in a folder. Folders can be private (accessible to your login only) or shared with other staff at your library, other libraries in your system or consortium. It is also possible to selectively share only certain folders and/or subfolders. </para>\r
-\r
- <informalfigure>\r
- <para>There are two parts to the folders pane. The <guilabel>My Folders</guilabel> section\r
- contains folders created with your Evergreen account. Folders that other users have\r
- shared with you appear in the <guilabel>Shared Folders</guilabel> section under the username of the sharing account.</para>\r
- \r
- <para>\r
- <mediaobject>\r
- <alt>Screenshot of reports interface</alt>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/folder-1.png"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
-\r
-\r
- <section xml:id="report-folder-creating">\r
-\r
- <info>\r
- <title>Creating Folders</title>\r
- </info>\r
- <para>Whether you are creating a report from scratch or working from a shared template you must first create at least one folder.</para>\r
- \r
- <para>The steps for creating folders are similar for each reporting function. It is easier\r
- to create folders for templates, reports, and output all at once at the beginning, though it is\r
- possible to do it before each step. This example demonstrates creating a folder for a template. </para>\r
-\r
-\r
- <procedure>\r
- <step>\r
- <para>Click on <guilabel>Templates</guilabel> in the <guilabel>My Folders section</guilabel>. </para>\r
- </step>\r
-\r
- <step>\r
- <para>Name the folder. Select <guimenuitem>Share</guimenuitem> or\r
- <guimenuitem>Do not share</guimenuitem> from the dropdown menu.</para>\r
- </step>\r
-\r
- <step>\r
- <para>If you want to share your folder, select who you want to share this folder\r
- with from the dropdown menu. </para>\r
- </step>\r
-\r
- <step>\r
- \r
- <para>Click <guibutton>Create Sub Folder</guibutton>. </para>\r
- </step>\r
- <step>\r
- <para>Click <guibutton>OK</guibutton>.</para>\r
- </step>\r
-\r
- <step>\r
- <para>Next, create a folder for the report definition to be saved to. Click on\r
- <guilabel>Reports</guilabel>.</para>\r
- </step>\r
- <step>\r
- <para>Repeat steps 2-5 to create a <guilabel>Reports</guilabel> folder also called <guilabel>Circulation</guilabel>. </para>\r
- </step>\r
- <step>\r
- \r
- <para>Finally, you need to create a folder for the report’s output to be saved\r
- in. Click on <guilabel> Output</guilabel>.</para>\r
- </step>\r
- <step>\r
- <para>Repeat steps 2-5 to create an <guilabel>Output</guilabel> folder named <guilabel>Circulation</guilabel>.</para>\r
- </step>\r
- </procedure>\r
- <tip>\r
- <para>Using a parallel naming scheme for folders in <guilabel>Templates</guilabel>, <guilabel>Reports</guilabel>, and <guilabel>Output</guilabel> helps keep your reports organized and easier to find</para>\r
- </tip>\r
- <para>The folders you just created will now be visible by clicking the arrows in\r
- <guilabel>My Folders</guilabel>. Bracketed after the folder name is whom the\r
- folder is shared with. For example, <guilabel>Circulation (BNCLF)</guilabel>\r
- is shared with the North Coast Library Federation.\r
- If it is not a shared folder there will be nothing after the folder name. You may create as many folders and sub-folders as you like.</para>\r
- </section>\r
- <section xml:id="report-managing-folder">\r
- <info>\r
- <title>Managing Folders</title>\r
- </info>\r
- <para>Once a folder has been created you can change the name, delete it, create a new\r
- subfolder, or change the sharing settings. This example demonstrates changing a folder name; the\r
- other choices follow similar steps</para>\r
- <procedure>\r
- <step>\r
- <para>Click on the folder that you wish to rename.</para>\r
- </step>\r
-\r
- <step>\r
- <para>Click <guilabel>Manage Folder</guilabel>. </para>\r
- </step>\r
- <step>\r
- <para>Select <guimenuitem>Change folder name</guimenuitem> from the dropdown menu\r
- and click <guibutton>Go</guibutton>. </para>\r
- </step>\r
-\r
- <step>\r
- <para>Enter the new name and click <guibutton>Submit</guibutton></para>\r
- </step>\r
-\r
- <step>\r
- <para>Click <guibutton>OK</guibutton>. </para>\r
- </step>\r
-\r
- <step>\r
- <para>You will get a confirmation box that the Action Succeeded. Click\r
- <guibutton>OK</guibutton>.</para>\r
- </step>\r
- </procedure>\r
- </section>\r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<chapter xml:id="generate-report" xreflabel="Generating Reports from Templates"\r
- xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
-\r
- <info>\r
-\r
- <title>Generating Reports from Templates</title>\r
- </info>\r
-\r
- <para>Now you are ready to run the report from the template you have created. </para>\r
-\r
- \r
- <procedure>\r
-\r
- <step>\r
- <informalfigure>\r
- <para>In the <guilabel>My Folders</guilabel> section click the arrow next to\r
- <guimenu>Templates </guimenu>to expand this folder and select\r
- <guimenuitem>circulation</guimenuitem>.</para>\r
-\r
- <para><mediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/generate-report-1.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
- </informalfigure>\r
- </step>\r
-\r
- <step>\r
- <informalfigure><para>Select the box beside <guilabel>Circulations by month for one\r
- library</guilabel>. Select <guimenuitem>Create a new report from selected\r
- template </guimenuitem>from the dropdown menu. Click\r
- <guibutton>Submit</guibutton>. </para>\r
-\r
-\r
-\r
- <para> <mediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/generate-report-2.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para></informalfigure>\r
- </step>\r
- <step>\r
- <informalfigure>\r
- <para>Complete the first part of report settings. Only <guilabel>Report\r
- Name</guilabel> <inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../../media/1.png"/>\r
- </imageobject>\r
- </inlinemediaobject> and <guilabel>Choose a folder...</guilabel> <inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../../media/6.png"/>\r
- </imageobject>\r
- </inlinemediaobject> are required\r
- fields.</para>\r
-\r
- <para><mediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/generate-report-3.png"/>\r
- </imageobject>\r
- </mediaobject></para>\r
- </informalfigure>\r
-\r
- <para>\r
- <inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../../media/1.png"/>\r
- </imageobject>\r
- </inlinemediaobject>\r
- <guilabel>Template Name, Template Creator</guilabel>, and <guilabel>Template\r
- Description</guilabel> are for informational purposes only. They are hard\r
- coded when the template is created. At the report definition stage it is not\r
- possible to change them.</para>\r
-\r
-\r
- <para>\r
- <inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../../media/2.png"/>\r
- </imageobject>\r
- </inlinemediaobject>\r
- <guilabel>Report Name</guilabel> is required. Reports stored in the same folder\r
- must have unique names.</para>\r
-\r
-\r
- <para>\r
- <inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../../media/3.png"/>\r
- </imageobject>\r
- </inlinemediaobject>\r
- <guilabel>Report Description</guilabel> is optional but may help distinguish\r
- among similar reports. </para>\r
-\r
- <para>\r
- <inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../../media/4.png"/>\r
- </imageobject>\r
- </inlinemediaobject>\r
- <guilabel>Report Columns</guilabel> lists the columns that will appear in the\r
- output. This is derived from the template and cannot be changed during report\r
- definition.</para>\r
-\r
- <para>\r
- <inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../../media/5.png"/>\r
- </imageobject>\r
- </inlinemediaobject>\r
- <guilabel>Pivot Label Column</guilabel> and <guilabel>Pivot Data\r
- Column</guilabel> are optional. Pivot tables are a different way to view\r
- data. If you currently use pivot tables in <application>MS Excel</application>\r
- it is better to select an <application>Excel</application> output and continue\r
- using pivot tables in <application> Excel</application>.</para>\r
-\r
- <para>\r
- <inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../../media/6.png"/>\r
- </imageobject>\r
- </inlinemediaobject> You must choose a report folder to store this report\r
- definition. Only report folders under <guilabel>My Folders</guilabel> are\r
- available. Click on the desired folder to select it.</para>\r
-\r
- </step>\r
- \r
-\r
- <step>\r
- <informalfigure>\r
- <para>Select values for the <guilabel>Circulation > Check Out\r
- Date/Time</guilabel>. Use the calendar widget or manually enter the\r
- desired dates, then click <guibutton>Add</guibutton> to include the date on\r
- the list. You may add multiple dates.</para>\r
- <para>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/generate-report-8.png"/>\r
-\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- <para>The <guilabel>Transform</guilabel> for this field is <guilabel>Year +\r
- Month</guilabel>, so even if you choose a specific date (2009-10-20) it will\r
- appear as the corresponding month only (2009-10).</para>\r
-\r
- <para>It is possible to select <emphasis role="bold">relative dates</emphasis>. If\r
- you select a relative date <emphasis>1 month ago</emphasis> you can schedule\r
- reports to automatically run each month. If you want to run monthly reports that\r
- also show comparative data from one year ago, select a relative date <emphasis>1\r
- month ago</emphasis>, and <emphasis>13 months ago</emphasis>. </para>\r
-\r
- </step>\r
-\r
-\r
-\r
- <step>\r
- <para>Select a value for the <guilabel>Circulating Library</guilabel>.</para>\r
- </step>\r
-\r
- <step>\r
- <informalfigure>\r
- <para>Complete the bottom portion of the report definition interface, then click\r
- <guibutton>Save</guibutton>.</para>\r
-\r
- <para>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/generate-report-10.png"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
-\r
- <para>\r
- <inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../../media/1.png"/>\r
- </imageobject>\r
- </inlinemediaobject> Select one or more output formats. In this example the\r
- report output will be available as an <application>Excel</application>\r
- spreadsheet, an HTML table (for display in the staff client or browser), and as\r
- a bar chart.</para>\r
-\r
-\r
- <para>\r
- <inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../../media/2.png"/>\r
- </imageobject>\r
- </inlinemediaobject> If you want the report to be recurring, check the box and\r
- select the <guilabel>Recurrence Interval</guilabel> as described in <link\r
- linkend="recurring-report">Recurring Reports</link>. In this\r
- example, as this is a report that will only be run once, the <guilabel>Recurring\r
- Report</guilabel> box is not checked. </para>\r
-\r
-\r
- <para>\r
- <inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../../media/3.png"/>\r
- </imageobject>\r
- </inlinemediaobject> Select <guilabel>Run as soon as possible</guilabel> for\r
- immediate output. It is also possible to set up reports that run automatically\r
- at future intervals. </para>\r
-\r
- <para>\r
- <inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../../media/4.png"/>\r
- </imageobject>\r
- </inlinemediaobject> It is optional to fill out an email address where a\r
- completion notice can be sent. The email will contain a link to\r
- password-protected report output (staff login required). If you have an email\r
- address in your Local System Administrator account it will automatically appear\r
- in the email notification box. However, you can enter a different email address\r
- or multiple addresses separated by commas.</para>\r
-\r
- <para>\r
- <inlinemediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../../media/5.png"/>\r
- </imageobject>\r
- </inlinemediaobject> Select a folder for the report's output.</para>\r
-\r
- </step>\r
-\r
-\r
-\r
-\r
-\r
-\r
- <step>\r
- <informalfigure>\r
- <para>You will get a confirmation dialogue box that the <guilabel>Action\r
- Succeeded</guilabel>. Click <guibutton>OK</guibutton>. </para>\r
-\r
- <para>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/generate-report-14.png"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </step>\r
- </procedure>\r
-\r
- <para>Once saved, reports stay there forever unless you delete them.</para>\r
-\r
-\r
- \r
-\r
-\r
- \r
-\r
-\r
-\r
-\r
-\r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<chapter xml:id="recurring-report" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
-\r
-<info><title>Running Recurring Reports</title></info>\r
-\r
-\r
- <para>Recurring reports are a useful way to save time by scheduling reports that you run on\r
- a regular basis, such as monthly circulation and monthly patron registration\r
- statistics. When you have set up a report to run on a monthly basis you’ll get an email\r
- informing you that the report has successfully run. You can click on a link in the\r
- email that will take you directly to the report output. You can also access\r
- the output through the reporter interface as described in <xref linkend="view-output"\r
- />.</para>\r
- \r
- <para>To set up a monthly recurring report follow the procedure in <xref\r
- linkend="generate-report"/> but make the changes described below.</para>\r
- <procedure>\r
- \r
- <step>\r
- \r
- <para>Select the <guilabel>Recurring Report</guilabel> check-box and set the\r
- recurrence interval to 1 month.</para>\r
- </step>\r
- \r
- <step>\r
- \r
- <para>Do not select <guilabel>Run ASAP</guilabel>. Instead schedule the report\r
- to run early on the first day of the next month. Enter the date in\r
- YYYY-MM-DD format. </para>\r
- </step>\r
- \r
- <step>\r
- <para>Ensure there is an email address to receive completion emails. You will\r
- receive an email completion notice each month when the output is ready. </para>\r
- \r
- </step>\r
- <step>\r
- <para>Select a folder for the report’s output. </para>\r
- </step>\r
- \r
- <step>\r
- <para>Click <guibutton>Save Report</guibutton>.</para>\r
- </step>\r
- <step>\r
- <para>You will get a confirmation dialogue box that the <guilabel>Action\r
- Succeeded</guilabel>. Click <guibutton>OK</guibutton>. </para>\r
- </step>\r
- </procedure>\r
- \r
- <para> You will get an email on the 1st of each month with a link to the report\r
- output. By clicking this link it will open the output in a web browser. It is\r
- still possible to login to the staff client and access the output in\r
- <guilabel>Output</guilabel> folder. </para>\r
- \r
- <formalpara>\r
- <title>How to stop or make changes to an existing recurring report?</title>\r
- <para>Sometimes you may wish to stop or make changes to a recurring report, e.g. the\r
- recurrence interval, generation date, email address to receive completion email,\r
- output format/folder or even filter values (such as the number of days overdue). You\r
- will need to delete the current report from the report folder, then use the above\r
- procedure to set up a new recurring report with the desired changes. Please note\r
- that deleting a report also deletes all output associated with it.</para>\r
- </formalpara>\r
- <tip>\r
- <para>Once you have been on Evergreen for a year, you could set up your recurring\r
- monthly reports to show comparative data from one year ago. To do this select \r
- relative dates of 1 month ago and 13 months ago. </para>\r
- </tip>\r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<chapter xml:id="report-introduction" xmlns="http://docbook.org/ns/docbook" version="5.0"\r
- xml:lang="EN" xmlns:xi="http://www.w3.org/2001/XInclude"\r
- xmlns:xlink="http://www.w3.org/1999/xlink">\r
- <info>\r
- <title>Reports overview</title>\r
- </info>\r
- <para>The reports interface is accessed from the <guimenu>Admin (-)</guimenu> menu, under <menuchoice>\r
- <guimenu>Local Administration</guimenu>\r
- <guimenuitem>Reports</guimenuitem>\r
- </menuchoice>.</para>\r
- <para>Only users with Local System Administration permissions can create reports but the output\r
- is visible to all staff accounts. Reports are owned by the account used to create them, though it is possible to share reports with other staff in your library, other libraries or the entire system or consortium. </para>\r
-\r
- <para>Evergreen has very powerful reporting functionality. It is possible to report on almost\r
- every field in every table in the database. The reporting interface tries to make\r
- navigating the database structure easier by pointing at the main database tables.</para>\r
-\r
- <para>These chapters demonstrate how to create reports in Evergreen by introducing the\r
- basic concepts of the reporting function. Once you understand how to navigate around the\r
- reports interface, you can create your own reports from scratch or take advantage of report templates.</para>\r
-\r
- <para>There are four aspects to creating a report in Evergreen: building a template, choosing a\r
- template, defining a report, and running a report to create output. Before anything else you must create at least one <guilabel>Template</guilabel>, <guilabel>Report</guilabel>, and\r
- <guilabel>Output</guilabel> folder as described in <xref linkend="folder"/>. \r
- \r
- </para>\r
-\r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<chapter xml:id="shared-template" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
- <info>\r
- <title>Cloning Shared Templates</title>\r
- </info>\r
- <para> This chapter describes how\r
- to make local copies of shared templates for routine reports or as a starting point for\r
- customization. When creating a new template it is a good idea to review the shared templates\r
- first: even if the exact template you need does not exist it is often faster to modify an\r
- existing template than to build a brand new one. A Local System Administrator account is\r
- required to clone templates from the <guilabel>Shared Folders</guilabel> section and save them\r
- to <guilabel>My Folders</guilabel>. </para>\r
- <para>The steps below assume you have already created at least one <guilabel>Templates</guilabel>\r
- folder. If you haven’t done this, please see <xref linkend="folder"/>. </para>\r
-\r
- <procedure>\r
- <step>\r
- <para>Access the reports interface from the <guimenu>Admin (-)</guimenu> menu under <menuchoice>\r
- <guimenu>Local Administration</guimenu>\r
- <guimenuitem>Reports</guimenuitem>\r
- </menuchoice></para>\r
- </step>\r
-\r
- <step>\r
- <para>Under <guilabel>Shared Folders</guilabel> expand the\r
- <guilabel>Templates</guilabel> folder and the subfolder of the report you wish to clone. To expand the folders click on\r
- the grey arrow or folder icon. Do not click on the blue underlined hyperlink. </para>\r
- </step>\r
- <step>\r
- <para>Click on the subfolder.</para>\r
-</step>\r
- <step>\r
- <informalfigure>\r
- <para>Select the template you wish to clone. From the\r
- dropdown menu choose <guimenuitem>Clone selected templates</guimenuitem>, then click\r
- <guibutton>Submit</guibutton>. </para>\r
-\r
- <para>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/shared-template-6.png"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- <para>By default Evergreen only displays the first 10 items in any folder. To view all content, change the <guilabel>Limit output</guilabel> setting from <guimenuitem>10</guimenuitem> to <guimenuitem>All</guimenuitem>.</para> \r
- </step>\r
- <step>\r
- <informalfigure>\r
- <para>Choose the folder where you want to save the cloned template, then click\r
- <guibutton>Select Folder</guibutton>. Only template folders created with your\r
- account will be visible. If there are no folders to choose from please see <xref\r
- linkend="folder"/>.</para>\r
-\r
- <para>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/shared-template-7.png"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </step>\r
-\r
-\r
- <step>\r
- <informalfigure>\r
- <para>The cloned template opens in the template editor. From here you may modify the\r
- template by adding, removing, or editing fields and filters as described in <xref\r
- linkend="create-template"/>. Template <guilabel>Name</guilabel> and\r
- <guilabel>Description</guilabel> can also be edited. When satisfied with your\r
- changes click <guibutton>Save</guibutton>.</para>\r
-\r
- <para>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata width="100%" scalefit="1" fileref="../media/shared-template-9.png"/>\r
- </imageobject>\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </step>\r
- <step> \r
- <para>Click OK in the resulting confirmation windows.</para> \r
- </step>\r
- </procedure>\r
- <para>Once saved it is not possible to edit a template. To make changes, clone a template and change the clone.\r
- </para>\r
-\r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<chapter xml:id="report_starting_reporter_service" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
- <info>\r
- <title>Starting and Stopping the Reporter Daemon</title>\r
- </info>\r
- <para>Before you can view reports, the Evergreen administrator must start the reporter daemon from the command line of the Evergreen server.</para>\r
- <para>The reporter daemon periodically checks for requests for new reports or scheduled reports and gets them running.</para>\r
- \r
- <simplesect xml:id="startingreporter">\r
- <title>Starting the Reporter Daemon</title>\r
- <para>To start the reporter daemon, run the following command as the opensrf user:</para>\r
- <screen>clark-kent.pl --daemon</screen>\r
- <para>You can also specify other options:</para>\r
- <itemizedlist>\r
- <listitem>sleep=interval : number of seconds to sleep between checks for new reports to run; defaults to 10</listitem>\r
- <listitem>lockfile=filename : where to place the lockfile for the process; defaults to /tmp/reporter-LOCK</listitem>\r
- <listitem>concurrency=integer : number of reporter daemon processes to run; defaults to 1</listitem> \r
- <listitem>boostrap=filename : OpenSRF bootstrap configuration file; defaults to /openils/conf/opensrf_core.xml</listitem> \r
- </itemizedlist>\r
- <note>\r
- <para>The open-ils.reporter process must be running and enabled on the gateway before the reporter daemon can be started.</para>\r
- <para>Remember that if the server is restarted, the reporter daemon will need to be restarted before you can view reports unless you have configured your server to start the daemon \r
- automatically at start up time.</para></note>\r
- </simplesect>\r
- <simplesect xml:id="stoppingreporter">\r
- <title>Stopping the Reporter Daemon</title>\r
- <para>To stop the reporter daemon, you have to kill the process and remove the lockfile. Assuming you're running just a single process and that the lockfile is \r
- in the default location, perform the following commands as the opensrf user:</para>\r
- <screen>kill `ps wax | grep "Clark Kent" | grep -v grep | cut -b1-6`</screen>\r
- <screen>rm /tmp/reporter-LOCK</screen>\r
- </simplesect>\r
-</chapter>\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<chapter xml:id="template-terminology" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
- <info>\r
- <title>Template Terminology</title>\r
- </info>\r
- <para> </para> \r
- <simplesect xml:id="create-template-datatypes">\r
- <info>\r
- <title>Data Types</title>\r
- </info> \r
- <informalfigure> <para>The central column of the <guilabel>Database Source Browser</guilabel> lists\r
- <guilabel>Field Name</guilabel> and <guilabel>Data Type</guilabel> for the\r
- selected database table. </para>\r
- <para><mediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-33.png"/>\r
- </imageobject> \r
- </mediaobject></para> \r
- </informalfigure>\r
- <para>Each data type has its own characteristics and uses:</para>\r
- <informaltable>\r
- <tgroup cols="3" align="left" colsep="1" rowsep="1">\r
- <colspec colnum="1" colname="type" colwidth="1.0*"/>\r
- <colspec colnum="2" colname="description" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="notes" colwidth="2.0*"/>\r
- <thead>\r
- <row>\r
- <entry>Data Type</entry>\r
- <entry>Description</entry>\r
- <entry>Notes</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- <row>\r
- <entry>id</entry>\r
- <entry>Unique number assigned by the database to identify a\r
- record</entry>\r
- <entry>A number that is a meaningful reference for the database but not of much use to a human user. Use in <guilabel>displayed fields</guilabel> when counting\r
- records or in filters.</entry>\r
- </row>\r
- <row>\r
- <entry>text</entry>\r
- <entry>Text field</entry>\r
- <entry>Usually uses the <guilabel>Raw Data</guilabel> transform.</entry>\r
- </row>\r
- <row>\r
- <entry>timestamp</entry>\r
- <entry>Exact date and time</entry>\r
- <entry>Select appropriate date/time transform. <guilabel>Raw\r
- Data</guilabel> includes second and timezone information, usually more than is required for a report.</entry>\r
- </row>\r
- <row>\r
- <entry>bool</entry>\r
- <entry>True or False</entry>\r
- <entry>Commonly used to filter out deleted item or patron records.</entry>\r
- </row>\r
- <row>\r
- <entry>org_unit</entry>\r
- <entry>A number representing a library, library system, or\r
- federation</entry>\r
- <entry>When you want to filter on a library, make sure that the field\r
- name is on an <guilabel>org_unit</guilabel> or <guilabel>id</guilabel> data type.</entry>\r
- </row>\r
- <row>\r
- <entry>link</entry>\r
- <entry>A link to another database table</entry>\r
- <entry><guilabel>Link</guilabel> outputs a number that is a meaningful\r
- reference for the database but not of much use to a human user. You\r
- will usually want to drill further down the tree in the\r
- <guilabel>Sources</guilabel> pane and select fields from the\r
- linked table. However, in some instances you might\r
- want to use a <guilabel>link</guilabel> field. For example, to count the number of patrons who borrowed items you could do\r
- a count on the <guilabel>Patron</guilabel> <guilabel>link</guilabel> data.</entry>\r
- </row>\r
- <row>\r
- <entry>int</entry>\r
- <entry>Integer</entry>\r
- <entry/>\r
- </row>\r
- <row>\r
- <entry>money</entry>\r
- <entry>Number (in dollars)</entry>\r
- <entry/>\r
- </row>\r
- </tbody>\r
- </tgroup>\r
- </informaltable>\r
- </simplesect>\r
- <simplesect xml:id="create-template-transforms">\r
- <info>\r
- <title>Field Transforms</title>\r
- </info>\r
- <informalfigure> <para>A <guilabel>Field Transform</guilabel> tells the reporter how to process a field\r
- for output. Different data types have different transform options. </para>\r
- <para> <mediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-34.png"/>\r
- </imageobject>\r
- </mediaobject></para></informalfigure>\r
- \r
- \r
- <formalpara><title>Raw Data</title><para> To display a field exactly as it appears in\r
- the database use the <guilabel>Raw Data</guilabel> transform, available for all data\r
- types.</para></formalpara>\r
- \r
- <formalpara><title><guilabel>Count</guilabel> and <guilabel>Count Distinct</guilabel></title><para> These transforms\r
- apply to the <guilabel>id</guilabel> data type and are used to count database\r
- records (e.g. for circulation statistics). Use <guimenuitem>Count</guimenuitem> to\r
- tally the total number of records. Use <guilabel>Count Distinct</guilabel> to count\r
- the number of unique records, removing duplicates. </para></formalpara>\r
- <para>To demonstrate the difference between <guilabel>Count</guilabel> and\r
- <guilabel>Count Distinct</guilabel>, consider an example where you want to know\r
- the number of active patrons in a given month, where <emphasis>active</emphasis>\r
- means they borrowed at least one item. Each circulation is linked to a Patron ID, a\r
- number identifying the patron who borrowed the item. If we use the <guilabel>Count\r
- Distinct</guilabel> transform for Patron IDs we will know the number of unique\r
- patrons who circulated at least one book (2 patrons in the table below). If instead,\r
- we use <guilabel>Count</guilabel>, we will know how many books were circulated,\r
- since every circulation is linked to a patron ID and duplicate values are also\r
- counted. To identify the number of active patrons in this example the\r
- <guilabel>Count Distinct</guilabel> transform should be used.</para>\r
- \r
- <informaltable>\r
- \r
- <tgroup cols="3" align="left" colsep="1" rowsep="1">\r
- <colspec colnum="1" colname="title" colwidth="2.0*"/>\r
- <colspec colnum="2" colname="id" colwidth="1.0*"/>\r
- <colspec colnum="3" colname="name" colwidth="1.0*"/>\r
- \r
- <thead>\r
- <row>\r
- <entry>Title</entry>\r
- <entry> Patron ID</entry>\r
- <entry> Patron Name</entry>\r
- </row>\r
- </thead>\r
- <tbody>\r
- <row>\r
- <entry> Harry Potter and the Chamber of Secrets</entry>\r
- <entry> 001</entry>\r
- <entry> John Doe</entry>\r
- </row>\r
- \r
- <row>\r
- <entry> Northern Lights</entry>\r
- <entry> 001</entry>\r
- <entry> John Doe</entry>\r
- </row>\r
- <row>\r
- <entry> Harry Potter and the Philosopher’s Stone</entry>\r
- <entry> 222</entry>\r
- <entry> Jane Doe</entry>\r
- </row>\r
- \r
- </tbody>\r
- </tgroup>\r
- </informaltable> \r
- <informalfigure>\r
- <formalpara><title>Output Type</title><para> Note that each transform has either an <guilabel>Aggregate</guilabel> or\r
- <guilabel>Non-Aggregate</guilabel> output type. </para></formalpara>\r
- \r
- <para> <mediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/create-template-35.png"/>\r
- </imageobject>\r
- </mediaobject></para>\r
- </informalfigure>\r
- <para> Selecting a <guilabel>Non-Aggregate</guilabel> output type will return one row of\r
- output in your report for each row in the database. Selecting an\r
- <guilabel>Aggregate</guilabel> output type will group together several rows of\r
- the database and return just one row of output with, say, the average value or the\r
- total count for that group. Other common aggregate types include minimum, maximum,\r
- and sum. </para>\r
- <para>When used as filters, non-aggregate and aggregate types correspond to <guilabel>Base</guilabel> and <guilabel>Aggregate</guilabel> filters respectively. To see the difference between a base filter and an aggregate filter, imagine that\r
- you are creating a report to count the number of circulations in January. This would\r
- require a base filter to specify the month of interest because the month is a\r
- non-aggregate output type. Now imagine that you wish to list all items with more\r
- than 25 holds. This would require an aggregate filter on the number of holds per\r
- item because you must use an aggregate output type to count the holds.</para> \r
- </simplesect> \r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<chapter xml:id="view-output" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
-\r
- <info>\r
-\r
- <title>Viewing Report Output</title>\r
- </info>\r
-\r
- <para>When a report runs Evergreen sends an email with a link to the output to the address\r
- defined in the report. Output is also stored in the specified <guilabel>Output</guilabel>\r
- folder and will remain there until manually deleted.</para>\r
-\r
- <procedure>\r
-\r
- <step>\r
- <para>To view report output in the staff client, open the reports interface from <menuchoice>\r
- <guimenu>Admin (-)</guimenu>\r
- <guisubmenu>Local Administration</guisubmenu>\r
- <guimenuitem>Reports</guimenuitem>\r
- </menuchoice></para>\r
- </step>\r
- <step>\r
- <informalfigure>\r
- <para>Click on <guimenu>Output</guimenu> to expand the folder. Select\r
- <guimenuitem>Circulation</guimenuitem> (where you just saved the\r
- <emphasis>circulation report output</emphasis>). </para>\r
-\r
- <para>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/view-output-1.png"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </step>\r
-\r
- <step>\r
- <para><guimenuitem>View report output</guimenuitem> is the default selection in the\r
- dropdown menu. Select <guilabel>Recurring Monthly Circ by Location</guilabel> by\r
- clicking the checkbox and click <guibutton>Submit</guibutton>. </para>\r
-\r
-\r
-\r
- <para>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/view-output-2.png"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </step>\r
- <step>\r
- <para>A new tab will open for the report output. Select either <guilabel>Tabular\r
- Output</guilabel> or <guilabel>Excel Output</guilabel>. If <guilabel>Bar\r
- Charts</guilabel> was selected during report definition the chart will also\r
- appear.</para> \r
- </step>\r
-\r
- <step>\r
- <para> Tabular output looks like this: </para>\r
-\r
-\r
-\r
- <para><mediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/view-output-4.png"/>\r
- </imageobject>\r
-\r
- </mediaobject></para>\r
- </step>\r
-\r
-\r
- <step>\r
- <informalfigure>\r
- <para>If you want to manipulate, filter or graph this data, Excel output would be\r
- more useful. Excel output looks like this in Excel: </para>\r
- <para>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata scalefit="0" fileref="../media/view-output-5.png"/>\r
- </imageobject>\r
-\r
- </mediaobject>\r
- </para>\r
- </informalfigure>\r
- </step>\r
- </procedure>\r
-\r
-\r
-\r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"\r
- xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:id="acquistions">\r
- <title>The Acquisitions Module</title> \r
- <simpara>Before beginning to use Acquisitions, the following must be configured by an administrator:</simpara>\r
- <itemizedlist>\r
- <listitem><simpara>Currency Types (defaults exist)</simpara></listitem>\r
- <listitem><simpara>Exchange Rates (defaults exist)</simpara></listitem>\r
- <listitem><simpara>Funds</simpara></listitem>\r
- <listitem><simpara>Providers</simpara></listitem>\r
- <listitem><simpara>EDI Accounts (optional)</simpara></listitem>\r
- <listitem><simpara>Claiming (optional)</simpara></listitem>\r
- <listitem><simpara>Invoices</simpara></listitem>\r
- <listitem><simpara>Distribution Formulas (optional)</simpara></listitem>\r
- <listitem><simpara>Line Item Features (optional)</simpara></listitem>\r
- <listitem><simpara>Cancel/Suspend Reasons (optional)</simpara></listitem>\r
- <listitem><simpara>See the section on <link linkend="acquisitions-module_admin_functions">administrative functions in the acquisitions module</link> for details on acquisitions setup.</simpara></listitem>\r
- </itemizedlist>\r
- <section id="_brief_records">\r
- <title>Brief Records</title>\r
- <simpara>Brief records are short bibliographic records with minimal information that are often used as placeholder records until items are received. Brief records can be added to \r
- selection lists or purchase orders and can be imported into the catalog. You can add brief records to new or existing selection lists. You can add brief records to new, pending \r
- or on-order purchase orders.</simpara>\r
- <simplesect id="_add_brief_records_to_a_selection_list">\r
- <title>Add brief records to a selection list</title>\r
- <procedure>\r
- <step><simpara>Click <menuchoice><guimenu>Acquisitions</guimenu><guimenuitem>New Brief Record</guimenuitem></menuchoice>. You can also add brief records to an \r
- existing selection list by clicking the <guilabel>Actions</guilabel> menu on the selection list \r
- and choosing <guilabel>Add Brief Record</guilabel>.</simpara></step>\r
- <step><simpara>Choose a selection list from the drop down menu, or enter the name of a new selection list.</simpara></step>\r
- <step><simpara>Enter bibliographic information in the desired fields.</simpara></step>\r
- <step><simpara>Click <guibutton>Save Record</guibutton>.</simpara></step>\r
- </procedure>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_brief_record.png"/></imageobject>\r
- </simplesect>\r
- <simplesect id="_add_brief_records_to_purchase_orders">\r
- <title>Add brief records to purchase orders</title>\r
- <simpara>You can add brief records to new or existing purchase orders.</simpara>\r
- <procedure>\r
- <step><simpara>Open or create a purchase order. See the section on <link linkend="acq_purchase_orders">purchase orders</link> for more information.</simpara></step>\r
- <step><simpara>Click <guibutton>Add Brief Record</guibutton>.</simpara></step>\r
- <step><simpara>Enter bibliographic information in the desired fields. Notice that the record is added to the purchase order that you just created.</simpara></step>\r
- <step><simpara>Click <guibutton>Save Record</guibutton>.</simpara></step>\r
- </procedure>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_brief_record-2.png"/></imageobject>\r
- </simplesect>\r
- </section>\r
- <section id="_cancel_suspend_acquisitions">\r
- <title>Cancel/suspend acquisitions</title>\r
- <simpara>You can cancel entire purchase orders, line items on the purchase orders, and individual copies that are attached to a line item. You can also use cancel reasons to \r
- suspend purchase orders, line items, and copies. For example, a cancel reason such as Delayed Publication, would indicate that the item will be purchased when the item is \r
- published. The purchase is, in effect, suspended rather than cancelled, but the state of the purchase order, line item, or copy would still become cancelled.</simpara>\r
- <simplesect id="_cancel_suspend_copies">\r
- <title>Cancel/suspend copies</title>\r
- <simpara>You can cancel or suspend line items that are in a state of on order or pending order.</simpara>\r
- <procedure>\r
- <step><simpara>Select the <guilabel>Copies</guilabel> link.</simpara></step>\r
- <step><simpara>Click the <guilabel>Cancel</guilabel> link adjacent to the copy that you wish to cancel.</simpara></step>\r
- <step><simpara>Select a cancel reason from the drop down menu that appears, and click <guibutton>Cancel copy</guibutton>.</simpara></step>\r
- </procedure>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_cancel_copy.png"/></imageobject>\r
- </simplesect>\r
- <simplesect id="_cancel_suspend_line_items">\r
- <title>Cancel/suspend line items</title>\r
- <simpara>You can cancel or suspend line items that are in a state of on order or pending order.</simpara>\r
- <procedure>\r
- <step><simpara>Check the boxes of the line items that you wish to cancel.</simpara></step>\r
- <step><simpara>Click <menuchoice><guimenu>Actions</guimenu><guimenuitem>Cancel Selected Lineitems</guimenuitem></menuchoice>.</simpara></step>\r
- <step><simpara>Select a cancel reason from the drop down menu. Choose the cancel reason, and click <guibutton>Cancel Line Items</guibutton>. The status of the line item \r
- is now cancelled.</simpara></step>\r
- </procedure>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_cancel_line_items.png"/></imageobject>\r
- </simplesect>\r
- <simplesect id="_cancel_suspend_purchase_orders">\r
- <title>Cancel/suspend purchase orders</title>\r
- <procedure>\r
- <step><simpara>Notice the Cancel column in the top half of the purchase order.</simpara></step>\r
- <step><simpara>Click the drop down arrow adjacent to <guilabel>Cancel order</guilabel>, and select a reason for cancelling the order.</simpara></step>\r
- <step><simpara>Click <guibutton>Cancel order</guibutton>. The state of the purchase order is cancelled.</simpara></step>\r
- </procedure>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_cancel_order.png"/></imageobject>\r
- </simplesect>\r
- </section>\r
- <section id="_claim_items">\r
- <title>Claim items</title>\r
- <simpara>Manual claiming of items can be accomplished in multiple ways, but electronic claiming is not available in the 2.0 release.\r
- You can apply claim policies to line items or individual copies. You also can use the default claim policy associated with your provider to claim items.</simpara>\r
- <simplesect id="_apply_a_claim_policy">\r
- <title>Apply a claim policy</title>\r
- <simpara>You can apply a claim policy to an item in one of two ways: apply a claim policy to a line item when the item is created on the selection list or purchase order, \r
- or use the default claim policy associated with the provider on the purchase order. The default claim policy for a provider is established when the provider is created and \r
- will be used for claiming if no claim policy has been applied.</simpara>\r
- <procedure>\r
- <step><simpara>Open a selection list or purchase order. See the section on <link linkend="acq_purchase_orders">Purchase Orders</link> for more information.</simpara></step>\r
- <step><simpara>Click the <guimenu>Actions</guimenu> drop down menu on the line item.</simpara></step>\r
- <step><simpara>Click <guimenuitem>Apply Claim Policy</guimenuitem>.</simpara></step>\r
- <step><simpara>A drop down menu of claim policies will appear. Choose a claim policy to apply to the line item. The claim policy will be applied to all \r
- items that have not been received or cancelled.</simpara></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_apply_claim_policy.png"/></imageobject>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_change_a_claim_policy">\r
- <title>Change a claim policy</title>\r
- <simpara>You can manually change a claim policy that has been applied to a line item.</simpara>\r
- <procedure>\r
- <step><simpara>Open a selection list or purchase order.</simpara></step>\r
- <step><simpara>Click the <guimenu>Actions</guimenu> drop down menu on the line item.</simpara></step>\r
- <step><simpara>Click <guimenuitem>Change Claim Policy</guimenuitem>.</simpara></step>\r
- <step><simpara>A drop down menu of claim policies will appear. Choose a claim policy to apply to the line item.</simpara></step>\r
- <step><simpara>Click <guibutton>Save</guibutton>.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_claim_an_item">\r
- <title>Claim an item</title>\r
- <simpara>You can manually claim items at any time after the item has been ordered.</simpara>\r
- <procedure>\r
- <step><simpara>Open a purchase order.</simpara></step>\r
- <step><simpara>Click the <guimenu>Actions</guimenu> drop down menu on the line item.</simpara></step>\r
- <step><simpara>Click <guimenuitem>Claims</guimenuitem>. The number of existing claims appears in parentheses.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_claim_item.png"/></imageobject>\r
- </step>\r
- <step><simpara>A drop down menu of items to be claimed and possible claim actions appears. Check the boxes adjacent to the item that you want to claim \r
- and the action that you will take. You can claim items that have not been received or cancelled.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_claim_item-2.png"/></imageobject>\r
- </step>\r
- <step><simpara>Click <guibutton>Claim Selected</guibutton>.</simpara></step>\r
- <step><simpara>Select a claim type from the drop down menu. Entering a note is optional.</simpara></step>\r
- <step><simpara>Click <guibutton>Claim</guibutton>.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_claim_item-3.png"/></imageobject>\r
- </step>\r
- <step><simpara>The number of existing claims on the line item updates, and a claim voucher appears. The voucher can be printed and mailed to the vendor to initiate \r
- the claim.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_produce_a_list_of_claim_ready_items">\r
- <title>Produce a list of claim-ready items</title>\r
- <simpara>If an item has not been received and meets the conditions for claiming according to the item’s claim policy, then the item will be eligible for claiming. \r
- Evergreen can produce a list of items, by ordering branch, which is ready to be claimed. You can use this list to manually claim items from your provider.</simpara>\r
- <procedure>\r
- <step><simpara>Click <menuchoice><guimenu>Acquisitions</guimenu><guimenuitem>Claim-Ready Items</guimenuitem></menuchoice>.</simpara></step>\r
- <step><simpara>Choose a branch from the drop down menu to claim items that were ordered by this branch.</simpara></step>\r
- <step><simpara>Any items that meet the conditions for claiming will appear.</simpara></step>\r
- <step><simpara>Check the box adjacent to the line items that you wish to claim. Click <guibutton>Claim selected items</guibutton>.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_claim_item-4.png"/></imageobject>\r
-\r
-\r
-</step>\r
- <step><simpara>Select a claim type from the drop down menu. Entering a note is optional.</simpara></step>\r
- <step><simpara>Click <guibutton>Claim</guibutton>.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_claim_item-5.png"/></imageobject>\r
-</step>\r
- </procedure>\r
- </simplesect>\r
- </section>\r
- <section id="_export_single_attribute_list">\r
- <title>Export Single Attribute List</title>\r
- <simpara>You can export ISBNs, ISSNs, or UPCs as a file from the list of line item(s). A list of ISBNs, for example, could be uploaded to vendor websites when placing orders.</simpara>\r
- <procedure>\r
- <step><simpara>From a selection list or purchase order, check the boxes of the line items with attributes that you wish to export.</simpara></step>\r
- <step><simpara>Click <menuchoice><guimenu>Actions</guimenu><guimenuitem>Export Single Attribute List</guimenuitem></menuchoice>.</simpara></step>\r
- <step><simpara>Choose the line item attribute that you would like to export from the drop down list of attributes.</simpara></step>\r
- <step><simpara>Click <guibutton>Export List</guibutton>.</simpara></step>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_export_list.png"/></imageobject>\r
- <step><simpara>Save the file to your computer.</simpara></step>\r
- <step><simpara>Open the file. Choose a program (e.g. Excel) to open the file.</simpara></step>\r
- </procedure>\r
- </section>\r
- <section id="_funds">\r
- <title>Funds</title>\r
- <simpara>You can apply a single fund or multiple funds to copies on a selection list or purchase order. You can change the fund that has been applied to an item at any time on a \r
- selection list. You can change the fund that has been applied to an item on a purchase order if the purchase order has not yet been activated.</simpara>\r
- <simpara>Funds can be applied to items from the Copies link that is located on a line item. Funds can also be applied to copies by batch updating line items and their attendant \r
- copies.</simpara>\r
- <simplesect id="_apply_funds_to_individual_copies">\r
- <title>Apply funds to individual copies</title>\r
- <procedure>\r
- <step><simpara>Click the <guilabel>Copies</guilabel> link on the line item.</simpara></step>\r
- <step><simpara>To apply a fund to an individual item, click the drop down arrow in the <guilabel>Fund</guilabel> field.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_funds.png"/></imageobject> \r
- <note><simpara>A yellow fund name indicates that the balance in the fund has dropped to the warning percent that was entered in the admin module. \r
- A red fund name indicates that the balance in the fund has dropped to the stop percent that was entered in the admin module. Funds that have been closed out will \r
- no longer appear on the drop down list.</simpara></note>\r
- </step>\r
- <step><simpara>To apply a fund to multiple items, see the section on line items for more information.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_apply_funds_to_copies_via_batch_updates_to_line_items">\r
- <title>Apply funds to copies via batch updates to line items</title>\r
- <simpara>You can apply funds to all copies on a line item(s) from the <guimenu>Actions</guimenu> menu on the selection list or the purchase order.</simpara>\r
- <procedure>\r
- <step><simpara>Check the boxes of the line items with copies to which you would like to apply funds.</simpara></step>\r
- <step><simpara>Click <menuchoice><guimenu>Actions</guimenu><guimenuitem>Apply Funds to Selected Items</guimenuitem></menuchoice>.</simpara></step>\r
- <step><simpara>Select the fund that you wish to apply to the copies.</simpara></step>\r
- <step><simpara>Click <guibutton>Submit</guibutton>.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_funds.png"/></imageobject> \r
- </step>\r
- </procedure>\r
- </simplesect>\r
- </section>\r
- <section id="_invoice_acquisitions">\r
- <title>Invoice acquisitions</title>\r
- <simpara>You can create invoices for purchase orders, individual line items, and blanket purchases. You can also link existing invoices to purchase orders. In 2.0, all invoicing is \r
- manual.</simpara>\r
- <simpara>You can invoice items before you receive the items if desired. You can also reopen closed invoices, and you can print all invoices.</simpara>\r
- <simplesect id="_create_a_blanket_invoice">\r
- <title>Create a blanket invoice</title>\r
- <simpara>You can create a blanket invoice for purchases that are not attached to a purchase order.</simpara>\r
- <procedure>\r
- <step><simpara>Click <menuchoice><guimenu>Acquisitions</guimenu><guimenuitem>Create invoice</guimenuitem></menuchoice>.</simpara></step>\r
- <step><simpara>Enter the invoice information in the top half of the screen.</simpara></step>\r
- <step><simpara>To add charges for materials not attached to a purchase order, click <guibutton>Add Charge…</guibutton> This functionality may also be used to add \r
- shipping, tax, and other fees.</simpara></step>\r
- <step><simpara>Select a charge type from the drop down menu.</simpara></step>\r
- <step><simpara>Select a fund from the drop down menu.</simpara></step>\r
- <step><simpara>Enter a <guilabel>Title/Description</guilabel> of the resource.</simpara></step>\r
- <step><simpara>Enter the amount that you were billed.</simpara></step>\r
- <step><simpara>Enter the amount that you paid.</simpara></step>\r
- <step><simpara>Save the invoice.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_invoice_blanket.png"/></imageobject> \r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_create_an_invoice_for_a_line_item">\r
- <title>Create an invoice for a line item</title>\r
- <simpara>See the section on creating new invoices for line items for details.</simpara>\r
- </simplesect>\r
- <simplesect id="_create_an_invoice_for_a_purchase_order">\r
- <title>Create an invoice for a purchase order</title>\r
- <simpara>You can create an invoice for all of the line items on a purchase order. With the exception of fields with drop down menus, no limitations on the data that you enter \r
- exist.</simpara>\r
- <procedure>\r
- <step><simpara>Open a purchase order.</simpara></step>\r
- <step><simpara>Click <guibutton>Create Invoice</guibutton>.</simpara></step>\r
- <step><simpara>Enter a <guilabel>Vendor Invoice ID</guilabel>. This number may be listed on the paper invoice sent from your vendor.</simpara></step>\r
- <step><simpara>Choose a <guimenuitem>Receive Method</guimenuitem> from the drop down menu.</simpara>\r
- <note><simpara>Only paper invoicing is available in the 2.0 release. Electronic invoicing may be available in future releases.</simpara></note>\r
- </step>\r
- <step><simpara>The Provider is generated from the purchase order and is entered by default.</simpara></step>\r
- <step><simpara>Enter a <guilabel>note</guilabel> (optional).</simpara></step>\r
- <step><simpara>Select a <guilabel>payment method</guilabel> from the drop down menu.</simpara></step>\r
- <step><simpara>The <guilabel>Invoice Date</guilabel> is entered by default as the date that you create the invoice. You can change the date by clicking in \r
- the field. A calendar drops down.</simpara></step>\r
- <step><simpara>Enter an <guilabel>Invoice Type</guilabel> (optional).</simpara></step>\r
- <step><simpara>The Shipper defaults to the provider that was entered in the purchase order.</simpara></step>\r
- <step><simpara>Enter a <guilabel>Payment Authorization</guilabel> (optional).</simpara></step>\r
- <step><simpara>The <guilabel>Receiver</guilabel> defaults to the branch at which your workstation is registered. You can change the receiver by selecting an org unit \r
- from the drop down menu.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_invoice_purchase_order.png"/></imageobject> \r
- <note><simpara>The bibliographic line items are listed in the next section of the invoice. Along with the <guilabel>title</guilabel> and <guilabel>author</guilabel> of \r
- the line items is a <guilabel>summary of copies ordered</guilabel>, <guilabel>received</guilabel>, <guilabel>invoiced</guilabel>, <guilabel>claimed</guilabel>, \r
- and <guilabel>cancelled</guilabel>. You can also view the <guilabel>amounts estimated</guilabel>, <guilabel>encumbered</guilabel>, and paid for each line item. Finally, \r
- each line item has a <guilabel>line item ID</guilabel> and links to the <guilabel>selection list</guilabel> (if used) and the <guilabel>purchase \r
- order</guilabel>.</simpara></note>\r
- </step>\r
- <step><simpara>Enter the number of items that were invoiced, the amount that the organization was billed, and the amount that the organization paid.</simpara></step>\r
- <step><simpara>You have the option to add <guilabel>charge types</guilabel> if applicable. Charge types are additional charges that can be selected \r
- from the drop down menu. Common charge types include taxes and handling fees.</simpara></step>\r
- <step><simpara>You have three options for saving an invoice. You can click <guibutton>Save</guibutton>, which saves the changes that you have made, but keeps the \r
- invoice open. You can click <guibutton>Save and Prorate</guibutton>, which enables you to save the invoice and prorate any additional charges, such as taxes, across funds, \r
- if multiple funds have been used to pay the invoice. You also can click <guibutton>Save and Close</guibutton>. Choose this option when you have completed the \r
- invoice.</simpara></step>\r
- </procedure>\r
- <note><simpara>You can re-open a closed invoice by clicking the link, <guilabel>Re-open invoice</guilabel>. This link appears at the bottom of a closed invoice.</simpara></note>\r
- </simplesect>\r
- <simplesect id="_link_an_existing_invoice_to_a_purchase_order">\r
- <title>Link an existing invoice to a purchase order</title>\r
- <simpara>You can use the link invoice feature to link an existing invoice to a purchase order. For example, an invoice is received for a shipment with items on purchase order #1 \r
- and purchase order #2. When the invoice arrives, purchase order #1 is retrieved, and the invoice is created. To receive the items on purchase order #2, simply link the invoice \r
- to the purchase order. You do not need to recreate it.</simpara>\r
- <procedure>\r
- <step><simpara>Open a purchase order.</simpara></step>\r
- <step><simpara>Click <guibutton>Link Invoice</guibutton>.</simpara></step>\r
- <step><simpara>Enter the Invoice # and the Provider of the invoice to which you wish to link.</simpara></step>\r
- <step><simpara>Click <guibutton>Link</guibutton>.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_invoice_link.png"/></imageobject>\r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_view_an_invoice">\r
- <title>View an invoice</title>\r
- <simpara>You can view an invoice in one of four ways: view open invoices; view invoices on a purchase order; view invoices by searching specific invoice fields; \r
- view invoices attached to a line item.</simpara>\r
- <simpara>To view open invoices, click <menuchoice><guimenu>Acquisitions</guimenu><guimenuitem>Open invoices</guimenuitem></menuchoice>. This opens the Acquisitions Search \r
- screen. The default fields search for open invoices. Click <guibutton>Search</guibutton>.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_invoice_view.png"/></imageobject>\r
- <simpara>To view invoices on a purchase order, open a purchase order, and click the <guilabel>View Invoices</guilabel> link. The number in parentheses indicates the number of \r
- invoices that are attached to the purchase order.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_invoice_view-2.png"/></imageobject>\r
- <simpara>To view invoices by searching specific invoice fields, see the section on <link linkend="acq_searching">searching the acquisitions module</link>.</simpara>\r
- <simpara>To view invoices for a line item, see the section on <link linkend="_view_invoice">line item invoices</link>.</simpara>\r
- </simplesect>\r
- </section>\r
- <section id="_line_items">\r
- <title>Line Items</title>\r
- <simpara>Line items represent bibliographic records on a selection list or purchase order. One line item corresponds to one bibliographic record. Line items contain attributes, \r
- which are characteristics of the bibliographic record, such as ISBNs or Title. Line items also contain copy information, price information, and notes and alerts.</simpara>\r
- <simplesect id="_add_alerts_to_a_line_item">\r
- <title>Add alerts to a line item</title>\r
- <simpara>Alerts are pop up messages that appear when an item is received. Alerts can be printed on the line item worksheet.</simpara>\r
- <procedure>\r
- <step><simpara>Click the <guilabel>Notes</guilabel> link on the line item.</simpara></step>\r
- <step><simpara>Click the <guilabel>New Alert</guilabel> drop down button.</simpara></step>\r
- <step><simpara>Choose an alert code from the drop down menu.</simpara></step>\r
- <step><simpara>Add additional comments if desired.</simpara></step>\r
- <step><simpara>Click <guibutton>Create</guibutton>. The alert will display on the screen.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_line_items_alerts.png"/></imageobject>\r
- </step>\r
- <step><simpara>Click <guibutton>Return</guibutton> to return to the line item. When you return to the line item, a flag will appear to indicate \r
- that an alert is on the line item.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_line_items_alerts-2.png"/></imageobject>\r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_add_copies_to_a_line_item">\r
- <title>Add copies to a line item</title>\r
- <simpara>Use the <guilabel>Copies</guilabel> link to add copy information to a line item. You can add copies to line items on a selection list or a purchase order.</simpara>\r
- <procedure>\r
- <step><simpara>Click the <guilabel>Copies</guilabel> link on a line item.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_line_items_add_copies.png"/></imageobject>\r
- </step>\r
- <step><simpara>Enter the number of items that you want to order in Item Count, and click <guibutton>Go</guibutton>. The number of items that you want to order will \r
- display below.</simpara></step>\r
- <step><simpara>If desired, apply a <guilabel>Distribution Formula</guilabel> from the drop down list. Distribution formulas tell the ILS how many copies should be \r
- distributed to each location.</simpara></step>\r
- <step><simpara>The owning branch and shelving location populate with entries from the distribution formula. Click <guibutton>Apply</guibutton>.</simpara></step>\r
- <step><simpara>Look back at the top gray row of text boxes above the distribution formula. Each text box in this row corresponds to the columns below. Changes made here \r
- will be applied to all copies below. Click <guibutton>Batch Update</guibutton>.</simpara></step>\r
- <step><simpara>Click <guibutton>Save Changes</guibutton>.</simpara></step>\r
- <step><simpara>Click <guibutton>Return</guibutton> to return to the selection list or purchase order.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_line_items_add_copies-2.png"/></imageobject> \r
- </step>\r
- <step><simpara>Add the item’s price to the line item in the <guilabel>Estimated Price</guilabel> field.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_line_items_add_copies-3.png"/></imageobject>\r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_add_notes_to_a_line_item">\r
- <title>Add notes to a line item</title>\r
- <simpara>Notes on line items can include any additional information that you want to add to the line item. Notes can be internal or can be made available to providers. Notes \r
- appear in a pop up box when an item is received. Notes can be printed on line item worksheets, which can be printed and placed in books for processing.</simpara>\r
- <procedure>\r
- <step><simpara>Click the <guilabel>Notes</guilabel> link on the line item.</simpara></step>\r
- <step><simpara>Click the <guilabel>New Note</guilabel> drop down button.</simpara></step>\r
- <step><simpara>Enter a note.</simpara></step>\r
- <step><simpara>You have the option to make this note available to your provider. Click the check box adjacent to <guilabel>Note is vendor-public</guilabel>.</simpara></step>\r
- <step><simpara>Click <guibutton>Create</guibutton>. The note will appear on the screen.</simpara></step>\r
- <step><simpara>Click <guibutton>Return</guibutton> to return to the line item. When you return to the line item, a number in parentheses adjacent to notes indicates \r
- how many notes are attached to the item.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_line_items_add_notes.png"/></imageobject>\r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_cancel_a_line_item">\r
- <title>Cancel a line item</title>\r
- <simpara>For more information, see the section on <link linkend="_cancel_suspend_acquisitions">cancelling/suspending acquistions</link>.</simpara>\r
- </simplesect>\r
- <simplesect id="_line_item_actions">\r
- <title>Line item actions</title>\r
- <simplesect id="_claims">\r
- <title>Claims</title>\r
- <simpara>See the section on <link linkend="_claim_items">claiming</link> for more information.</simpara>\r
- </simplesect>\r
- <simplesect id="_holdings_maintenance">\r
- <title>Holdings maintenance</title>\r
- <simpara>After an item has been received, click <menuchoice><guimenu>Actions</guimenu><guimenuitem>Holdings Maintenance</guimenuitem></menuchoice> to edit holdings. The Holdings Maintenance screen opens in a new tab.</simpara>\r
- \r
- <simpara>Use the <guimenuitem>Link to invoice</guimenuitem> menu item to link the line item to an invoice that already exists in the ILS.</simpara>\r
- <procedure>\r
- <step><simpara><menuchoice><guimenu>Click Actions</guimenu><guimenuitem>Link to Invoice</guimenuitem></menuchoice>.</simpara></step>\r
- <step><simpara>A pop up box appears. Enter an <guilabel>invoice number</guilabel>.</simpara></step>\r
- <step><simpara>Enter a <guilabel>provider</guilabel>. The field will auto-complete.</simpara></step>\r
- <step><simpara>Click <guibutton>Link</guibutton>.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_mark_received">\r
- <title>Mark received</title>\r
- <simpara>See the section on <link linkend="_receiving">receiving</link> for more information.</simpara>\r
- </simplesect>\r
- <simplesect id="_new_invoice">\r
- <title>New invoice</title>\r
- <simpara>See the <link linkend="_invoice_acquisitions">invoicing</link> section for more information.</simpara>\r
- </simplesect>\r
- <simplesect id="_un_receive">\r
- <title>Un-receive</title>\r
- <simpara>See the <link linkend="_receive_un_receive_copies">receiving/un-receiving</link> section for more information.</simpara>\r
- </simplesect>\r
- <simplesect id="_update_barcodes">\r
- <title>Update barcodes</title>\r
- <simpara>After an item has been received, click <menuchoice><guimenu>Actions</guimenu><guimenuitem>Update Barcodes</guimenuitem></menuchoice> to edit holdings. \r
- The <guilabel>Volume and Copy Creator</guilabel> screen opens in a new tab.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_line_items_update_barcodes.png"/></imageobject>\r
- </simplesect>\r
- <simplesect id="_view_history">\r
- <title>View history</title>\r
- <simpara>Click <menuchoice><guimenu>Actions</guimenu><guimenuitem>View history</guimenuitem></menuchoice> to view the changes that have occurred in the life of the line \r
- item.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_line_items_view_history.png"/></imageobject>\r
- </simplesect>\r
- <simplesect id="_view_invoice">\r
- <title>View invoice</title>\r
- <simpara>Click <menuchoice><guimenu>Actions</guimenu><guimenuitem>View invoice</guimenuitem></menuchoice> to view any invoices that are attached to the line item.</simpara>\r
- </simplesect>\r
- <simplesect id="_line_item_worksheet">\r
- <title>Line Item Worksheet</title>\r
- <simpara>The Line Item Worksheet is a printable sheet that contains details about the line item, including alerts and notes, and distribution of the copies. This \r
- worksheet could be placed in a book that is sent to cataloging or processing.</simpara>\r
- <procedure>\r
- <step><simpara>From a selection list or purchase order, click the <guilabel>worksheet</guilabel> link on the line item.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_line_items_worksheet.png"/></imageobject> \r
- </step>\r
- <step><simpara>The line item worksheet appears.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_line_items_worksheet.png"/></imageobject>\r
- </step>\r
- <step><simpara>To print the worksheet, click the <guilabel>Print Page</guilabel> link in the top right corner.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- </simplesect>\r
- </section>\r
- <section id="_link_line_items_to_the_catalog">\r
- <title>Link line items to the catalog</title>\r
- <simpara>You can link a MARC record or brief record on a selection list to the corresponding MARC record in the catalog. This may be useful for librarians who have a brief MARC record \r
- in their catalog and want to import a better record that is attached to their selection list. No collision detection exists when importing an item into the selection list or catalog, so \r
- the link to catalog option enables you to search for a matching record and link to it from the selection list or purchase order. When you import the record from the purchase order, \r
- the record will overlay the linked record in the catalog.</simpara>\r
- <procedure>\r
- <step><simpara>From the line item, click <guibutton>Link to catalog</guibutton>.</simpara></step>\r
- <step><simpara>In the text box that pops up, search terms, such as ISBN and title, are entered by default.</simpara></step>\r
- <step><simpara>Click <guibutton>Search</guibutton>.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_line_items_link.png"/></imageobject>\r
- </step>\r
- <step><simpara>Result(s) appear. Click the link to View MARC, or Select the record to link it to the record on the selection list or purchase order.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_line_items_link-2.png"/></imageobject>\r
- </step>\r
- <step><simpara>The screen will reload, and the line item displays with a catalog link. The records are linked.</simpara></step> \r
- </procedure> \r
- </section> \r
- <section id="acq_load_bib_records">\r
- <title>Load Bib Records and Items Into the Catalog</title>\r
- <simpara>You can load bib records and items into the catalog at three different locations in the acquisitions module. You can import bib records and items \r
- (if holdings information is attached) when you upload MARC order records. Click <menuchoice><guimenu>Acquisitions</guimenu><guimenuitem>Load MARC Order \r
- Records</guimenuitem></menuchoice> and check the box adjacent to <guilabel>Load Bibs and \r
- Items into the ILS</guilabel>.You can import bib records and items into the catalog when you create a purchase order from a selection list. From the selection list, \r
- click <menuchoice><guimenu>Actions</guimenu><guimenuitem>Create Purchase Order</guimenuitem></menuchoice>. Check the box adjacent to <guilabel>Load Bibs and Items into the \r
- ILS</guilabel> to import the records into the catalog.\r
- You can import bib records and items into the catalog from a purchase order by clicking <menuchoice><guimenu>Actions</guimenu><guimenuitem>Load Bibs and \r
- Items</guimenuitem></menuchoice>.\r
- If you have not loaded bib records and items into the catalog before you activate a purchase order, then the ILS will automatically import the bib records and \r
- items into the catalog when you activate the purchase order.</simpara>\r
- </section>\r
- <section id="acq_load_catalog_record_ids"> \r
- <title>Load Catalog Record IDs</title>\r
- <simpara>The Load Catalog Record IDs function enables you to create line items from a list of catalog records whose record IDs are saved in a CSV file.</simpara>\r
- <simpara>This would be useful if you want to batch order copies of items that your organization already owns. For example, after gathering a list of needed titles from your OPAC \r
- through a report, save the record IDs into a CSV file, upload the file into the ILS, and create a purchase order for the items.</simpara>\r
- <procedure>\r
- <step><simpara>Create a CSV file with the record ID of each catalog record in the first column of the spreadsheet. You can create this CSV file from a spreadsheet generated \r
- by a report, as suggested in the aforementioned example. You can also copy and paste record IDs from the catalog record into the CSV file.</simpara>\r
- <note><simpara>Record IDs are auto-generated digits associated with each record. They are found in the Record Summary that appears at the top of each record.</simpara></note>\r
- </step>\r
- <step><simpara>Save the CSV file to your computer.</simpara></step>\r
- <step><simpara>Click <menuchoice><guimenu>Acquisitions</guimenu><guimenuitem>Load Catalog Record IDs</guimenuitem></menuchoice>.</simpara></step>\r
- <step><simpara>Click <guibutton>Load More Terms</guibutton>.</simpara></step>\r
- <step><simpara>The screen will display the number of terms (record IDs) that have been loaded.</simpara></step>\r
- <step><simpara>Click <guibutton>Retrieve Records</guibutton>. The records will appear as line items to which you can add copies, notes, and pricing information. Use the <guimenu>Actions</guimenu> menu to save these items to a selection list or purchase order.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_load_records.png"/></imageobject>\r
-</step>\r
- </procedure>\r
- </section>\r
- <section id="_load_marc_order_records">\r
- <title>Load MARC Order Records</title>\r
- <simpara>The Load MARC Order Records screen enables you to upload MARC records that have been saved on your computer into the ILS. You can add the records to a selection list and/or \r
- to a purchase order. You can both create and activate purchase orders in one step from this interface. Also, from this interface, you can load bibs and items into the catalog.</simpara>\r
- <procedure>\r
- <step><simpara>Click <menuchoice><guimenu>Acquisitions</guimenu><guimenuitem>Load MARC Order Records</guimenuitem></menuchoice></simpara></step>\r
- <step><simpara>If you want to upload the MARC records to a new purchase order, then click the check box adjacent to <guilabel>Create Purchase Order</guilabel>.</simpara></step>\r
- <step><simpara>If you want to activate the purchase order at the time of creation, then click the check box adjacent to <guilabel>Activate Purchase Order</guilabel>.</simpara></step>\r
- <step><simpara>If you want to load bibs and items into the catalog, then click the check box adjacent to <guilabel>Load Bibs and Items into the ILS</guilabel>.</simpara></step>\r
- <step><simpara>Enter the name of the <guilabel>Provider</guilabel>. The text will auto-complete.</simpara></step>\r
- <step><simpara>Select an org unit from the drop down menu. The context org unit is the org unit that <literal>owns</literal> the bib record. You should select a physical \r
- location rather than a political or administrative org unit as the context org unit. For example, the <literal>Smith County Library System</literal> is funding purchase of a \r
- copy of <literal>Gone with the Wind</literal>. The system owns the bib record, but it cannot receive the physical item. The acquisitions librarian will \r
- choose a physical branch of that system, a processing center or an individual branch, to receive the item.</simpara></step>\r
- <step><simpara>If you want to upload the records to a selection list, you can select a list from the drop down menu, or type in the name of the selection list that you want \r
- to create.</simpara></step>\r
- <step><simpara>Click <guibutton>Browse</guibutton> to search for the file of bibliographic records.</simpara></step>\r
- <step><simpara>Click <guibutton>Upload</guibutton>.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_load_marc_records.png"/></imageobject>\r
- </step>\r
- <step><simpara>A summary of the items that have been processed will appear.</simpara></step>\r
- <step><simpara>Click the links that appear to view the purchase order or the selection list.</simpara></step>\r
- </procedure> \r
- </section>\r
- <section id="_marc_federated search">\r
- <title>MARC Federated Search</title>\r
- <simpara>The MARC Federated Search enables you to import bibliographic records into a selection list or purchase order from a Z39.50 source.</simpara>\r
- <procedure>\r
- <step><simpara>Click <menuchoice><guimenu>Acquisitions</guimenu><guimenuitem>MARC Federated Search</guimenuitem></menuchoice>.</simpara></step>\r
- <step><simpara>Check the boxes of Z39.50 services that you want to search. Your local Evergreen Catalog is checked by default. Click <guibutton>Submit</guibutton>.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_marc_search.png"/></imageobject>\r
- </step>\r
- <step><simpara>A list of results will appear. Click the <guilabel>Copies</guilabel> link to add copy information to the line item. \r
- See the <link linkend="_line_items">section on Line Items</link> for more \r
- information.</simpara></step>\r
- <step><simpara>Click the <guilabel>Notes</guilabel> link to add notes or line item alerts to the line item. See the <link linkend="_line_items">section on Line Items</link> for more \r
- information.</simpara></step>\r
- <step><simpara>Enter a price in the <guilabel>Estimated Price</guilabel> field.</simpara></step>\r
- <step><simpara>You can save the line item(s) to a selection list by checking the box on the line item and clicking <menuchoice><guimenu>Actions</guimenu><guimenuitem>Save \r
- Items to Selection List</guimenuitem></menuchoice>. You can also create \r
- a purchase order from the line item(s) by checking the box on the line item and clicking <menuchoice><guimenu>Actions</guimenu><guimenuitem>Create Purchase \r
- Order</guimenuitem></menuchoice>.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_marc_search-2.png"/></imageobject>\r
- </step>\r
- </procedure>\r
- </section>\r
- <section id="acq_patron requests"> \r
- <title>Patron Requests</title>\r
- <note><simpara>The patron requests interface will allow you to view requests that patrons make via the OPAC. The functionality for OPAC requests is not currently available in \r
- the native Evergreen interface, so the screen remains blank in 2.0.</simpara></note>\r
- </section>\r
- <section id="acq_purchase_orders"> \r
- <title>Purchase Orders</title>\r
- <simpara>You can create a purchase order from a selection list, a batch upload of MARC order records, the <guilabel>View/Place Orders</guilabel> link in the catalog, or results \r
- from a MARC Federated Search. You can also create blanket purchase orders to which you can add brief records or generic charges and fees.</simpara>\r
- <simplesect id="_activate_a_purchase_order">\r
- <title>Activate a purchase order</title>\r
- <simpara>Before you can active a purchase order, the following criteria must be met:</simpara>\r
- <itemizedlist>\r
- <listitem>The field, Activate Order?, is located in the top half of the purchase order. The answer adjacent to this field must be <quote>Yes</quote>.</listitem>\r
- <listitem>Each line item must contain an estimated price. If the <guilabel>Activate Order?</guilabel> field in the top half of the purchase order reads, \r
- <quote>No: The lineitem has no price (ACQ_LINEITEM_NO_PRICE)</quote>, then simply enter a price in the <guilabel>estimated price field</guilabel>, tab out of the field, \r
- and click <guibutton>Reload</guibutton>.</listitem>\r
- </itemizedlist>\r
- <simpara>When the above criteria have been met, proceed with the following:</simpara>\r
- <simpara>Look at the <guilabel>Activate Order?</guilabel> field in the top half of the purchase order. Click the hyperlinked <guilabel>Activate Order</guilabel>. \r
- When you activate the order, the bibliographic records and copies will be imported into the catalog, and the funds associated with the purchases will be encumbered.</simpara>\r
- </simplesect>\r
- <simplesect id="_add_brief_records_to_a_purchase_order">\r
- <title>Add brief records to a purchase order</title>\r
- <simpara>To add brief records to a purchase order, see the section on adding <link linkend="_brief_records">brief records</link> for more information. You can add \r
- brief records to new or existing purchase orders.</simpara>\r
- </simplesect>\r
- <simplesect id="_add_charges_taxes_fees_or_discounts_to_a_purchase_order">\r
- <title>Add charges, taxes, fees, or discounts to a purchase order</title>\r
- <simpara>You can add charges, taxes, fees, or discounts to a purchase order. These additional charges will be reflected in the amounts that are estimated and encumbered on \r
- the purchase order.</simpara>\r
- <procedure>\r
- <step><simpara>Open or create a purchase order.</simpara></step>\r
- <step><simpara>Click <guibutton>New charge</guibutton>.</simpara></step>\r
- <step><simpara>Select a <guilabel>charge type</guilabel> from the drop down menu.</simpara></step>\r
- <step><simpara>Select a <guilabel>fund</guilabel> from the drop down menu.</simpara></step>\r
- <step><simpara>Enter a <guilabel>Title/Description</guilabel>, <guilabel>Author</guilabel>, and <guilabel>Note</guilabel> if applicable.</simpara></step>\r
- <step><simpara>Enter an <guilabel>estimated cost</guilabel>.</simpara></step>\r
- <step><simpara>Add another new charge, or click <guibutton>Save New Charges</guibutton>.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_purchase_order_add_charges.png"/></imageobject>\r
- </step>\r
- </procedure>\r
- <note><simpara>Discounts are not consistently supported in the 2.0 release.</simpara></note>\r
- </simplesect>\r
- <simplesect id="_add_notes_to_a_purchase_order">\r
- <title>Add notes to a purchase order</title>\r
- <simpara>You can add notes to each purchase order. These can be viewed by staff and/or by the provider. By default, notes are only visible to staff.</simpara>\r
- <procedure>\r
- <step><simpara>Open a purchase order.</simpara></step>\r
- <step><simpara>In the top half of the purchase order, you see a <guilabel>Notes</guilabel> field. The number of notes that are attached to the purchase order is \r
- hyperlinked in parentheses next to the Notes field.</simpara></step>\r
- <step><simpara>Click the hyperlinked number.</simpara></step>\r
- <step><simpara>Click <guibutton>New Note</guibutton>.</simpara></step>\r
- <step><simpara>Enter the note. If you wish to make it available to the provider, click the check box adjacent to <guilabel>Note is vendor-public</guilabel>.</simpara></step>\r
- <step><simpara>Click <guibutton>Create</guibutton>.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_purchase_order_add_note.png"/></imageobject>\r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_cancel_suspend_a_purchase_order">\r
- <title>Cancel/Suspend a purchase order</title>\r
- <simpara>To cancel or suspend a purchase order, see the <link linkend="_cancel_suspend_acquisitions">cancel/suspend acquisitions</link> section.</simpara>\r
- </simplesect>\r
- <simplesect id="_create_a_purchase_order">\r
- <title>Create a purchase order</title>\r
- <procedure>\r
- <step><simpara>Click <menuchoice><guimenu>Acquisitions</guimenu><guimenuitem>Create Purchase Order</guimenuitem></menuchoice>.</simpara></step>\r
- <step><simpara>A pop-up box appears. Select an owning library from the drop down menu.</simpara></step>\r
- <step><simpara>Enter a <guilabel>provider</guilabel> in the box. The text will auto complete.</simpara></step>\r
- <step><simpara>As necessary, check the box adjacent to <guilabel>Prepayment Required</guilabel>.</simpara></step>\r
- <step><simpara>Click <guibutton>Save</guibutton>.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_purchase_order_create.png"/></imageobject> \r
- </step>\r
- <step><simpara>The purchase order has been created. You can now create a new charge type or add a brief record.</simpara></step>\r
- </procedure>\r
- <simpara>The <guilabel>Total Estimated</guilabel> is the sum of the prices. The <guilabel>Total Encumbered</guilabel> is the total estimated that is \r
- encumbered when the purchase order is activated. The <guilabel>Total Spent</guilabel> column automatically updates when the items are invoiced.</simpara>\r
- </simplesect>\r
- <simplesect id="_mark_ready_for_order">\r
- <title>Mark ready for order</title>\r
- <simpara>After an item has been added to a selection list or purchase order, you can mark it ready for order. This step is optional but may be useful to individual \r
- workflows.</simpara>\r
- <procedure>\r
- <step><simpara>If you want to mark part of a selection list ready for selector, then you can check the box(es) of the line item(s) that you wish to mark ready for \r
- selector. If you want to mark the entire list ready for selector, then skip to step 2.</simpara></step>\r
- <step><simpara>Click<menuchoice><guimenu>Actions</guimenu><guimenuitem>Mark Ready for Order</guimenuitem></menuchoice>.</simpara></step>\r
- <step><simpara>A pop up box will appear. Choose to mark the selected line items or all line items.</simpara></step>\r
- <step><simpara>Click <guibutton>Go</guibutton>.</simpara></step>\r
- <step><simpara>The screen will refresh. The line item will be highlighted gray, and the status will change to order-ready.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_name_a_purchase_order">\r
- <title>Name a purchase order</title>\r
- <simpara>A new purchase order is given the purchase order ID as a default name. However, you can change that name to any grouping of letters or numbers. You can reuse purchase \r
- order names as long as a name is never used twice in the same year.</simpara>\r
- <procedure>\r
- <step><simpara>Open or create a purchase order.</simpara></step>\r
- <step><simpara>The Name of the purchase order is in the top left column of the purchase order. The hyperlinked number is an internal ID number that Evergreen has \r
- assigned.</simpara></step>\r
- <step><simpara>To change this number, click on the hyperlinked ID.</simpara></step>\r
- <step><simpara>Enter a new purchase order number in the pop up box.</simpara></step>\r
- <step><simpara>Click <guibutton>OK</guibutton>.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_purchase_order_name.png"/></imageobject> \r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_print_purchase_orders">\r
- <title>Print purchase orders</title>\r
- <simpara>You can print a purchase order from the purchase order screen. If you add a note to a line item, the note will only appear in the <guilabel>Notes</guilabel> \r
- column on the printed purchase order if you make the note vendor-public. Currently, no notes appear in the <guilabel>Notes to the Vendor</guilabel> section of the printed \r
- purchase order.</simpara>\r
- <procedure>\r
- <step><simpara>Open a purchase order.</simpara></step>\r
- <step><simpara>Click <menuchoice><guimenu>Actions</guimenu><guimenuitem>Print Purchase Order</guimenuitem></menuchoice>.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_purchase_order_print.png"/></imageobject> \r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_receive_a_purchase_order">\r
- <title>Receive a purchase order</title>\r
- <simpara>See the section on <link linkend="_receiving">receiving acquistions</link> for more information on receiving a purchase order.</simpara>\r
- </simplesect>\r
- <simplesect id="_split_order_by_line_items">\r
- <title>Split order by line items</title>\r
- <simpara>You can create a purchase order with multiple line items, and then split the purchase order so that each line item is on separate purchase orders.</simpara>\r
- <simpara>When a purchase order is in the status of pending, a link to <guilabel>split order by Lineitems</guilabel> appears in the bottom left corner of the top half of \r
- the screen.</simpara>\r
- <procedure>\r
- <step><simpara>Click Split Order by Lineitems.</simpara></step>\r
- <step><simpara>A pop up box will confirm that you want to split the purchase order. Click <guibutton>OK</guibutton> to continue.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_purchase_order_split.png"/></imageobject>\r
- </step>\r
- <step><simpara>The items will display by default as a virtual combined purchase order. Future enhancements will allow you to activate the purchase order for each item \r
- from this screen.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_purchase_order_split-2.png"/></imageobject>\r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_view_on_order_purchase_orders">\r
- <title>View On-Order Purchase Orders</title>\r
- <simpara>You can view a list of on-order purchase orders by clicking <menuchoice><guimenu>Acquisitions</guimenu><guimenuitem>Purchase Orders</guimenuitem></menuchoice>. \r
- The ordering agency defaults to the branch at which your workstation \r
- is registered. The state of the purchase order defaults to on-order.</simpara>\r
- <simpara>You can add more search terms by clicking <guibutton>Add Search Term</guibutton>. Search terms are <quote>ANDed</quote> together. \r
- Click <guibutton>Search</guibutton> to begin your search.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_purchase_order_view.png"/></imageobject>\r
- <simpara>If you want to expand or change your search of purchase orders, you can choose other criteria from the drop down menus. See <link linkend="acq_searching">Searching Acquisitions</link> for more information.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_purchase_order_view-2.png"/></imageobject>\r
- <note><simpara>When searching by Org Unit, the exact ordering location must be selected. Searching for a consortium or system does not also display purchase orders or line \r
- items attached to child organizations.</simpara></note>\r
- </simplesect>\r
- <simplesect id="_view_edi_messages_on_a_purchase_order">\r
- <title>View EDI messages on a purchase order</title>\r
- <simpara>You can view electronic messages from your vendor about a specific purchase order.</simpara>\r
- <procedure>\r
- <step><simpara>Open a purchase order.</simpara></step>\r
- <step><simpara>In the top half of the purchase order, you see an <guilabel>EDI Messages</guilabel> field. The number of messages that are attached to the purchase \r
- order is hyperlinked in parentheses next to the <guilabel>EDI Messages</guilabel> field.</simpara></step>\r
- <step><simpara>Click the hyperlinked number to view the messages.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_view_purchase_order_history">\r
- <title>View Purchase Order History</title>\r
- <simpara>In the top half of the purchase order, you can view the history of the purchase order. Click the <guilabel>View</guilabel> link in the \r
- <guilabel>History</guilabel> field.</simpara>\r
- </simplesect>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_purchase_order_history.png"/></imageobject>\r
- </section>\r
- <section id="_receiving">\r
- <title>Receiving</title>\r
- <simpara>You can receive and un-receive entire purchase orders, line items, and individual copies. You can receive items before or after you invoice items.</simpara>\r
- <simplesect id="_receive_un_receive_copies">\r
- <title>Receive/un-receive copies</title>\r
- <simpara>To receive copies, click the <guilabel>Copies</guilabel> link on the line item, and click the <guilabel>Mark Received</guilabel> link adjacent to each copy.</simpara>\r
- <simpara>To un-receive copies, click the <guilabel>Copies</guilabel> link on the line item, and click the <guilabel>Un-Receive link</guilabel> adjacent to each copy.</simpara>\r
- </simplesect>\r
- <simplesect id="_receive_un_receive_line_items">\r
- <title>Receive/un-receive line items</title>\r
- <simpara>To receive a line item, click the <menuchoice><guimenu>Actions</guimenu><guimenuitem>Mark Received</guimenuitem></menuchoice> link on the line item.</simpara>\r
- <simpara>To un-receive a line item, click the <menuchoice><guimenu>Actions</guimenu><guimenuitem>Un-receive</guimenuitem></menuchoice> link on the line item.</simpara>\r
- </simplesect>\r
- <simplesect id="_receive_un_receive_purchase_orders">\r
- <title>Receive/un-receive purchase orders</title>\r
- <simpara>To receive a purchase order, click <menuchoice><guimenu>Actions</guimenu><guimenuitem>Mark Purchase Order as Received</guimenuitem></menuchoice>. \r
- The purchase order will have a state of received.</simpara>\r
- <simpara>To un-receive a purchase order, click <menuchoice><guimenu>Actions</guimenu><guimenuitem>Un-Receive Purchase Order</guimenuitem></menuchoice>. \r
- The purchase will have a state of on order.</simpara>\r
- </simplesect>\r
- </section>\r
- <section id="acq_searching">\r
- <title>Searching</title>\r
- <simpara>In the acquisitions module, you can search line items, line items and catalog records, selection lists, purchase orders, and invoices. To access the searching interface, \r
- click <menuchoice><guimenu>Acquisitions</guimenu><guimenuitem>General Search</guimenuitem></menuchoice>.</simpara>\r
- <simpara>Users may wish to begin their acquisitions process by searching line items and catalog records. This ensures that they do not purchase an item that the library already owns or is \r
- on another selection list or purchase order.</simpara>\r
- <procedure>\r
- <step><simpara>Choose the object that you would like to search from the drop down menu.</simpara></step>\r
- <step><simpara>Next, refine your search by choosing the specific fields that you would like to search. Click <guibutton>Add Search Term</guibutton> to add more fields. \r
- Search terms are <quote>ANDed</quote>\r
- together. Click the red <guilabel>X</guilabel> at the end of each row to delete search terms. Some search terms will be disabled depending on your choice of items \r
- to search.</simpara></step>\r
- <step><simpara>After you have added search term(s), click <guibutton>Search</guibutton> or click the <keycap>Enter</keycap> key. A list of results appears.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_search.png"/></imageobject>\r
- </step>\r
- <step><simpara>If you want to edit your search, click the <guibutton>Reveal Search</guibutton> button in the top right corner of the results screen to display \r
- your search.</simpara></step>\r
- </procedure>\r
- <note><simpara>When searching by <guilabel>Org Unit</guilabel>, the exact ordering location must be selected. Searching for a consortium or system does not also display purchase orders or line items attached \r
- to child organizations.</simpara></note>\r
- </section>\r
- <section id="_selection_lists">\r
- <title>Selection Lists</title>\r
- <simpara>Selection lists allow you to create, manage, and save lists of items that you may want to purchase. To view your selection list, click \r
- <menuchoice><guimenu>Acquisitions</guimenu><guimenuitem>My Selection Lists</guimenuitem></menuchoice>. Use the general search to view selection lists created by other users.</simpara>\r
- <simplesect id="_create_a_selection_list">\r
- <title>Create a selection list</title>\r
- <simpara>Selection lists can be created in four areas within the module. Selection lists can be created when you Add Brief Records, Upload MARC Order Records, or find records \r
- through the MARC Federated Search. In each of these interfaces, you will find the Add to Selection List field. Enter the name of the selection list that you want to create in \r
- that field.</simpara>\r
- <simpara>Selection lists can also be created through the My Selection Lists interface:</simpara>\r
- <procedure>\r
- <step><simpara>Click <menuchoice><guimenu>Acquisitions</guimenu><guimenuitem>My Selection Lists</guimenuitem></menuchoice>.</simpara></step>\r
- <step><simpara>Click the <guilabel>New Selection List</guilabel> drop down arrow.</simpara></step>\r
- <step><simpara>Enter the name of the selection list in the box that appears.</simpara></step>\r
- <step><simpara>Click <guibutton>Create</guibutton>.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_selection_create.png"/></imageobject>\r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_add_items_to_a_selection_list">\r
- <title>Add items to a selection list</title>\r
- <simpara>You can add items to a selection list in one of three ways: <link linkend="_brief_records">add a brief record</link>; <link linkend="_load_marc_order_records">upload \r
- MARC order records</link>; add records through a <link linkend="_marc_federated search">federated search</link>; or use the \r
- <link linkend="_view_place_orders">View/Place Orders</link> menu item in the catalog. </simpara>\r
- </simplesect>\r
- <simplesect id="_clone_selection_lists">\r
- <title>Clone selection lists</title>\r
- <simpara>Cloning selection lists enables you to copy one selection list into a new selection list. You can maintain both copies of the list, or you can delete the previous \r
- list.</simpara>\r
- <procedure>\r
- <step><simpara>Click <menuchoice><guimenu>Acquisitions</guimenu><guimenuitem>My Selection Lists</guimenuitem></menuchoice>.</simpara></step>\r
- <step><simpara>Check the box adjacent to the list that you want to clone.</simpara></step>\r
- <step><simpara>Click <guibutton>Clone Selected</guibutton>.</simpara></step>\r
- <step><simpara>Enter a name into the box that appears, and click <guibutton>Clone</guibutton>.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_selection_clone.png"/></imageobject>\r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_merge_selection_lists">\r
- <title>Merge selection lists</title>\r
- <simpara>You can merge two or more selection lists into one selection list.</simpara>\r
- <procedure>\r
- <step><simpara>Click <menuchoice><guimenu>Acquisitions</guimenu><guimenuitem>My Selection Lists</guimenuitem></menuchoice>.</simpara></step>\r
- <step><simpara>Check the boxes adjacent to the selection lists that you want to merge, and click <guibutton>Merge Selected</guibutton>.</simpara></step>\r
- <step><simpara>Choose the <guilabel>Lead Selection List</guilabel> from the drop down menu. This is the list to which the items on the other list(s) will be \r
- transferred.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_selection_merge.png"/></imageobject>\r
- </step>\r
- <step><simpara>Click <guibutton>Merge</guibutton>.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_delete_selection_lists">\r
- <title>Delete selection lists</title>\r
- <simpara>You can delete selection lists that you do not want to save. You will not be able to retrieve these items through the General Search after you have deleted \r
- the list. You must delete all line items from a selection list before you can delete the list.</simpara>\r
- <procedure>\r
- <step><simpara>Click <menuchoice><guimenu>Acquisitions</guimenu><guimenuitem>My Selection Lists</guimenuitem></menuchoice>.</simpara></step>\r
- <step><simpara>Check the box adjacent to the selection list(s) that you want to delete.</simpara></step>\r
- <step><simpara>Click <guibutton>Delete Selected</guibutton>.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_mark_ready_for_selector">\r
- <title>Mark Ready for Selector</title>\r
- <simpara>After an item has been added to a selection list or purchase order, you can mark it ready for selector. This step is optional but may be useful to individual \r
- workflows.</simpara>\r
- <procedure>\r
- <step><simpara>If you want to mark part of a selection list ready for selector, then you can check the box(es) of the line item(s) that you wish to mark ready for \r
- selector. If you want to mark the entire list ready for selector, then skip to step 2.</simpara></step>\r
- <step><simpara>Click <menuchoice><guimenu>Actions</guimenu><guimenuitem>Mark Ready for Selector</guimenuitem></menuchoice>.</simpara></step>\r
- <step><simpara>A pop up box will appear. Choose to mark the selected line items or all line items.</simpara></step>\r
- <step><simpara>Click <guibutton>Go</guibutton>.</simpara></step>\r
- <step><simpara>The screen will refresh. The marked line item(s) will be highlighted pink, and the status changes to selector-ready.</simpara>\r
- <imageobject role="fo"><imagedata scalefit="1" fileref="../media/acq_selection_mark_ready.png"/></imageobject>\r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_convert_selection_list_to_purchase_order">\r
- <title>Convert selection list to purchase order</title>\r
- <simpara>Use the <guimenu>Actions</guimenu> menu to convert a selection list to a purchase order.</simpara>\r
- <procedure>\r
- <step><simpara>From a selection list, click <menuchoice><guimenu>Actions</guimenu><guimenuitem>Create Purchase Order</guimenuitem></menuchoice>.</simpara></step>\r
- <step><simpara>A pop up box will appear.</simpara></step>\r
- <step><simpara>Select the ordering agency from the drop down menu.</simpara></step>\r
- <step><simpara>Enter the <guilabel>provider</guilabel>.</simpara></step>\r
- <step><simpara>Check the box adjacent to <guilabel>prepayment required</guilabel> if prepayment is required.</simpara></step>\r
- <step><simpara>Choose if you will add <guilabel>All Lineitems</guilabel> or <guilabel>Selected Lineitems</guilabel> to your purchase order.</simpara></step>\r
- <step><simpara>Check the box if you want to <guilabel>Import Bibs</guilabel> and <guilabel>Create Copies</guilabel> in the catalog.</simpara></step>\r
- <step><simpara>Click <guibutton>Submit</guibutton>.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- </section>\r
- <section id="_view_place_orders">\r
- <title>View/Place Orders</title>\r
- <procedure>\r
- <step><simpara>Open a bib record.</simpara></step>\r
- <step><simpara>Click <menuchoice><guimenu>Actions for this Record</guimenu><guimenuitem>View/Place Orders</guimenuitem></menuchoice>.</simpara></step>\r
- <step><simpara>Click <guibutton>Add to Selection List</guibutton>, or click <guibutton>Create Purchase Order</guibutton>.</simpara></step>\r
- <step><simpara>See the documentation on purchase orders and/or selection lists for instructions to proceed.</simpara></step>\r
- </procedure>\r
- </section>\r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"\r
- xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:id="acquisitions-module_GPLS">\r
-<info>\r
- <title>The Acquisitions Module (from GPLS)</title>\r
- <abstract><para>This documentation is intended for users who will be performing front line\r
- processes in the acquisitions module. Documented functions include creating\r
- selection lists, creating and activating purchase orders, and receiving,\r
- invoicing, and claiming items. Administrative functions are documented in\r
- Administration Functions in the Acquisitions Module. This document is intended\r
- for first time users of the Acquisitions module as well as those who are\r
- familiar with the module and need only a reference guide. The contents of this\r
- document are alphabetized by topic.</para>\r
- </abstract>\r
-</info>\r
-<section id="_brief_records">\r
- <title>Brief Records</title>\r
- <simpara>Brief records are short bibliographic records with minimal information that are\r
- often used as placeholder records until items are received. Brief records can\r
- be added to selection lists or purchase orders and can be imported into the\r
- catalog. You can add brief records to new or existing selection lists. You can\r
- add brief records to new, pending or on-order purchase orders.</simpara>\r
- <simplesect>\r
- <title>Add brief records to a selection list</title>\r
- <procedure>\r
- <step><simpara>Click Acquisitions → New Brief Record. You can also add brief records to\r
- an existing selection list by clicking the Actions menu on the selection list\r
- and choosing Add Brief Record.</simpara></step>\r
- <step><simpara>Choose a selection list from the drop down menu, or enter the name of a new selection list.</simpara></step>\r
- <step><simpara>Enter bibliographic information in the desired fields.</simpara></step>\r
- <step><simpara>Click Save Record.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Add brief records to purchase orders</title>\r
- <simpara>You can add brief records to new or existing purchase orders.</simpara>\r
- <procedure>\r
- <step><simpara>Open or create a purchase order.</simpara></step>\r
- <step><simpara>Click Add Brief Record.</simpara></step>\r
- <step><simpara>Enter bibliographic information in the desired fields. Notice that the\r
- record is added to the purchase order that you just created.</simpara></step>\r
- <step><simpara>Click Save Record.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
-</section>\r
-<section id="_cancel_suspend_acquisitions">\r
- <title>Cancel/suspend acquisitions</title>\r
- <simpara>You can cancel entire purchase orders, line items on the purchase orders, and individual copies\r
- that are attached to a line item. You can also use cancel reasons to suspend purchase orders,\r
- line items, and copies. For example, a cancel reason such as Delayed Publication, would\r
- indicate that the item will be purchased when the item is published. The purchase is, in effect,\r
- suspended rather than cancelled, but the state of the purchase order, line item, or copy would\r
- still become cancelled.</simpara>\r
- <simplesect>\r
- <title>Cancel/suspend copies</title>\r
- <simpara>You can cancel or suspend line items that are in a state of on order or pending order.</simpara>\r
- <procedure>\r
- <step><simpara>Select the Copies link.</simpara></step>\r
- <step><simpara>Click the Cancel link adjacent to the copy that you wish to cancel.</simpara></step>\r
- <step><simpara>Select a cancel reason from the drop down menu that appears, and click Cancel copy.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Cancel/suspend line items</title>\r
- <simpara>You can cancel or suspend line items that are in a state of on order or pending order.</simpara>\r
- <procedure>\r
- <step><simpara>Check the boxes of the line items that you wish to cancel.</simpara></step>\r
- <step><simpara>Click Actions →Cancel Selected Lineitems.</simpara></step>\r
- <step><simpara>Select a cancel reason from the drop down menu. Choose the cancel reason,\r
- and click Cancel Line Items. The status of the line item is now cancelled.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Cancel/suspend purchase orders</title>\r
- <procedure>\r
- <step><simpara>Notice the Cancel column in the top half of the purchase order.</simpara></step>\r
- <step><simpara>Click the drop down arrow adjacent to Cancel order, and select a reason for\r
- cancelling the order.</simpara></step>\r
- <step><simpara>Click Cancel order. The state of the purchase order is cancelled.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
-</section>\r
-<section id="_claim_items">\r
- <title>Claim items</title>\r
- <simpara>Manual claiming of items can be accomplished in multiple ways, but electronic\r
- claiming is not available in the 2.0 release.</simpara>\r
- <simpara>You can apply claim policies to line items or individual copies. You also can\r
- use the default claim policy associated with your provider to claim items.</simpara>\r
- <simplesect>\r
- <title>Apply a claim policy</title>\r
- <simpara>You can apply a claim policy to an item in one of two ways: apply a claim\r
- policy to a line item when the item is created on the selection list or\r
- purchase order, or use the default claim policy associated with the provider on\r
- the purchase order. The default claim policy for a provider is established when\r
- the provider is created and will be used for claiming if no claim policy has\r
- been applied.</simpara>\r
- <procedure>\r
- <step><simpara>Open a selection list or purchase order.</simpara></step>\r
- <step><simpara>Click the Actions drop down menu on the line item.</simpara></step>\r
- <step><simpara>Click Apply Claim Policy.</simpara></step>\r
- <step><simpara>A drop down menu of claim policies will appear. Choose a claim policy to\r
- apply to the line item. The claim policy will be applied to all items that have\r
- not been received or cancelled.</simpara></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Change a claim policy</title>\r
- <simpara>You can manually change a claim policy that has been applied to a line item.</simpara>\r
- <procedure>\r
- <step><simpara>Open a selection list or purchase order.</simpara></step>\r
- <step><simpara>Click the Actions drop down menu on the line item.</simpara></step>\r
- <step><simpara>Click Change Claim Policy.</simpara></step>\r
- <step><simpara>A drop down menu of claim policies will appear. Choose a claim policy to apply to the line\r
- item.</simpara></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Claim an item</title>\r
- <simpara>You can manually claim items at any time after the item has been ordered.</simpara>\r
- <procedure>\r
- <step><simpara>Open a purchase order.</simpara></step>\r
- <step><simpara>Click the Actions drop down menu on the line item.</simpara></step>\r
- <step><simpara>Click Claims. The number of existing claims appears in parentheses.</simpara></step>\r
- <step><simpara>A drop down menu of items to be claimed and possible claim actions appears.\r
- Check the boxes adjacent to the item that you want to claim and the action that\r
- you will take. You can claim items that have not been received or cancelled.</simpara></step>\r
- <step><simpara>Click Claim Selected.</simpara></step>\r
- <step><simpara>Select a claim type from the drop down menu. Entering a note is optional.</simpara></step>\r
- <step><simpara>Click Claim.</simpara></step>\r
- <step><simpara>The number of existing claims on the line item updates, and a claim voucher\r
- appears. The voucher can be printed and mailed to the vendor to initiate the\r
- claim.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Produce a list of claim-ready items</title>\r
- <simpara>If an item has not been received and meets the conditions for claiming\r
- according to the item’s claim policy, then the item will be eligible for\r
- claiming. Evergreen can produce a list of items, by ordering branch, which is\r
- ready to be claimed. You can use this list to manually claim items from your\r
- provider.</simpara>\r
- <procedure>\r
- <step><simpara>Click Acquisitions →Claim-Ready Items.</simpara></step>\r
- <step><simpara>Choose a branch from the drop down menu to claim items that were ordered by this\r
- branch.</simpara></step>\r
- <step><simpara>Any items that meet the conditions for claiming will appear.</simpara></step>\r
- <step><simpara>Check the box adjacent to the line items that you wish to claim. Click Claim selected items.</simpara></step>\r
- <step><simpara>Select a claim type from the drop down menu. Entering a note is optional.</simpara></step>\r
- <step><simpara>Click Claim.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
-</section>\r
-<section id="_export_single_attribute_list">\r
- <title>Export Single Attribute List</title>\r
- <simpara>You can export ISBNs, ISSNs, or UPCs as a file from the list of line item(s). A list of ISBNs, for\r
- example, could be uploaded to vendor websites when placing orders.</simpara>\r
- <procedure>\r
- <step><simpara>From a selection list or purchase order, check the boxes of the line items with attributes\r
- that you wish to export.</simpara></step>\r
- <step><simpara>Click Actions → Export Single Attribute List.</simpara></step>\r
- <step><simpara>Choose the line item attribute that you would like to export from the drop down list of\r
- attributes.</simpara></step>\r
- <step><simpara>Click Export List.</simpara></step>\r
- <step><simpara>Save the file to your computer.</simpara></step>\r
- <step><simpara>Open the file. Choose a program to open the file. The following is an example of an ISBN in\r
- a spreadsheet.</simpara></step>\r
- </procedure>\r
-</section>\r
-<section id="_funds">\r
-<title>Funds</title>\r
- <simpara>You can apply a single fund or multiple funds to copies on a selection list or\r
- purchase order. You can change the fund that has been applied to an item at\r
- any time on a selection list. You can change the fund that has been applied to\r
- an item on a purchase order if the purchase order has not yet been activated.</simpara>\r
- <simpara>Funds can be applied to items from the Copies link that is located on a line\r
- item. Funds can also be applied to copies by batch updating line items and\r
- their attendant copies.</simpara>\r
- <simplesect>\r
- <title>Apply funds to individual copies</title>\r
- <procedure>\r
- <step><simpara>Click the Copies link on the line item.</simpara></step>\r
- <step><simpara>To apply a fund to an individual item, click the drop down arrow in the Fund field.</simpara>\r
- <note><simpara>A yellow fund name indicates that the balance in the fund has dropped to the\r
- warning percent that was entered in the admin module. A red fund name\r
- indicates that the balance in the fund has dropped to the stop percent that was\r
- entered in the admin module. Funds that have been closed out will no longer\r
- appear on the drop down list.</simpara></note>\r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Apply funds to copies via batch updates to line items</title>\r
- <simpara>You can apply funds to all copies on a line item(s) from the Actions menu on\r
- the selection list or the purchase order.</simpara>\r
- <procedure>\r
- <step><simpara>Check the boxes of the line items with copies to which you would like to apply funds.</simpara></step>\r
- <step><simpara>Click Actions →Apply Funds to Selected Items.</simpara></step>\r
- <step><simpara>Select the fund that you wish to apply to the copies.</simpara></step>\r
- <step><simpara>Click Submit.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
-</section>\r
-<section id="_invoice_acquisitions">\r
- <title>Invoice acquisitions</title>\r
- <simpara>You can create invoices for purchase orders, individual line items, and blanket\r
- purchases. You can also link existing invoices to purchase orders. In 2.0, all\r
- invoicing is manual.</simpara><simpara>You can invoice items before you receive the items if desired. You can also\r
- reopen closed invoices, and you can print all invoices.</simpara>\r
- <simplesect>\r
- <title>Create a blanket invoice</title>\r
- <simpara>You can create a blanket invoice for purchases that are not attached to a\r
- purchase order.</simpara>\r
- <procedure>\r
- <step><simpara>Click Acquisitions → Create invoice.</simpara></step>\r
- <step><simpara>Enter the invoice information in the top half of the screen. </simpara></step>\r
- <step><simpara>Select a charge type from the drop down menu.</simpara></step>\r
- <step><simpara>Select a fund from the drop down menu.</simpara></step>\r
- <step><simpara>Enter a Title/Description of the resource.</simpara></step>\r
- <step><simpara>Enter the amount that you were billed.</simpara></step>\r
- <step><simpara>Enter the amount that you paid.</simpara></step>\r
- <step><simpara>Save the invoice.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Create an invoice for a purchase order</title>\r
- <simpara>You can create an invoice for all of the line items on a purchase order. The\r
- only fields that are required to save the invoice are the Vendor Invoice ID and\r
- the number of items invoiced, billed, and paid for each line item. With the\r
- exception of fields with drop down menus, no limitations on the data that you\r
- enter exist.</simpara>\r
- <procedure>\r
- <step><simpara>Open a purchase order.</simpara></step>\r
- <step><simpara>Click Create Invoice.</simpara></step>\r
- <step><simpara>Enter a Vendor Invoice ID. This number may be listed on the paper invoice sent from your\r
- vendor.</simpara></step>\r
- <step><simpara>Choose a Receive Method from the drop down menu.</simpara>\r
- <note><simpara>Only paper invoicing is available in the 2.0 release. Electronic invoicing\r
- may be available in future releases.</simpara></note>\r
- </step>\r
- <step><simpara>The Provider is generated from the purchase order and is entered by default.</simpara></step>\r
- <step><simpara>Enter a note.</simpara></step>\r
- <step><simpara>Select a payment method from the drop down menu.</simpara></step>\r
- <step><simpara>The Invoice Date is entered by default as the date that you create the invoice. You can\r
- change the date by clicking in the field. A calendar drops down.</simpara></step>\r
- <step><simpara>Enter an Invoice Type.</simpara></step>\r
- <step><simpara>The Shipper defaults to the provider that was entered in the purchase order.</simpara></step>\r
- <step><simpara>Enter a Payment Authorization.</simpara></step>\r
- <step><simpara>The Receiver defaults to the branch at which your workstation is registered. You can\r
- change the receiver by selecting an org unit from the drop down menu.\r
- The bibliographic line items are listed in the next section of the invoice. Along with the title\r
- and author of the line items is a summary of copies ordered, received, invoiced, claimed, and\r
- cancelled. You can also view the amounts estimated, encumbered, and paid for each line item.\r
- Finally, each line item has a line item ID and links to the selection list (if used) and the purchase\r
- order.</simpara></step>\r
- <step><simpara>Enter the number of items that were invoiced, the amount that the organization was billed,\r
- and the amount that the organization paid.</simpara></step>\r
- <step><simpara>You have the option to add charge types if applicable. Charge types are additional charges\r
- that can be selected from the drop down menu. Common charge types include taxes and\r
- handling fees.</simpara></step>\r
- <step><simpara>You have three options for saving an invoice. You can click Save, which saves the changes\r
- that you have made, but keeps the invoice open. You can click Save and Prorate, which\r
- enables you to save the invoice and prorate any additional charges, such as taxes, across\r
- funds, if multiple funds have been used to pay the invoice. You also can click Save and\r
- Close. Choose this option when you have completed the invoice.</simpara></step>\r
- </procedure>\r
- <note><simpara>You can re-open a closed invoice by clicking the link, Re-open invoice. This link\r
- appears at the bottom of a closed invoice.</simpara></note>\r
- </simplesect>\r
- <simplesect>\r
- <title>Link an existing invoice to a purchase order</title>\r
- <simpara>You can use the link invoice feature to link an existing invoice to a purchase\r
- order. For example, an invoice is received for a shipment with items on\r
- purchase order #1 and purchase order #2. When the invoice arrives, purchase\r
- order #1 is retrieved, and the invoice is created. To receive the items on\r
- purchase order #2, simply link the invoice to the purchase order. You do not\r
- need to recreate it.</simpara>\r
- <procedure>\r
- <step><simpara>Open a purchase order.</simpara></step>\r
- <step><simpara>Click Link Invoice.</simpara></step>\r
- <step><simpara>Enter the Invoice # and the Provider of the invoice to which you wish to link.</simpara></step>\r
- <step><simpara>Click Link.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>View an invoice</title>\r
- <simpara>You can view an invoice in one of four ways: view open invoices; view invoices\r
- on a purchase order; view invoices by searching specific invoice fields; view\r
- invoices attached to a line item.</simpara>\r
- <itemizedlist>\r
- <listitem><simpara>To view open invoices, click Acquisitions → Open invoices. This opens the Acquisitions\r
- Search screen. The default fields search for open invoices. Click Search.</simpara></listitem>\r
- <listitem><simpara>To view invoices on a purchase order, open a purchase order, and click the View Invoices\r
- link. The number in parentheses indicates the number of invoices that are attached to the\r
- purchase order.</simpara></listitem>\r
- </itemizedlist>\r
- </simplesect>\r
-</section>\r
-<section id="_line_items">\r
- <title>Line Items</title>\r
- <simpara>Line items represent bibliographic records on a selection list or purchase\r
- order. One line item corresponds to one bibliographic record. Line items\r
- contain attributes, which are characteristics of the bibliographic record, such\r
- as ISBNs or Title. Line items also contain copy information, price information,\r
- and notes and alerts.</simpara>\r
- <simplesect>\r
- <title>Add alerts to a line item</title>\r
- <simpara>Alerts are pop up messages that appear when an item is received. Alerts can be\r
- printed on the line item worksheet.</simpara>\r
- <procedure>\r
- <step><simpara>Click the Notes link on the line item.</simpara></step>\r
- <step><simpara>Click the New Alert drop down button.</simpara></step>\r
- <step><simpara>Choose an alert code from the drop down menu.</simpara></step>\r
- <step><simpara>Add additional comments if desired.</simpara></step>\r
- <step><simpara>Click Create. The alert will display on the screen.</simpara></step>\r
- <step><simpara>Click Return to return to the line item. When you return to the line item,\r
- a flag will appear to indicate that an alert is on the line item.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Add copies to a line item</title>\r
- <simpara>Use the Copies link to add copy information to a line item. You can add copies\r
- to line items on a selection list or a purchase order.</simpara>\r
- <procedure>\r
- <step><simpara>Click the Copies link on a line item.</simpara></step>\r
- <step><simpara>Enter the number of items that you want to order in Item Count, and click Go. The number\r
- of items that you want to order will display below.</simpara></step>\r
- <step><simpara>If desired, apply a Distribution Formula from the drop down list. Distribution formulas tell\r
- the ILS how many copies should be distributed to each location.</simpara></step>\r
- <step><simpara>The owning branch and shelving location populate with entries from the distribution\r
- formula. Click Apply.</simpara></step>\r
- <step><simpara>Look back at the top gray row of text boxes above the distribution formula. Each text box in\r
- this row corresponds to the columns below. Changes made here will be applied to all\r
- copies below. Click Batch Update.</simpara></step>\r
- <step><simpara>Click Save Changes.</simpara></step>\r
- <step><simpara>Click Return to return to the selection list or purchase order.</simpara></step>\r
- <step><simpara>Add the item’s price to the line item in the Estimated Price field.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Add notes to a line item</title>\r
- <simpara>Notes on line items can include any additional information that you want to add\r
- to the line item. Notes can be internal or can be made available to providers.\r
- Notes appear in a pop up box when an item is received. Notes can be printed on\r
- line item worksheets, which can be printed and placed in books for processing.</simpara>\r
- <procedure>\r
- <step><simpara>Click the Notes link on the line item.</simpara></step>\r
- <step><simpara>Click the New Note drop down button.</simpara></step>\r
- <step><simpara>Enter a note.</simpara></step>\r
- <step><simpara>You have the option to make this note available to your provider. Click the\r
- check box adjacent to Note is vendor-public.</simpara></step>\r
- <step><simpara>Click Create. The note will appear on the screen.</simpara></step>\r
- <step><simpara>Click Return to return to the line item. When you return to the line item,\r
- a number in parentheses adjacent to notes indicates how many notes are attached\r
- to the item.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Holdings maintenance</title>\r
- <simpara>After an item has been received, click Actions → Holdings Maintenance to edit\r
- holdings. The Holdings Maintenance screen opens in a new tab.</simpara>\r
- </simplesect>\r
- <simplesect>\r
- <title>Link to invoice</title>\r
- <simpara>Use the Link to invoice menu item to link the line item to an invoice that\r
- already exists in the ILS.</simpara>\r
- <procedure>\r
- <step><simpara>Click Actions → Link to Invoice.</simpara></step>\r
- <step><simpara>A pop up box appears. Enter an invoice number.</simpara></step>\r
- <step><simpara>Enter a provider. The field will auto-complete.</simpara></step>\r
- <step><simpara>Click Link.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Update barcodes</title>\r
- <simpara>After an item has been received, click Actions → Update Barcodes to edit\r
- holdings. The Volume and Copy Creator screen opens in a new tab.</simpara>\r
- </simplesect>\r
- <simplesect>\r
- <title>View history</title>\r
- <simpara>Click Actions → View history to view the changes that have occurred in the\r
- life of the line item.</simpara>\r
- </simplesect>\r
- <simplesect>\r
- <title>View invoice</title>\r
- <simpara>Click Actions → View invoice to view any invoices that are attached to the line item.</simpara>\r
- </simplesect>\r
- <simplesect>\r
- <title>Line Item Worksheet</title>\r
- <simpara>The Line Item Worksheet was designed to be a printable sheet that contains\r
- details about the line item, including alerts and notes, and distribution of\r
- the copies. This worksheet could placed in a book that is sent to cataloging or\r
- processing.</simpara>\r
- <procedure>\r
- <step><simpara>From a selection list or purchase order, click the worksheet link on the line item.</simpara></step>\r
- <step><simpara>The line item worksheet appears.</simpara></step>\r
- <step><simpara>To print the worksheet, click the Print Page link in the top right corner.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Link line items to the catalog</title>\r
- <simpara>You can link a MARC record or brief record on a selection list to the corresponding MARC record\r
- in the catalog. This may be useful for librarians who have a brief MARC record in their catalog\r
- and want to import a better record that is attached to their selection list. No collision detection\r
- exists when importing an item into the selection list or catalog, so the link to catalog option\r
- enables you to search for a matching record and link to it from the selection list or purchase\r
- order. When you import the record from the purchase order, the record will overlay the linked\r
- record in the catalog.</simpara>\r
- <procedure>\r
- <step><simpara>From the line item, click Link to catalog.</simpara></step>\r
- <step><simpara>In the text box that pops up, search terms, such as ISBN and title, are entered by default.</simpara></step>\r
- <step><simpara>Click Search.</simpara></step>\r
- <step><simpara>Result(s) appear. Click the link to View MARC, or Select the record to link it to the record on\r
- the selection list or purchase order.</simpara></step>\r
- <step><simpara>The screen will reload, and the line item displays with a catalog link. The records are linked.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
-</section>\r
-<section id="_load_bib_records_and_items_into_the_catalog">\r
- <title>Load Bib Records and Items Into the Catalog</title>\r
- <simpara>You can load bib records and items into the catalog at three different locations in the\r
- acquisitions module.</simpara>\r
- <itemizedlist>\r
- <listitem><simpara>You can import bib records and items (if holdings information is attached) when you upload\r
- MARC order records. Click Acquisitions → Load MARC Order Records and check the box\r
- adjacent to Load Bibs and Items into the ILS.</simpara></listitem>\r
- <listitem><simpara>You can import bib records and items into the catalog when you create a purchase order\r
- from a selection list. From the selection list, click Actions → Create Purchase Order. Check\r
- the box adjacent to Load Bibs and Items into the ILS to import the records into the catalog.</simpara></listitem>\r
- <listitem><simpara>You can import bib records and items into the catalog from a purchase order by clicking\r
- Actions → Load Bibs and Items.</simpara></listitem>\r
- </itemizedlist>\r
- <note><simpara>If you have not loaded bib records and items into the catalog before you activate\r
- a purchase order, then the ILS will automatically import the bib records and\r
- items into the catalog when you activate the purchase order.</simpara></note>\r
-\r
- <simplesect>\r
- <title>Load Catalog Record IDs</title>\r
- <simpara>The Load Catalog Record IDs function enables you to create line items from a\r
- list of catalog records whose record IDs are saved in a CSV file.</simpara><simpara>This would be useful if you want to batch order copies of items that your\r
- organization already owns. For example, you run a copy/hold ratio report to\r
- identify how many copies you have available compared to the number of holds\r
- that are on your Hot Fiction display. You decide that you want to order an\r
- extra copy of six titles. Your copy/hold ratio report includes the record ID of\r
- each title. You can save the record IDs into a CSV file, upload the file into\r
- the ILS, and create a purchase order for the items.</simpara>\r
- <procedure>\r
- <step><simpara>Create a CSV file with the record ID of each catalog record in the first\r
- column of the spreadsheet. You can create this CSV file from a spreadsheet\r
- generated by a report, as suggested in the aforementioned example. You can also\r
- copy and paste record IDs from the catalog record into the CSV file.</simpara>\r
- <note><simpara>Record IDs are auto-generated digits associated with each record. They are\r
- found in the Record Summary that appears at the top of each record.</simpara></note>\r
- </step>\r
- <step><simpara>Save the CSV file to your computer.</simpara></step>\r
- <step><simpara>Click Acquisitions → Load Catalog Record IDs.</simpara></step>\r
- <step><simpara>Click Load More Terms.</simpara></step>\r
- <step><simpara>The screen will display the number of terms (record IDs) that have been loaded.</simpara></step>\r
- <step><simpara>Click Retrieve Records. The records will appear as line items to which you can add copies,\r
- notes, and pricing information. Use the Actions menu to save these items to a selection list or\r
- purchase order.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Load MARC Order Records</title>\r
- <simpara>The Load MARC Order Records screen enables you to upload MARC records that have been\r
- saved on your computer into the ILS. You can add the records to a selection list and/or to a\r
- purchase order. You can both create and activate purchase orders in one step from this\r
- interface. Also, from this interface, you can load bibs and items into the catalog.</simpara>\r
- <procedure>\r
- <step><simpara>Click Acquisitions → Load MARC Order Records</simpara></step>\r
- <step><simpara>If you want to upload the MARC records to a new purchase order, then click the check box\r
- adjacent to Create Purchase Order.</simpara></step>\r
- <step><simpara>If you want to activate the purchase order at the time of creation, then click the check box\r
- adjacent to Activate Purchase Order.</simpara></step>\r
- <step><simpara>If you want to load bibs and items into the catalog, then click the check box adjacent to\r
- Load Bibs and Items into the ILS.</simpara></step>\r
- <step><simpara>Enter the name of the Provider. The text will auto-complete.</simpara></step>\r
- <step><simpara>Select an org unit from the drop down menu. The context org unit is the org unit that\r
- "owns" the bib record. You should select a physical location rather than a political or\r
- administrative org unit as the context org unit. For example, the Smith County Library\r
- System is funding purchase of a copy of Gone with the Wind. The system owns the bib\r
- record, but it cannot receive the physical item. The acquisitions librarian will choose a\r
- physical branch of that system, a processing center or an individual branch, to receive the\r
- item.</simpara></step>\r
- <step><simpara>If you want to upload the records to a selection list, you can select a list from the drop down\r
- menu, or type in the name of the selection list that you want to create.</simpara></step>\r
- <step><simpara>Click Browse to search for the file of bibliographic records.</simpara></step>\r
- <step><simpara>Click Upload.</simpara></step>\r
- <step><simpara>A summary of the items that have been processed will appear.</simpara></step>\r
- <step><simpara>Click the links that appear to view the purchase order or the selection list.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>MARC Federated Search</title>\r
- <simpara>The MARC Federated Search enables you to import bibliographic records into a selection list or\r
- purchase order from a Z39.50 source.</simpara>\r
- <procedure>\r
- <step><simpara>Click Acquisitions → MARC Federated Search.</simpara></step>\r
- <step><simpara>Check the boxes of Z39.50 services that you want to search. Your local Evergreen Catalog is\r
- checked by default. Click Submit.</simpara></step>\r
- <step><simpara>A list of results will appear. Click the Copies link to add copy information to the line item.</simpara></step>\r
- <step><simpara>Click the Notes link to add notes or line item alerts to the line item.</simpara></step>\r
- <step><simpara>Enter a price in the Estimated Price field.</simpara></step>\r
- <step><simpara>You can save the line item(s) to a selection list by checking the box on the line item and\r
- clicking Actions →Save Items to Selection List. You can also create a purchase order from\r
- the line item(s) by checking the box on the line item and clicking Actions → Create\r
- Purchase Order.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
-</section>\r
-<section id="_patron_requests">\r
- <title>Patron Requests</title>\r
- <simpara>The patron requests interface will allow you to view requests that patrons make\r
- via the OPAC. The functionality for OPAC requests is not currently available\r
- in the native Evergreen interface, so the screen remains blank in 2.0.</simpara>\r
-</section>\r
-<section id="_purchase_orders">\r
- <title>Purchase Orders</title>\r
- <simpara>You can create a purchase order from a selection list, a batch upload of MARC\r
- order records, the View/Place Orders link in the catalog, or results from a\r
- MARC Federated Search. You can also create blanket\r
- purchase orders to which you can add brief records or generic charges and fees.</simpara>\r
- <simplesect>\r
- <title>Activate a purchase order</title>\r
- <simpara>Before you can active a purchase order, the following criteria must be met:</simpara>\r
- <procedure>\r
- <step><simpara>The field, Activate Order?, is located in the top half of the purchase order. The answer\r
- adjacent to this field must be Yes.</simpara></step>\r
- <step><simpara>Each line item must contain an estimated price. If the Activate Order? field in the top half\r
- of the purchase order reads, No: The lineitem has no price (ACQ_LINEITEM_NO_PRICE),\r
- then simply enter a price in the estimated price field, tab out of the field, and click Reload.</simpara></step>\r
- </procedure><simpara>When the above criteria have been met, proceed with the following:\r
- . Look at the Activate Order? field in the top half of the purchase order. Click the\r
- hyperlinked Activate Order. When you activate the order, the bibliographic records and\r
- copies will be imported into the catalog, and the funds associated with the purchases will be\r
- encumbered.</simpara>\r
- <note><simpara>You can add brief records to new or existing purchase orders.</simpara></note>\r
- </simplesect>\r
- <simplesect>\r
- <title>Add charges, taxes, fees, or discounts to a purchase order</title>\r
- <simpara>You can add charges, taxes, fees, or discounts to a purchase order. These\r
- additional charges will be reflected in the amounts that are estimated and\r
- encumbered on the purchase order.</simpara>\r
- <procedure>\r
- <step><simpara>Open or create a purchase order.</simpara></step>\r
- <step><simpara>Click New charge.</simpara></step>\r
- <step><simpara>Select a charge type from the drop down menu.</simpara></step>\r
- <step><simpara>Select a fund from the drop down menu.</simpara></step>\r
- <step><simpara>Enter a Title/Description, Author, and Note if applicable.</simpara></step>\r
- <step><simpara>Enter an estimated cost.</simpara></step>\r
- <step><simpara>Add another new charge, or click Save New Charges.</simpara></step>\r
- </procedure>\r
- <note><simpara>Discounts are not consistently supported in the 2.0 release.</simpara></note>\r
- </simplesect>\r
- <simplesect>\r
- <title>Add notes to a purchase order</title>\r
- <simpara>You can add notes to each purchase order. These can be viewed by staff and/or\r
- by the provider. By default, notes are only visible to staff.</simpara>\r
- <procedure>\r
- <step><simpara>Open a purchase order.</simpara></step>\r
- <step><simpara>In the top half of the purchase order, you see a Notes field. The number of notes that are\r
- attached to the purchase order is hyperlinked in parentheses next to the Notes field.</simpara></step>\r
- <step><simpara>Click the hyperlinked number.</simpara></step>\r
- <step><simpara>Click New Note.</simpara></step>\r
- <step><simpara>Enter the note. If you wish to make it available to the provider, click the check box adjacent\r
- to Note is vendor-public.</simpara></step>\r
- <step><simpara>Click Create.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Create a purchase order</title>\r
- <procedure>\r
- <step><simpara>Click Acquisitions → Create Purchase Order.</simpara></step>\r
- <step><simpara>A pop-up box appears. Select an owning library from the drop down menu.</simpara></step>\r
- <step><simpara>Enter a provider in the box. The text will auto complete.</simpara></step>\r
- <step><simpara>Check the box adjacent to Prepayment Required.</simpara></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- <step><simpara>The purchase order has been created. You can now create a new charge type or add a brief\r
- record.</simpara></step>\r
- </procedure>\r
- <note><simpara>The Total Estimated is the sum of the prices. The Total Encumbered is the total\r
- estimated that is encumbered when the purchase order is activated. The Total\r
- Spent column automatically updates when the items are invoiced.</simpara></note>\r
- </simplesect>\r
- <simplesect>\r
- <title>Mark ready for order</title>\r
- <simpara>After an item has been added to a selection list or purchase order, you can mark it ready for\r
- order. This step is optional but may be useful to individual workflows.</simpara>\r
- <procedure>\r
- <step><simpara>If you want to mark part of a selection list ready for selector, then you can check the box(es)\r
- of the line item(s) that you wish to mark ready for selector. If you want to mark the entire\r
- list ready for selector, then skip to step 2.</simpara></step>\r
- <step><simpara>Click Actions → Mark Ready for Order.</simpara></step>\r
- <step><simpara>A pop up box will appear. Choose to mark the selected line items or all line items.</simpara></step>\r
- <step><simpara>Click Go.</simpara></step>\r
- <step><simpara>The screen will refresh. The line item will be highlighted gray, and the status will change to\r
- order-ready.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Name a purchase order</title>\r
- <simpara>A new purchase order is given the purchase order ID as a default name. However,\r
- you can change that name to any grouping of letters or numbers. You can reuse\r
- purchase order names as long as a name is never used twice in the same year.</simpara>\r
- <procedure>\r
- <step><simpara>Open or create a purchase order.</simpara></step>\r
- <step><simpara>The Name of the purchase order is in the top left column of the purchase order. The\r
- hyperlinked number is an internal ID number that Evergreen has assigned.</simpara></step>\r
- <step><simpara>To change this number, click on the hyperlinked ID.</simpara></step>\r
- <step><simpara>Enter a new purchase order number in the pop up box.</simpara></step>\r
- <step><simpara>Click OK.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Print purchase orders</title>\r
- <simpara>You can print a purchase order from the purchase order screen. If you add a\r
- note to a line item, the note will only appear in the Notes column on the\r
- printed purchase order if you make the note vendor-public. Currently, no notes\r
- appear in the Notes to the Vendor section of the printed purchase order.</simpara>\r
- <procedure>\r
- <step><simpara>Open a purchase order.</simpara></step>\r
- <step><simpara>Click Actions → Print Purchase Order.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Split order by line items</title>\r
- <simpara>You can create a purchase order with multiple line items, and then split the\r
- purchase order so that each line item is on separate purchase orders.</simpara><simpara>When a purchase order is in the status of pending, a link to split order by\r
- Lineitems appears in the bottom left corner of the top half of the screen.</simpara>\r
- <procedure>\r
- <step><simpara>Click Split Order by Lineitems.</simpara></step>\r
- <step><simpara>A pop up box will confirm that you want to split the purchase order. Click OK to continue.</simpara></step>\r
- <step><simpara>The items will display by default as a virtual combined purchase order. Future\r
- enhancements will allow you to activate the purchase order for each item from this screen.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>View On-Order Purchase Orders</title>\r
- <simpara>You can view a list of on-order purchase orders by clicking Acquisitions –> Purchase Orders. The\r
- ordering agency defaults to the branch at which your workstation is registered. The state of the\r
- purchase order defaults to on-order.</simpara><simpara>You can add more search terms by clicking Add Search Term. Search terms are ANDed together.\r
- Click Search to begin your search.</simpara><simpara>If you want to expand or change your search of purchase orders, you can choose other criteria\r
- from the drop down menus.</simpara>\r
- </simplesect>\r
- <simplesect>\r
- <title>View EDI messages on a purchase order</title>\r
- <simpara>You can view electronic messages from your vendor about a specific purchase order.</simpara>\r
- <procedure>\r
- <step><simpara>Open a purchase order.</simpara></step>\r
- <step><simpara>In the top half of the purchase order, you see an EDI Messages field. The number of\r
- messages that are attached to the purchase order is hyperlinked in parentheses next to the\r
- EDI Messages field.</simpara></step>\r
- <step><simpara>Click the hyperlinked number to view the messages.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>View Purchase Order History</title>\r
- <simpara>In the top half of the purchase order, you can view the history of the purchase\r
- order. Click the View link in the History field.</simpara>\r
- </simplesect>\r
-</section>\r
-<section id="acquisitions_receiving">\r
- <title>Receiving</title>\r
- <simpara>You can receive and un-receive entire purchase orders, line items, and\r
- individual copies. You can receive items before or after you invoice items.</simpara>\r
- <simplesect>\r
- <title>Receive/un-receive copies</title>\r
- <itemizedlist>\r
- <listitem><simpara>To receive copies, click the Copies link on the line item, and click the Mark Received link\r
- adjacent to each copy.</simpara></listitem>\r
- <listitem><simpara>To un-receive copies, click the Copies link on the line item, and click the Un-Receive link\r
- adjacent to each copy.</simpara></listitem>\r
- </itemizedlist>\r
- </simplesect>\r
- <simplesect>\r
- <title>Receive/un-receive line items</title>\r
- <itemizedlist>\r
- <listitem><simpara>To receive a line item, click the Actions → Mark Received link on the line item.</simpara></listitem>\r
- <listitem><simpara>To un-receive a line item, click the Actions → Un-receive link on the line item.</simpara></listitem>\r
- </itemizedlist>\r
- </simplesect>\r
- <simplesect>\r
- <title>Receive/un-receive purchase orders</title>\r
- <itemizedlist>\r
- <listitem><simpara>To receive a purchase order, click Actions →Mark Purchase Order as Received. The\r
- purchase order will have a state of received.</simpara></listitem>\r
- <listitem><simpara>To un-receive a purchase order, click Actions →Un-Receive Purchase Order. The purchase\r
- will have a state of on order.</simpara></listitem>\r
- </itemizedlist>\r
- </simplesect>\r
-</section>\r
-<section id="acquisitons_searching">\r
- <title>Searching</title>\r
- <simpara>In the acquisitions module, you can search line items, line items and catalog\r
- records, selection lists, purchase orders, and invoices. To access the\r
- searching interface, click Acquisitions → General Search.</simpara>\r
- <note><simpara>Users may wish to begin their acquisitions process by searching line items\r
- and catalog records. This ensures that they do not purchase an item that the\r
- library already owns or is on another selection list or purchase order.</simpara></note>\r
- <procedure>\r
- <step><simpara>Choose the object that you would like to search from the drop down menu.</simpara></step>\r
- <step><simpara>Next, refine your search by choosing the specific fields that you would like to search. Click\r
- Add Search Term to add more fields. Search terms are ANDed together. Click the red X at\r
- the end of each row to delete search terms. Some search terms will be disabled depending\r
- on your choice of items to search.</simpara></step>\r
- <step><simpara>After you have added search term(s), click Search or click the Enter key. A list of results\r
- appears.</simpara></step>\r
- <step><simpara>If you want to edit your search, click the Reveal Search button in the top right corner of the\r
- results screen to display your search.</simpara></step>\r
- </procedure>\r
-</section>\r
-<section id="acquisitons__selection_lists">\r
- <title>Selection Lists</title>\r
- <simpara>Selection lists allow you to create, manage, and save lists of items that you\r
- may want to purchase. To view your selection list, click Acquisitions → My\r
- Selection Lists. Use the general search to view selection lists created by\r
- other users.</simpara>\r
- <simplesect>\r
- <title>Create a selection list</title>\r
- <simpara>Selection lists can be created in four areas within the module. Selection lists can be created\r
- when you Add Brief Records, Upload MARC Order Records, or find records through the MARC\r
- Federated Search. In each of these interfaces, you will find the Add to Selection List field.\r
- Enter the name of the selection list that you want to create in that field.\r
- Selection lists can also be created through the My Selection Lists interface:</simpara>\r
- <procedure>\r
- <step><simpara>Click Acquisitions → My Selection Lists.</simpara></step>\r
- <step><simpara>Click the New Selection List drop down arrow.</simpara></step>\r
- <step><simpara>Enter the name of the selection list in the box that appears.</simpara></step>\r
- <step><simpara>Click Create.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Add items to a selection list</title>\r
- <simpara>You can add items to a selection list in one of three ways: add a brief record; upload MARC order records; add records through a\r
- federated search; or use the View/Place Orders menu item in the\r
- catalog.</simpara>\r
- </simplesect>\r
- <simplesect>\r
- <title>Clone selection lists</title>\r
- <simpara>Cloning selection lists enables you to copy one selection list into a new\r
- selection list. You can maintain both copies of the list, or you can delete the\r
- previous list.</simpara>\r
- <procedure>\r
- <step><simpara>Click Acquisitions → My Selection Lists.</simpara></step>\r
- <step><simpara>Check the box adjacent to the list that you want to clone.</simpara></step>\r
- <step><simpara>Click Clone Selected.</simpara></step>\r
- <step><simpara>Enter a name into the box that appears, and click Clone.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Merge selection lists</title>\r
- <simpara>You can merge two or more selection lists into one selection list.</simpara>\r
- <procedure>\r
- <step><simpara>Click Acquisitions → My Selection Lists.</simpara></step>\r
- <step><simpara>Check the boxes adjacent to the selection lists that you want to merge, and click Merge\r
- Selected.</simpara></step>\r
- <step><simpara>Choose the Lead Selection List from the drop down menu. This is the list to which the items\r
- on the other list(s) will be transferred.</simpara></step>\r
- <step><simpara>Click Merge.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Delete selection lists</title>\r
- <simpara>You can delete selection lists that you do not want to save. You will not be able to retrieve\r
- these items through the General Search after you have deleted the list. You must delete all line\r
- items from a selection list before you can delete the list.</simpara>\r
- <procedure>\r
- <step><simpara>Click Acquisitions → My Selection Lists.</simpara></step>\r
- <step><simpara>Check the box adjacent to the selection list(s) that you want to delete.</simpara></step>\r
- <step><simpara>Click Delete Selected.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Mark Ready for Selector</title>\r
- <simpara>After an item has been added to a selection list or purchase order, you can\r
- mark it ready for selector. This step is optional but may be useful to\r
- individual workflows.</simpara>\r
- <procedure>\r
- <step><simpara>If you want to mark part of a selection list ready for selector, then you can check the box(es)\r
- of the line item(s) that you wish to mark ready for selector. If you want to mark the entire\r
- list ready for selector, then skip to step 2.</simpara></step>\r
- <step><simpara>Click Actions → Mark Ready for Selector.</simpara></step>\r
- <step><simpara>A pop up box will appear. Choose to mark the selected line items or all line items.</simpara></step>\r
- <step><simpara>Click Go.</simpara></step>\r
- <step><simpara>The screen will refresh. The marked line item(s) will be highlighted pink, and the status\r
- changes to selector-ready.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Convert selection list to purchase order</title>\r
- <simpara>Use the Actions menu to convert a selection list to a purchase order.</simpara>\r
- <procedure>\r
- <step><simpara>From a selection list, click Actions → Create Purchase Order.</simpara></step>\r
- <step><simpara>A pop up box will appear.</simpara></step>\r
- <step><simpara>Select the ordering agency from the drop down menu.</simpara></step>\r
- <step><simpara>Enter the provider.</simpara></step>\r
- <step><simpara>Check the box adjacent to prepayment required if prepayment is required.</simpara></step>\r
- <step><simpara>Choose if you will add All Lineitems or Selected Lineitems to your purchase order.</simpara></step>\r
- <step><simpara>Check the box if you want to Import Bibs and Create Copies in the catalog.</simpara></step>\r
- <step><simpara>Click Submit.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
-</section>\r
-<section id="acquisitons_view_place_orders">\r
- <title>View/Place Orders</title>\r
- <procedure>\r
- <step><simpara>Open a bib record.</simpara></step>\r
- <step><simpara>Click Actions for this Record → View/Place Orders.</simpara></step>\r
- <step><simpara>Click Add to Selection List, or click Create Purchase Order.</simpara></step>\r
- </procedure>\r
-</section>\r
-</chapter>\r
+++ /dev/null
-<?xml version='1.0' encoding='UTF-8'?>\r
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"\r
- xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:id="Alternate_Serial_Control">\r
- <info>\r
- <title>Alternate Serial Control</title>\r
- <abstract>\r
- <para>\r
- This tutorial describes a basic workflow in which the user will\r
- register a subscription to a serial publication, express the\r
- distribution of copies of that publication to branches, define the\r
- format of captions to be affixed to each issue, specify details of\r
- the publication pattern, instruct the system to predict future\r
- issues, and finally receive copies of an issue. This tutorial is\r
- not intended to represent exhaustive documentation of Evergreen\r
- features relating to serials, as those features are continually\r
- evolving as of this writing, but it should provide a basis on which\r
- user exploration of serials features can take place. Hopefully,\r
- that exploration will initiate feedback that will lead to the\r
- continuing improvement of serials in Evergreen.\r
- </para>\r
- </abstract>\r
- </info> \r
- <simplesect>\r
- <title>Creating a Copy Template</title>\r
- <para>\r
- To create a serial subscription in the Alternate Serial Control\r
- interfaces, you're first going to need a copy template. For many\r
- use cases, you can create one copy template and re-use it all the\r
- time, but if you don't yet have one ready, follow these steps.\r
- </para>\r
- <para>\r
- Find the copy template editor under the Admin menu of the staff\r
- client.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/find-copy-template-menu.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>Once that page has loaded, click <guibutton>New Template</guibutton>.</para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/create-copy-template.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- You don't actually need to fill out all of these fields. If you don't\r
- want serial copies to get barcodes and show up individually in your\r
- catalog, you only need to set the first two fields, which are "owning\r
- library" and "name." Note that "owning library" in this case refers\r
- to the library that owns the copy template itself. This has nothing to\r
- do with what libraries receive copies or what library manages the\r
- subscription. We'll get to that later.\r
- </para>\r
- <para>\r
- If you do want your copies to have barcodes (and perhaps to circulate)\r
- and to appear individually in your catalog, you will need at least to\r
- fill in the fields shown in the above image.\r
- </para>\r
- </simplesect>\r
- <simplesect>\r
- <title>To the Catalog</title>\r
- <para>\r
- Initiate a catalog search in the staff client to find the bibliographic\r
- record to which you'd like to attach a subscription. If you don't\r
- already have the record in your system, you can import it via any of\r
- your preferred methods (MARC import, Z39.50 search, etc.) and then\r
- look it up in the catalog.\r
- </para>\r
- <para>\r
- From the record detail page, click "Actions for this Record," and then\r
- click "Alternate Serial Control." You note that we've used a magazine\r
- called Flying for our example.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/start-from-catalog.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- </simplesect>\r
- <simplesect>\r
- <title>The Subscription</title>\r
- <para>\r
- Here you'll be presented with an interface that would show you any\r
- existing subscriptions against the bibliographic record you've chosen,\r
- if there were any. More importantly for our purposes, it provides a\r
- "New Subscription" button. Click that.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/create-sub.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- The only required fields here are <guilabel>owning library</guilabel> and <guilabel>start date.</guilabel>\r
- You can choose to specify and end date if you have one. <guilabel>Expected date\r
- offset</guilabel> means the difference between the nominal publishing date of any\r
- given issue and the date that you generally expect to receive your copy.\r
- If a publication is dated with the first of each month, but you\r
- generally receive it five days before that, you might enter <quote>-5 days</quote>\r
- into that field.\r
- </para>\r
- <para>\r
- Once you have created this basic subscription, you'll see that it has\r
- an ID number, which is display as a link that you can click. Click\r
- that link to manage the subscription in greater detail.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/subscription-manage.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- Now you're looking at the Subscription Details page, which has four\r
- tabs. The first tab, labeled Summary, shows information you've already\r
- seen. Proceed to the next tab, Distributions, to start telling\r
- Evergreen where you want copies of your serial to go.\r
- </para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Distributions</title>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/sub-details.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- Using the <guibutton>New Distribution</guibutton> button, create a distribution for each\r
- branch for which you expect to receive copies. Each distribution\r
- needs at least a label, a <quote>holding library</quote>, and a <quote>receive unit\r
- template.</quote> <quote>Receive unit template</quote> is where you select the copy\r
- template we created at the beginning of this tutorial. Label can be\r
- anything, and will only appear at receive time. It is not publicly\r
- visible. "Holding library" refers to the library that will get copies.\r
- </para>\r
- <para>\r
- The last two fields have something to do with binding multiple copies\r
- into larger shelving units, but they are currently ignored by the\r
- Alternate Serial Control, which does not support such binding, and you\r
- should leave these fields blank.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/create-distrib.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- After saving your distribution (and creating any others for other\r
- libraries for which you will receive items), click on each link in the\r
- Label column to set up the streams for each distribution.\r
- </para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Streams</title>\r
- <para>\r
- <quote>Streams</quote> are perhaps the most confusing concept in the Alternate\r
- Serials Control interfaces, but I'll try to explain them concisely: Each\r
- stream represents one *recurring* copy of a serial. So if you have a\r
- library called Example Branch 1 (BR1 for short), and you want BR1 to\r
- get four copies for every issue, then you should create one\r
- distribution for BR1 and four streams for that distribution.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/distribs-to-streams.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- You can create streams one at a time by clicking <guibutton>New Stream</guibutton>. In this\r
- case you have the opportunity to give each stream a routing label. This\r
- routing label only shows up at receive time and on routing lists, and\r
- is not visible in the catalog or anywhere publicly viewable. The\r
- routing label is entirely optional.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/new-stream.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- If you don't care about routing labels, or need to create more than\r
- just a couple of steams, use the <guibutton>Create Many Streams</guibutton> button to create\r
- several at once.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/create-many-streams.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- If you wish to set up routing lists, use the checkboxes on the left\r
- side of the grid interface to select one stream at a time, and click\r
- <guibutton>Routing List for Selected Stream</guibutton>. If you don't care about routing\r
- lists, you may skip to the Captions and Patterns heading of this\r
- document.\r
- </para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Setting Up Routing Lists</title>\r
- <para>\r
- <emphasis>\r
- As of this writing, routing lists features have been written,\r
- but have not yet been slated for inclusion in a 2.0 series\r
- Evergreen release.\r
- </emphasis>\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/routing-list-manage.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- A routing list is made up of <guilabel>users</guilabel>, who will presumably get their\r
- hands on a copy of a serial before that copy hits its regular shelving\r
- location. Those users can be either <guilabel>readers</guilabel>, meaning actual\r
- Evergreen users with a barcode, or <guilabel>departments</guilabel>, which can really be\r
- anything and are represented by a free-form text field. There is also\r
- a <guilabel>note</guilabel> field available in either case.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/routing-list-add.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- Enter any combination of <guilabel>readers</guilabel> and <guilabel>departments</guilabel> you need using\r
- the supplied fields and the "Add" button. Readers are specified by\r
- their barcodes in the appropriately labeled field.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/routing-list-drag.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- You can re-arrange users in the list by dragging and dropping each\r
- numbered row. When you've got the list you want, click <guibutton>Save Changes</guibutton>.\r
- You can remove unwanted users by clicking the <guibutton>[X]</guibutton> link by that\r
- user's list order number.\r
- </para>\r
- </simplesect>\r
- <simplesect>\r
- <title>Captions and Patterns</title>\r
- <para>\r
- After you've set up all the streams you need on all of your\r
- distributions, it's time to move on to the next tab in the Subscription\r
- Details interface: the <guilabel>Captions and Patterns</guilabel> tab.\r
- </para>\r
-\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/caption-pattern-tab.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- Caption and Pattern objects define the same material that would be\r
- described in an 853, 854, or 855 MARC tag. Here you define how your\r
- issues will be captioned and how often you get them.\r
- </para>\r
- <para>\r
- Click the "Add Caption and Pattern" to get a blank row to work with,\r
- and set the leftmost dropdown to Basic, Supplement, or Index, depending\r
- on what you want to define the pattern for. For common periodicals,\r
- Basic is often all that's needed.\r
- </para>\r
- <para>\r
- Next, unless you know how to type a JSON representation of your 85X\r
- tags by hand, click the <guibutton>Wizard</guibutton> button.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/scap-wiz-page-1.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- This Caption and Pattern Wizard is where you'll enter information\r
- according to Library of Congress-specified standards about how this\r
- serial works. The first page of the wizard is for specifying\r
- enumeration captions (commonly involving particles labeled <guilabel>v.</guilabel> and\r
- <guilabel>no.</guilabel>).\r
- </para>\r
- <para>\r
- You can have up to six levels of enumeration captions and two\r
- alternate levels. Each level except the first and first alternate\r
- come with attendant questions about how many units of this level\r
- belong to the higher level. This is all directly based on subfields\r
- $a through $h and $u and $v of the MFHD standard.\r
- </para>\r
- <para>\r
- The wizard has several pages, and after you fill out each page the\r
- way you want, click <guibutton>Next</guibutton> in the upper right corner. You can go\r
- back if you've forgotten something by using the <guibutton>Prev</guibutton> button.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/scap-wiz-page-2.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- The wizard's second page is concerned with calendar changes (i.e., at\r
- what point on the calendar does the highest level enumeration unit\r
- change). You can add as many of these as you like, and each one can be\r
- one of a) the start of a given month, b) the start of a given season,\r
- or c) a specific date. This all corresponds to subfield $x of the MFHD\r
- standard.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/scap-wiz-page-3.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- The wizard's third page is for defining chronology captions. Make sure\r
- that each chronology caption you specify is smaller than the last. Only\r
- mark the <guilabel>Display in Holding Field</guilabel> checkbox if you want the literal\r
- words <quote>year</quote> and <quote>month</quote> and so on to appear next to values like <quote>2010</quote>\r
- and <quote>Nov.</quote>\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/scap-wiz-page-4.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- The fourth page of the wizard deals with indicator codes and the\r
- subfield $w from the MFHD standard. I recommend setting the first two\r
- dropdowns as shown in the above image, unless you are a serials\r
- librarian who knows your stuff and you have a good reason to do\r
- otherwise. Set your frequency ($w) to the appropriate value for your\r
- publication. For truly irregular frequencies, you may wish to select\r
- <guilabel>use number of issues per year</guilabel>, in which case you enter a raw number\r
- of issues per year.\r
- </para>\r
- <para>\r
- After you have finished the wizard and clicked Compile Pattern Code,"\r
- make sure the <guilabel>Active</guilabel> checkbox is marked for the caption and pattern\r
- object you have just created, and click <guibutton>Save Changes</guibutton>.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/save-scap.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- </simplesect>\r
- <simplesect>\r
- <title>On to Issuances</title>\r
- <para>\r
- We're finally close to the point where we define an initial issuance\r
- and let Evergreen predict a run of issuances, and attendant items, from\r
- there.\r
- </para>\r
- <para>\r
- Proceed to the Issuances tab of the Subscription Detail interface, and\r
- click on <guibutton>New Issuance</guibutton>.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/create-iss-1.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- What we're doing here is hand-entering one example issuance, and you\r
- should use the *last issuance you have before you want prediction to\r
- take over.* So if you want to predict all the issues of a monthly\r
- periodical beginning with November 2010, enter the information for your\r
- October 2010 issue.\r
- </para>\r
- <para>\r
- In the holding code section of the New Issuance dialog, click the \r
- <guibutton>Wizard</guibutton> button to get a fields tailor-made for the caption and pattern\r
- you're using, and fill in the information that's appropriate for the\r
- example issuance you're using. Click <guibutton>Compile</guibutton> when you have all those\r
- fields filled in.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/create-iss-2.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- Once everything is filled in on your example issue, click <guibutton>Save</guibutton>. You\r
- have now given the system everything it needs to predict a run of\r
- issues (and the attendant copies that will go to your branches).\r
- </para>\r
- <para>\r
- Click the <guibutton>Generate Predictions</guibutton> button. You'll get a mini-dialog\r
- asking you how many issues to predict. If your subscription has an\r
- end date, you can choose to predict until the subscription's end date.\r
- If your subscription doesn't have an end date, you can indicate how\r
- many issues you want the system to predict (so enter 12 if you want\r
- a year's worth of issues on a monthly publication).\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/predict-how-many.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- After you click <guibutton>Generate</guibutton>, the system should take a moment to predict\r
- your run of issuances and copies, and then you should see the grid of\r
- issuances populated below.\r
- </para>\r
- <para>\r
- You can now delete the example issuance that we created for the\r
- system to base its prediction on. Mark its checkbox on the left side\r
- of the grid and click<guibutton>Delete Selected</guibutton>.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/generated-iss-delete-dummy.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- Your subscription is now completely set up. Let's receive some\r
- copies.\r
- </para>\r
- </simplesect>\r
- <simplesect>\r
- <title>\r
- Batch Receiving\r
- </title>\r
- <para>\r
- The Subscription Details interface has a <guibutton>Batch Item Receive</guibutton> button\r
- that will take you to the Batch Receiving interface for this\r
- subscription.\r
- </para>\r
- <para>\r
- Generally, you won't need to edit anything pertaining to the\r
- subscription itself when receiving items, so you can also get to\r
- Batch Receiving through the <guimenuitem>Actions for this Item</guimenuitem> menu when\r
- viewing a record in the catalog (right next to <guimenuitem>Alternate Serial\r
- Control</guimenuitem> from earlier in this tutorial).\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/batch-receive-choose-iss.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- The Batch Receiving interface will present you with a selection of\r
- as-yet unreceived issuances. The earliest expected issuance with\r
- any as-yet unreceived copies will always be at the top of the list,\r
- so generally you will click next here.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/batch-receive-simple.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- <quote>Simple</quote> mode for Batch Receiving gives you few options - this is\r
- how you receive items that won't have barcodes and won't appear\r
- individually in the catalog. Each item can have a optional note\r
- (stored internally; not displayed anywhere as of this writing, but\r
- not ultimately intended as a publicly-viewable note), and you can\r
- unmark any rows in the table for items that you have not received.\r
- </para>\r
- <para>\r
- More discussion on how to indicate that you haven't received all the\r
- items you were expecting will follow a few paragraphs later in this\r
- tutorial.\r
- </para>\r
- <para>\r
- If you do want to barcode your items, check the <guilabel>Create Units for\r
- Received Items</guilabel> checkbox in the extreme lower right of the\r
- interface.\r
- Units are copy-equivalent objects that will hold a barcode and can\r
- appear in the catalog (and even be targeted for holds). Marking\r
- this checkbox will give you many more fields on each row of the\r
- receiving table.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/batch-receive-autogen-1.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- If you have a printed stack of barcodes available, you can scan\r
- each one into the barcode field of each row of the table. You can\r
- also let the system generate your barcodes automatically, if you\r
- so desire. To accomplish this, mark the auto-generate checkbox,\r
- and enter your first barcode into the first row of the table. Then\r
- press the tab key.\r
- </para>\r
- <para>\r
- The rest of the barcode fields will automatically populate with the\r
- next barcodes in sequence, including check digits.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/batch-receive-autogen-2.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- As for the other fields in the table besides barcode, you can set\r
- them to whatever values you need. Note that anything with a\r
- barcode must also have a call number, so you'll have to put\r
- something there. Drop-downs for call numbers will be populated\r
- with any existing call-number associated with the bibliographic\r
- record for your serial. You can choose from these call numbers,\r
- or, if perhaps you're using a call-number-per-issue policy, you\r
- can create a new call number to apply to the table of items every\r
- time you receive a batch.\r
- </para>\r
- <para>\r
- To spare you the pain of setting potentially dozens of fields in the\r
- receiving table individually, you can enter a value into the very\r
- top row and click <guibutton>Apply</guibutton> at the far right to apply that same value\r
- to its entire column throughout the table.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/batch-receive-apply.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- Now, as for the question of what to do when you didn't receive all\r
- the items you were supposed to get, you can choose what rows in\r
- the table you want to represent the unreceived items. So if you\r
- only received six out of the expected eight, and you're trying to\r
- distribute items evenly between two branches, you might unmark two\r
- checkboxes as shown in the image below.\r
- </para>\r
- <para>\r
- Not only does unmarking the checkbox turn the row grey and prevent\r
- that item from being received when you later click <guibutton>Receive Selected\r
- Items</guibutton> later, but the system also remembers which items you have not\r
- yet received, so that you can receive them later if they arrive\r
- separately. The system's keeping track of unreceived items will\r
- also facilitate a claiming interface, when that is designed and\r
- implemented.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/batch-receive-partial.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- When you've filled in all the item rows, look in the lower left of\r
- the interface for the <guibutton>Receive Selected Items</guibutton> button and click\r
- that.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/batch-receive-receive.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- You see that the items that were marked for receipt are now cleared\r
- from this interface, as they have been received.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/batch-receive-received.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- Since we left all <guilabel>Routing List</guilabel> checkboxes marked, if any of the items\r
- we just received actually have a routing list, we now have another tab\r
- open with a routing list ready to print.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/batch-receive-print-routing.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- <para>\r
- If you set up a routing list as described earlier in this tutorial,\r
- yours will look like this. Multiple routing lists will automatically\r
- print on separate pages.\r
- </para>\r
- <para>\r
- If you received some items with a barcode (and if the copy template\r
- and shelving location you used are OPAC visible), you can now see the\r
- items you received in the catalog.\r
- </para>\r
- <screenshot>\r
- <mediaobject>\r
- <imageobject>\r
- <imagedata fileref="../media/received-items-in-catalog.png" />\r
- </imageobject>\r
- </mediaobject>\r
- </screenshot>\r
- </simplesect>\r
-</chapter>\r
-\r
+++ /dev/null
-<?xml version='1.0' encoding='UTF-8'?>\r
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"\r
- xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:id="UsingtheBookingModule">\r
- <info>\r
- <title>Using the Booking Module</title>\r
- <abstract>\r
- <para>The following chapter will help staff create reservations for cataloged and non-\r
- bibliographic items; create pull lists for reserved items; capture resources; and pick up and\r
- return reservations.\r
-</para>\r
- </abstract>\r
- </info> \r
- <section xml:id="CreatingaReservation">\r
- <title>Creating a Booking Reservation</title>\r
- <indexterm><primary>booking reservation</primary><secondary>creating</secondary></indexterm>\r
- <para>Only staff members can create reservations. To initiate a reservation, staff can \r
- <itemizedlist>\r
- <listitem>search the catalog,</listitem>\r
- <listitem>enter a patron record,</listitem>\r
- <listitem>or use the booking module.</listitem>\r
- </itemizedlist>\r
- </para>\r
- <simplesect>\r
- <title>Search the catalog to create a reservation</title> \r
- <procedure>\r
- <step><para>In the staff client, select <menuchoice><guimenu>Search</guimenu> <guimenuitem>Search the Catalog</guimenuitem>\r
- </menuchoice></para></step>\r
- <step><para>Search for the item to be booked.</para></step>\r
- <step><para>Click <guibutton>Submit Search</guibutton>.</para></step>\r
- <step><para>A list of results will appear. Select the title of the item to be reserved.</para></step>\r
- <step><para>After clicking the title, the record summary appears. Beneath the record summary,\r
- the copy summary will appear. In the <guilabel>Actions</guilabel> column, select <guibutton>Copy Details</guibutton>.</para></step>\r
-\r
- <step><para>The <guilabel>Copy Details</guilabel> will appear in a new row. In the <guilabel>barcode</guilabel> column, click the <guilabel>book now</guilabel> \r
- link.</para></step>\r
- <step><para> A screen showing the title and barcodes of available copies will appear.</para></step>\r
- <step><para>Enter the user’s barcode in the <guilabel>Reserve to patron barcode</guilabel> box. If the patron barcode\r
- does not exist, a pop up box will appear to alert you to the error. After entering the\r
- patron’s barcode, the user’s existing reservations will appear at the bottom of the\r
- screen.</para></step>\r
- <step><para> To the right, a section titled, <guilabel>I need this resource...</guilabel> will allow you to set the dates and\r
- times for which the item should be reserved. If the date/time boxes appear in red,\r
- then the date and time set is incorrect. For example, if the time for which the\r
- reservation is set has already passed, the boxes will appear in red. The times must be\r
- set correctly for the reservation to be accomplished. If the item has already been\r
- reserved at the time for which you are trying to reserve the item, then you will receive\r
- an error message.</para></step>\r
- <step><para>Finally, select the barcode of the item that you want to reserve. If multiple copies of\r
- the item exist, choose the barcode of the copy that you want to reserve, and click\r
- <guibutton>Reserve Selected</guibutton>. If you do not select a barcode, and you click <guibutton>Reserve Selected</guibutton>, you\r
- will receive an error message. If you do not have a preference, you do not have to\r
- select a barcode, and you may click <guibutton>Reserve Any</guibutton>. One of the barcodes will be pulled\r
- from the list. </para>\r
- <note><para>An item must have a status of available or reshelving in order to\r
- be targeted for a reservation. If the item is in another status, the reservation will fail.</para></note></step>\r
- <step><para> After you have made the reservation, a message will confirm that the action succeeded. Click <guibutton>OK</guibutton>.</para></step>\r
- <step><para>The screen will refresh, and the reservation will appear below the user’s name.</para></step>\r
- </procedure>\r
- </simplesect> \r
- <simplesect>\r
- <title>Enter a patron’s record to create a reservation</title>\r
- <procedure> \r
- <step><para>Enter the barcode or patron information, and click <guibutton>Search</guibutton> to retrieve the patron’s record.</para></step>\r
- <step><para>The match(es) should appear in the right pane. Click the desired patron’s name. In the\r
- left panel, a summary of the patron’s information will appear. Click the <guibutton>Retrieve\r
- Patron</guibutton> button in the right corner to access more options in the patron’s record.</para></step>\r
- <step><para>Eight buttons will appear in the top right corner. Select <menuchoice><guimenu>Other </guimenu><guimenuitem>Booking</guimenuitem>\r
- </menuchoice> to create, cancel, pick up, and return reservations.</para></step>\r
- <step><para>The <guilabel>Copy Details</guilabel> will appear in a new row. In the <guilabel>barcode</guilabel> column, click the <guilabel>book now</guilabel> \r
- link.</para></step>\r
- <step><para> A screen showing the title and barcodes of available copies will appear.</para></step>\r
- <step><para>Enter the user’s barcode in the <guilabel>Reserve to patron barcode</guilabel> box. If the patron barcode\r
- does not exist, a pop up box will appear to alert you to the error. After entering the\r
- patron’s barcode, the user’s existing reservations will appear at the bottom of the\r
- screen.</para></step>\r
- <step><para> To the right, a section titled, <guilabel>I need this resource...</guilabel> will allow you to set the dates and\r
- times for which the item should be reserved. If the date/time boxes appear in red,\r
- then the date and time set is incorrect. For example, if the time for which the\r
- reservation is set has already passed, the boxes will appear in red. The times must be\r
- set correctly for the reservation to be accomplished. If the item has already been\r
- reserved at the time for which you are trying to reserve the item, then you will receive\r
- an error message.</para></step>\r
- <step><para>Finally, select the barcode of the item that you want to reserve. If multiple copies of\r
- the item exist, choose the barcode of the copy that you want to reserve, and click\r
- <guibutton>Reserve Selected</guibutton>. If you do not select a barcode, and you click <guibutton>Reserve Selected</guibutton>, you\r
- will receive an error message. If you do not have a preference, you do not have to\r
- select a barcode, and you may click <guibutton>Reserve Any</guibutton>. One of the barcodes will be pulled\r
- from the list. </para>\r
- <note><para>An item must have a status of available or reshelving in order to\r
- be targeted for a reservation. If the item is in another status, the reservation will fail.</para></note></step>\r
- <step><para> After you have made the reservation, a message will confirm that the action succeeded. Click <guibutton>OK</guibutton>.</para></step>\r
- <step><para>The screen will refresh, and the reservation will appear below the user’s name.</para></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Use the booking module to create a reservation</title>\r
- <procedure> \r
- <step><para>Select <menuchoice><guimenu>Booking</guimenu><guimenuitem>Create or Edit Reservations</guimenuitem></menuchoice></para></step>\r
- <step><para>Enter the barcode of the item and click <guibutton>Next</guibutton>.</para></step>\r
- <step><para>A screen showing the name of the available resource will appear.</para></step>\r
- <step><para>Enter the user’s barcode in the <guilabel>Reserve to patron barcode</guilabel> box. If the patron barcode\r
- does not exist, a pop up box will appear to alert you to the error. After entering the\r
- patron’s barcode, the user’s existing reservations will appear.</para></step>\r
- <step><para>To the right, a section titled, <guilabel>I need this resource...</guilabel> will allow you to set the dates and\r
- times for which the item should be reserved. If the date/time boxes appear in red,\r
- then the date and time set is incorrect. For example, if the time for which the\r
- reservation is set has already passed, the boxes will appear in red. The times must be\r
- set correctly for the reservation to be accomplished. If the resource has already been\r
- reserved at the time for which you want to reserve the item, then the item will\r
- disappear.</para></step>\r
- <step><para>Finally, select the resource that you want to reserve. If multiple items or rooms exist,\r
- choose the resource that you want to reserve, and click <guibutton>Reserve Selected</guibutton>. If you do\r
- not select a resource, and you click <guibutton>Reserve Selected</guibutton>, you will receive an error\r
- message. If you do not have a preference, you may click <guibutton>Reserve Any</guibutton>, and one of the\r
- resources will be pulled from the list.</para></step>\r
- <step><para>After you have made the reservation, a message will confirm that the action \r
- succeeded. Click <guibutton>OK</guibutton>.</para></step>\r
- <step><para>The screen will refresh, and the reservation will appear below the user’s name.</para></step>\r
- </procedure>\r
- </simplesect>\r
- </section>\r
- <section xml:id="CancellingaReservation">\r
- <title>Cancelling a Reservation</title>\r
- <indexterm><primary>booking reservation</primary><secondary>cancelling</secondary></indexterm>\r
- <para>Staff members can cancel a patron’s reservation through the Create or Cancel Reservations tab available in a patron’s record. Staff members can also cancel a \r
- reservation immediately after it has been made.</para>\r
- <simplesect> \r
- <title>Enter the patron’s record to cancel a reservation</title> \r
- <procedure> \r
- <step><para>Search for and retrieve a patron’s record.</para></step>\r
- <step><para>Select <menuchoice><guimenu>Other</guimenu><guisubmenu>Booking</guisubmenu><guimenuitem>Create or Cancel Reservations</guimenuitem></menuchoice>.</para></step>\r
- <step><para>The existing reservations will appear at the bottom of the screen.</para></step>\r
- <step><para>To cancel a reservation, highlight the reservation that you want to cancel. Click <guibutton>Cancel Selected</guibutton>.</para></step>\r
- <step><para>A pop-up window will confirm that you cancelled the reservation. Click <guibutton>OK</guibutton>.</para></step>\r
- <step><para>The screen will refresh, and the cancelled reservation will disappear.</para></step>\r
- <step><para> To the right, a section titled, <guilabel>I need this resource...</guilabel> will allow you to set the dates and\r
- times for which the item should be reserved. If the date/time boxes appear in red,\r
- then the date and time set is incorrect. For example, if the time for which the\r
- reservation is set has already passed, the boxes will appear in red. The times must be\r
- set correctly for the reservation to be accomplished. If the item has already been\r
- reserved at the time for which you are trying to reserve the item, then you will receive\r
- an error message.</para></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect> \r
- <title>Cancel a reservation immediately after it has been made</title> \r
- <procedure> \r
- <step><para>Create the reservation.</para></step>\r
- <step><para>Follow steps four through six in the section, Enter the patron’s record to cancel a reservation, to cancel the reservation.</para></step>\r
- <step><para>The existing reservations will appear at the bottom of the screen.</para></step>\r
- </procedure>\r
- </simplesect>\r
- </section>\r
- <section xml:id="CreatingaPullList">\r
- <title>Creating a Pull List</title>\r
- <indexterm><primary>booking reservation</primary><secondary>creating a pull list</secondary></indexterm>\r
- <para>Staff members can create a pull list to retrieve items from the stacks.</para>\r
- <procedure> \r
- <step><para>To create a pull list, select <menuchoice><guimenu>Booking</guimenu><guimenuitem>Pull List</guimenuitem></menuchoice>.</para></step>\r
- <step><para>To find a pull list for your library, select a library from the dropdown box adjacent to See pull list for library.</para></step>\r
- <step><para>You can decide how many days in advance you would like to select reserved items. Enter the number of days in the box adjacent to <guilabel>Generate \r
- list</guilabel> for this many days hence. For example, if you would like to pull items that are needed today, you can enter <userinput>1</userinput> in the box, and you will retrieve items that need to be pulled today.</para></step>\r
- <step><para>Click <guibutton>Fetch</guibutton> to retrieve the pull list.</para></step> \r
- <step><para>The pull list will appear. Click Print to print the pull list.</para></step>\r
- </procedure>\r
- </section>\r
- <section xml:id="CapturingItemsforReservations">\r
- <title>Capturing Items for Reservations</title>\r
- <indexterm><primary>booking reservation</primary><secondary>capturing items</secondary></indexterm>\r
- <para>Staff members can capture items for reservations.</para>\r
- <procedure> \r
- <step><para>In the staff client, select <menuchoice><guimenu>Booking</guimenu><guimenuitem>Capture Resources</guimenuitem></menuchoice>.</para></step>\r
- <step><para>Enter the barcode of the items to be captured. Click <guibutton>Capture</guibutton>.</para></step>\r
- <step><para>A Capture Succeeded message will appear to the right. Information about the item will appear below the message. You can print this \r
- information as a receipt and add it to the item if desired.</para></step>\r
- </procedure>\r
- </section>\r
- <section xml:id="PickingUpReservations">\r
- <title>Picking Up Reservations</title>\r
- <indexterm><primary>booking reservation</primary><secondary>picking up</secondary></indexterm>\r
- <para>Staff members can help users pick up their reservations.</para>\r
- <procedure> \r
- <step><para>In the staff client, select <menuchoice><guimenu>Booking</guimenu><guimenuitem>Pick Up Reservations</guimenuitem></menuchoice></para></step>\r
- <step><para>Enter the user’s barcode. Click <guibutton>Go</guibutton>.</para></step>\r
- <step><para>The title available for pickup will appear. Highlight the title of the item to pick up, and click <guibutton>Pick Up</guibutton>.</para></step>\r
- <step><para>The screen will refresh to show that the patron has picked up the reservation.</para></step>\r
- </procedure>\r
- </section>\r
- <section xml:id="ReturningReservations">\r
- <title>Returning Reservations</title>\r
- <indexterm><primary>booking reservation</primary><secondary>returning</secondary></indexterm>\r
- <para>Staff members can help users return their reservations.</para>\r
- <procedure> \r
- <step><para>In the staff client, select <menuchoice><guimenu>Booking</guimenu><guimenuitem>Return Reservations</guimenuitem></menuchoice>.</para></step>\r
- <step><para>You can return the item by patron or item barcode. Choose <guimenuitem>Resource</guimenuitem> or <guimenuitem>Patron</guimenuitem>, enter the \r
- barcode, and click <guibutton>Go</guibutton>.</para></step>\r
- <step><para>A pop up box will tell you that the item was returned. Click <guibutton>OK</guibutton>.</para></step>\r
- <step><para>The screen will refresh to show the reservations that remain out and the resources that have been returned.</para></step>\r
- </procedure>\r
- </section>\r
-</chapter>\r
- \r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<chapter xmlns="http://docbook.org/ns/docbook"
-xmlns:xi="http://www.w3.org/2001/XInclude"
-xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
-xml:id="cataloging">
- <info>
- <title>Cataloging</title>
-
- <abstract>
- <para>This chapter explains the cataloging procedures
- carried out from the staff client.</para>
- </abstract>
- </info>
-
- <section xml:id="MARC_editor">
- <title>Working with the MARC Editor</title>
-
- <indexterm>
- <primary>cataloguing</primary>
-
- <secondary>MARC</secondary>
- </indexterm>
-
- <para>The MARC Editor allows MARC tags, sub-fields, and
- indicators to be edited.</para>
-
- <para>OPAC icons for text, moving pictures and sound rely on
- correct MARC coding in the leader and the 008, as do OPAC
- search filters such as publication date, item type, or target
- audience. Bibliographic matching and de-duplicating also need
- correct and consistent MARC coding in particular tags.</para>
-
- <simplesect xml:id="editingMARCrecords">
- <title>Editing MARC Records</title>
-
- <indexterm>
- <primary>cataloguing</primary>
-
- <secondary>editing MARC records</secondary>
- </indexterm>
-
- <procedure>
- <step>
- <para>Retrieve the record.</para>
- </step>
-
- <step>
- <para>
- <menuchoice>
- <guimenu>Actions for this Record</guimenu>
-
- <guimenuitem>MARC Edit</guimenuitem>
- </menuchoice>
-
- .</para>
- </step>
-
- <step>
- <para>The MARC record will display.</para>
- </step>
-
- <step>
- <para>Select viewing and editing options, if
- desired.</para>
-
- <itemizedlist>
- <listitem>
- <para>
- <guilabel>Stack subfields</guilabel>
-
- to display each subfield on its own line.</para>
- </listitem>
-
- <listitem>
- <para>
- <guilabel>Flat-Text Editor</guilabel>
-
- switches to a plain-text (menmonic) MARC format.
- The advantage of this format is being able to copy
- and paste multiple lines. It also allows the use of
- tools like MarcEdit (
- <link
- xlink:href="http://people.oregonstate.edu/~reeset/marcedit/html/index.php">
- http://people.oregonstate.edu/~reeset/marcedit/html/index.php</link>
-
- ). Unclick the box to switch back.</para>
- </listitem>
-
- <listitem>
- <para>
- <guilabel>Fast Item Add</guilabel>
-
- allows attaching items quickly with call number and
- barcode. When
- <guibutton>Save</guibutton>
-
- is clicked, the **INSERT CROSS-REFERENCE** Copy
- Editor will open.</para>
- </listitem>
- </itemizedlist>
- </step>
-
- <step>
- <para>Make changes as desired.</para>
-
- <itemizedlist>
- <listitem>
- <para>Right click into a tag field to add/remove
- rows or replace tags.</para>
- </listitem>
-
- <listitem>
- <para>With the cursor at the end of a subfield,
- click
- <keycap>Control + D</keycap>
-
- (
- <keycap>Control + I</keycap>
-
- in Mac OSX) to insert a new subfield.</para>
- </listitem>
-
- <listitem>
- <para>To remove a subfield, click
- <keycap>Shift + Delete</keycap>
- </para>
- </listitem>
-
- <listitem>
- <para>To work with the data in a tag or indicator,
- click or
- <keycap>Tab</keycap>
-
- into the required field.
- <emphasis>Right click</emphasis>
-
- to view acceptable tags or indicators.</para>
- </listitem>
-
- <listitem>
- <indexterm>
- <primary>MARC</primary>
-
- <secondary>MARC leader</secondary>
- </indexterm>
-
- <indexterm>
- <primary>MARC</primary>
-
- <secondary>fixed field 008</secondary>
- </indexterm>
-
- <para>Parts of the leader and the 008 field can be
- edited with the fixed field box displayed above the
- MARC record. Click into any box to edit the
- contents. (Information about the leader and the 008
- can be found on the Library of Congress's MARC
- Standards page at
- <link
- xlink:href="http://www.loc.gov/marc/bibliographic/ecbdlist.html">
- http://www.loc.gov/marc/bibliographic/ecbdlist.html</link>
-
- .)</para>
- </listitem>
- </itemizedlist>
-
- <tip>
- <para>The MARC Editor may be navigated using keyboard
- shortcuts. Click
- <guibutton>Help</guibutton>
-
- to see the shortcut menu from within the MARC
- Editor.</para>
- </tip>
- </step>
-
- <step>
- <para>When finished, click
- <guibutton>Save Record</guibutton>
-
- . The record stays open in the editor. You can close
- the tab or switch to another view under
- <guimenu>Actions for this Record</guimenu>
-
- (for example to view it as it appears in the
- OPAC).</para>
- </step>
- </procedure>
- </simplesect>
-
- <simplesect xml:id="overlayingMARCrecords">
- <title>Overlaying MARC Records</title>
-
- <indexterm>
- <primary>cataloguing</primary>
-
- <secondary>overlaying MARC records</secondary>
- </indexterm>
-
- <para>Overlaying a MARC record replaces an existing MARC
- record while leaving all holdings, holds, active
- circulations, bills, and fines intact.</para>
-
- <para>In Evergreen, a record must be
- <emphasis>marked</emphasis>
-
- for overlay. The mark for overlay is by login. Only one
- record at a time may be marked for overlay. When another
- record is marked for overlay, the previously marked item is
-
- <emphasis>de-marked</emphasis>
-
- . Once a record is marked, it remains marked until overlaid
- or until the user logs out of Evergreen.</para>
-
- <procedure>
- <title>Marking a record for overlay</title>
-
- <step>
- <para>Search for and retrieve a record for
- overlay.</para>
- </step>
-
- <step>
- <para>Select
- <menuchoice>
- <guimenu>Actions for this Record</guimenu>
-
- <guimenuitem>Mark for Overlay</guimenuitem>
- </menuchoice>
-
- . Record is now
- <emphasis>marked</emphasis>
-
- .</para>
- </step>
- </procedure>
-
- <procedure>
- <title>Overlaying the marked record</title>
-
- <step>
- <para>Once the record is marked for overlay, proceed to
-
- <link linkend="z39.50">search for and import the new
- record from a Z39.50 target</link>
-
- .</para>
- </step>
-
- <step>
- <para>Click
- <guibutton>MARC Editor for Overlay</guibutton>
-
- . The TCN of the Evergreen record marked for overlay is
- displayed.</para>
- </step>
-
- <step>
- <para>The record displays in MARC Edit view. Edit the
- record as necessary.</para>
- </step>
-
- <step>
- <para>Click
- <guibutton>Overlay Record</guibutton>
-
- .</para>
- </step>
-
- <step>
- <para>The existing record will display along with a
- prompt to confirm the overlay. Panes may be moved to
- view the record in entirety, if required.</para>
- </step>
-
- <step>
- <para>Click
- <guibutton>Overlay</guibutton>
-
- .</para>
- </step>
-
- <step>
- <para>Confirm the overlay. The record in Evergreen is
- overlaid with the new MARC record. All pre-existing
- holdings remain intact.</para>
- </step>
- </procedure>
- </simplesect>
-
- <simplesect xml:id="validatingMARCrecords">
- <title>Validating MARC Records</title>
-
- <indexterm>
- <primary>cataloguing</primary>
-
- <secondary>validating records</secondary>
- </indexterm>
-
- <para>Validation checks headings that are subject to
- authority control (subjects, names, uniform titles) by
- comparing them to the authority records that are available
- in the system.</para>
-
- <procedure>
- <step>Click
- <guibutton>Validate</guibutton>
-
- .</step>
-
- <step>Scroll through the record looking for fields that
- have turned red.</step>
-
- <step>Right-click on a field that is red. The closest
- valid headings will display.</step>
-
- <step>To apply a heading, mouse over it and click
- <guilabel>Apply Selected</guilabel>
-
- .</step>
-
- <step>Fields that do not validate are not necessarily
- invalid--there may not be an authority record for that
- name/subject/title. If you have the appropriate
- permissions, you can add an authority record based on the
- existing record.</step>
- </procedure>
- </simplesect>
- </section>
-
- <section xml:id="AuthorityRecords">
- <title>Authority Records</title>
-
- <indexterm>
- <primary>cataloguing</primary>
-
- <secondary>authority records</secondary>
- </indexterm>
-
- <para>Authority records establish uniform usage for names,
- topics/subjects, and uniform titles; they also guide users
- from deprecated or alternative terms to desired terms.
- Authority records are in MARC format. See
- <link
- xlink:href="http://www.loc.gov/marc/authority/ecadhome.html">
- http://www.loc.gov/marc/authority/ecadhome.html</link>
-
- for more on the standard.</para>
-
-<para>All bibliographic record fields that are controlled by authority records
-will have a ‡0 subfield
- containing the local ID for the controlling authority record.</para>
-
- <para>When an authority record is edited or merged with
- another authority record, the changes are
- automatically propagated to all the bibliographic records with fields
- connected to the ID of the edited authority record.</para>
-
-
-
- <note>There are some limitations to the authorities in the
- current version.</note>
-
- <note>See
- <link
- xlink:href="http://open-ils.org/dokuwiki/doku.php?id=authorities:2.0">
- http://open-ils.org/dokuwiki/doku.php?id=authorities:2.0</link>
-
- for more documentation on authorities in Evergreen
- 2.0.</note>
-
- <simplesect xml:id="viewingsearchingauthorityrecords">
- <title>Viewing/Searching Authority Records</title>
-
- <procedure>
- <step>Select
- <menuchoice>
- <guimenu>Cataloging</guimenu>
-
- <guimenuitem>Manage Authorities</guimenuitem>
- </menuchoice>
-
- .</step>
-
- <step>Enter a search term and choose an authority type
- from the drop-down menu, then click
- <guibutton>Submit</guibutton>
-
- .</step>
-
- <step>A list of records will display.</step>
- </procedure>
- </simplesect>
-
- <simplesect xml:id="editingauthorityrecords">
- <title>Editing Authority Records</title>
- </simplesect>
-
- <simplesect xml:id="addingnewauthorityrecords">
- <title>Adding New Authority Records</title>
- </simplesect>
-
- <simplesect xml:id="mergingordeletingauthorityrecords">
- <title>Merging or Deleting Authority Records</title>
- </simplesect>
- </section>
-
- <section xml:id="z39.50">
- <title>Adding New Records via Built In Z39.50 Client</title>
-
- <indexterm>
- <primary>cataloguing</primary>
-
- <secondary>Z39.50</secondary>
- </indexterm>
-
- <para>The Z39.50 client is used to search bibliographic
- databases and examine or download bibliographic records. Open
- the client with
- <menuchoice>
- <guimenu>Cataloging</guimenu>
-
- <guimenuitem>Import Record from Z39.50</guimenuitem>
- </menuchoice>
- </para>
-
- <simplesect xml:id="z39.50screenfeatures">
- <title>Z39.50 Screen Features</title>
-
- <para>Initially, or when you want to change targets, start
- with the
- <guilabel role="bold">Service and Credentials</guilabel>
-
- area. Here you choose the remote databases you wish to
- search. Preconfigured servers are listed under Services. If
- any require authentication to access, you will see username
- and password boxes to the right.</para>
-
- <procedure>
- <step>Click all the databases you wish to search
- simultaneously (see the Note about which fields can be
- used).</step>
-
- <step>Fill in user information for any that require
- it.</step>
-
- <step>Click
- <guibutton>Save as Default</guibutton>
-
- to preserve these settings for next time.</step>
- </procedure>
-
- <para>The
- <guilabel role="bold">Query</guilabel>
-
- section is where you enter a search. The databases you
- select control which search fields you can use. You may use
- any combination of fields that are active (not grayed out),
- but be aware that not all fields are active for every
- database. Select just one database to see which fields are
- active for that database.</para>
-
- <note>
- <para>If you are searching multiple databases, you will
- only get results from those that support the fields
- you're searching! For example,
- <guilabel>Keyword</guilabel>
-
- and
- <guilabel>Subject</guilabel>
-
- are only active if the local catalog is selected, so
- using those fields in a combined database search
- guarantees that you will only get results from the local
- catalog.</para>
- </note>
-
- <para>The
- <guilabel>Query</guilabel>
-
- section has three buttons.</para>
-
- <itemizedlist>
- <listitem>
- <guibutton>Search</guibutton>
-
- begins searching on the criteria entered in the search
- fields.</listitem>
-
- <listitem>
- <guibutton>Clear Form</guibutton>
-
- resets all fields to empty.</listitem>
-
- <listitem>
- <guibutton>Raw Search</guibutton>
-
- is an advanced interface for using Prefix Query Format to
- build complex searches. See
- <xref linkend="rawsearches" />
-
- .</listitem>
- </itemizedlist>
-
- <para>The
- <guilabel role="bold">Results</guilabel>
-
- pane displays the results from the most recent search.
- Information about each record retrieved appears on a
- separate summary line, with various columns of
- information.</para>
-
- <itemizedlist>
- <listitem>If more than the default number of results is
- available, use
- <guibutton>Fetch More Results</guibutton>
-
- to add the next set to the screen.</listitem>
-
- <listitem>Click
- <guibutton>List Action</guibutton>
-
- to view options for exporting and saving from the list:
- <itemizedlist>
- <listitem>Copy Field from selected row to
- Clipboard</listitem>
-
- <listitem>Print List CSV</listitem>
-
- <listitem>Copy List CSV to Clipboard</listitem>
-
- <listitem>Save List CSV to File</listitem>
-
- <listitem>Save List Configuration</listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>Select an item and click
- <guibutton>MARC View</guibutton>
-
- to toggle viewing the MARC record. When in MARC View, you
- can
- <guibutton>Print Page</guibutton>
-
- . To toggle back, click
- <guibutton>Results View</guibutton>
-
- .</listitem>
-
- <listitem>If you have previously
- <link linkend="overlayingMARCrecords">marked a record for
- overlay</link>
-
- ,
- <guibutton>MARC Editor for Overlay</guibutton>
-
- will be active. Click to view/edit the new bib record to
- be laid over the local one you selected. See
- <xref linkend="overlayingMARCrecords" />
-
- for details.</listitem>
-
- <listitem>
- <guibutton>MARC Editor for Import</guibutton>
-
- is used to view/edit a new record.</listitem>
-
- <listitem>To view long lists of results, click
- <guibutton>Hide Top Pane</guibutton>
-
- to give the results list more screen real
- estate.</listitem>
- </itemizedlist>
- </simplesect>
-
- <simplesect xml:id="importingarecordviaz39.50">
- <title>Importing a record via Z39.50</title>
-
- <para>Find the desired record, click
- <guibutton>MARC Editor for Import</guibutton>
-
- , and make any desired changes. Click
- <guibutton>Import Record</guibutton>
-
- when done. A success (or failure) message will display. If
- you used
- <guilabel>Fast Item Adds</guilabel>
-
- , the
- <guilabel>Copy Editor</guilabel>
-
- will appear.</para>
- </simplesect>
-
- <simplesect xml:id="fastitemadds">
- <title>Fast Item Adds</title>
-
- <para>Clicking the
- <guibutton>Fast Item Add</guibutton>
-
- box will display
- <guilabel>Call Number</guilabel>
-
- and
- <guilabel>Item Barcode</guilabel>
-
- fields. Use these to quickly add items to the record as you
- edit it.</para>
-
- <para>When you've successfully imported the record, the
- copy editor will display. Make necessary adjustments and
- click
- <guibutton>Modify/Create Copies</guibutton>
-
- .</para>
-
- <note>
- <para>As of 2.0.6, the status of items created with Fast
- Item Add will be set to
- <emphasis>In Process</emphasis>
-
- , consistent with other types of item creation. This is a
- change from 2.0.5 and earlier, when items created with
- Fast Add were Available.</para>
- </note>
- </simplesect>
-
- <simplesect xml:id="recordcollisions">
- <title>Record Collisions</title>
-
- <note>As of 2.0.5, if the global flag "Cat: Use internal ID
- for TCN value" has been set by the administrator (under
- <menuchoice>
- <guimenu>Admin
- <guimenuitem>Server Settings</guimenuitem>
-
- <guimenuitem>Global Flags</guimenuitem>
- </guimenu>
- </menuchoice>
-
- ), the collision detection in the Z39.50 import interface
- will be disabled because it relies on the TCN. Until a more
- flexible collision detection process is in place, avoiding
- duplicate bib record imports from Z39.50 will be up to the
- user.</note>
-
- </simplesect>
-
- <simplesect xml:id="rawsearches">
- <title>Raw Searches</title>
-
- <para>You can do advanced searching of remote databases in
- Prefix Query Format by clicking
- <guibutton>Raw Search</guibutton>
-
- and entering a search string. Visit
- <link
- xlink:href="http://www.indexdata.com/yaz/doc/tools.html">
- http://www.indexdata.com/yaz/doc/tools.html</link>
-
- for more details on PQF and examples you can copy/paste
- into the search box.</para>
- </simplesect>
- </section>
-</chapter>
-
-
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"\r
- xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:id="acquisitions-kcls">\r
- <title>Acquisitions Module Processes - KCLS</title>\r
- <section id="_ordering">\r
- <title>Ordering</title>\r
- <simplesect>\r
- <title>Find or Create the Record</title>\r
- <simpara>For adds:</simpara>\r
- <procedure>\r
- <step><simpara>Search for title in the catalog.</simpara></step>\r
- <step><simpara>Click on the title link.</simpara></step>\r
- <step><simpara>Right-click on the Bib Call # at the top of screen and copy the call number.</simpara></step>\r
- <step><simpara>Go to Marc Edit on Actions for this Record menu. (You can set Marc Edit to be your default if you choose).</simpara></step>\r
- <step><simpara>Confirm correct ISBN/UPC is in top position. If not, move it to top. This can be done in the Flat Text Editor. Then copy/paste the fields where \r
- you need them to go.</simpara></step>\r
- </procedure>\r
- <simpara>For new orders:</simpara>\r
- <procedure>\r
- <step><simpara>For print orders, search for title in OCLC. If the record is in OCLC:</simpara></step>\r
- <step><simpara>Update holdings in OCLC.</simpara></step>\r
- <step><simpara>Confirm correct ISBN/UPC is in top position. If not, move it to top.</simpara></step>\r
- <step><simpara>Export it into Evergreen using the ACQMASTERMACRO OCLC macro (do not overlay).</simpara></step>\r
- <step><simpara>Search for title in the catalog. Click on the title link.</simpara></step>\r
- <step><simpara>For non-print orders OR if the record is not in OCLC, create a brief record:</simpara>\r
- <procedure numeration="loweralpha">\r
- <step><simpara>Select Create New Marc Record on the Cataloging menu.</simpara></step>\r
- <step><simpara>Click the Load button. This will bring up a blank Marc record.</simpara></step>\r
- <step><simpara>Enter your short record information. Use tab or mouse to move from one field to the next. Click on the Help button to see shortcut keys.</simpara></step>\r
- <step><simpara>Enter the date in TWO places. Enter the date in the 260ǂc AND enter in the Date1 box at top of record.</simpara></step>\r
- <step><simpara>Add a row at the end of the record (put cursor in last row and type Ctrl+Enter). Type in 998 and 2 spaces. Type a “d” (the “d” should be blue). \r
- Then type the letter code \r
- that corresponds to the material type in lowercase (for example, book=a).</simpara></step>\r
- <step><simpara>Click the Create Record button. Reload if needed.</simpara></step>\r
- </procedure>\r
- </step>\r
- </procedure>\r
- <note><simpara>if you need to go back and edit the short record after clicking Create Record, remember that the 901 field must be the last field in the record. \r
- All fields following the 901 will be deleted when you save the record.</simpara></note>\r
- </simplesect>\r
- <simplesect>\r
- <title>Create the Order</title>\r
- <procedure>\r
- <step><simpara>From the catalog record, click View/Place Orders on the Actions for this Record menu.</simpara></step>\r
- <step><simpara>Click on the Create Purchase Order button.</simpara></step>\r
- <step><simpara>Enter the following as shown below:</simpara>\r
- <procedure numeration="loweralpha">\r
- <step><simpara>Ordering Agency = PR</simpara></step>\r
- <step><simpara>Enter Provider code (type slowly)</simpara></step>\r
- <step><simpara>Uncheck “Prepayment Required” check box (unless valid).</simpara></step>\r
- <step><simpara>Confirm “All Line Items” button is selected.</simpara></step>\r
- </procedure>\r
- </step>\r
- <step><simpara>Click Submit.</simpara></step>\r
- <step><simpara>If you get a dialog box about prepayment being required even though you unchecked the box, click on OK to proceed anyway.</simpara></step>\r
- <step><simpara>If you get this error, click OK and Reload.</simpara></step>\r
- <step><simpara>Click on Copies.</simpara></step>\r
- <step><simpara>On the Copies screen:</simpara>\r
- <procedure numeration="loweralpha">\r
- <step><simpara>Enter item count and click Go.</simpara></step>\r
- <step><simpara>Enter shelving location in 2nd drop down in Batch Update row.</simpara></step>\r
- <step><simpara>Enter fund in 4th drop down in Batch Update row.</simpara></step>\r
- <step><simpara>Enter Circ Modifier in 5th drop down in Batch Update row.</simpara></step>\r
- <step><simpara>For NEW orders, enter ON ORDER call number (format specific) in last box in Batch Update row.</simpara></step>\r
- <step><simpara>For ADDS, paste in the call number from the bib record.</simpara></step>\r
- <step><simpara>Click Batch Update.</simpara></step>\r
- <step><simpara>Enter Distribution Formula and click Apply.</simpara></step>\r
- <step><simpara>Click Save Changes.</simpara></step>\r
- <step><simpara>Click Return.</simpara></step>\r
- </procedure>\r
- </step>\r
- <step><simpara>Click Notes. Add a note for format (for example, paperback, library binding, etc.). Check the box in the note to make it vendor public. It will print on \r
- PO or be transmitted \r
- to vendor electronically. Enter another note for cataloging instructions (for example, CAT A) but do not check the vendor public box. Enter other notes as needed.\r
- </simpara></step>\r
- <step><simpara>Click Return.</simpara></step>\r
- <step><simpara>Enter the item price in the Estimated Price box.</simpara></step>\r
- <step><simpara>Click Reload.</simpara></step>\r
- <step><simpara>Click on Activate Order link.</simpara></step>\r
- <step><simpara>Select Print Purchase Order (if not an EDI account) from the P.O. Actions drop down menu.</simpara></step>\r
- <step><simpara>If order has copies for suppressed libraries or Reference items, click the Catalog link next to the line item number (or go back to Bib Record tab). \r
- Select Holdings Maintenance from the Actions for this Record menu. Edit the items/apply templates.</simpara>\r
- <itemizedlist>\r
- <listitem><simpara>Example: Suppressed library</simpara></listitem>\r
- <listitem><simpara>Example: Adult Reference</simpara></listitem>\r
- </itemizedlist>\r
- </step>\r
- <step><simpara>If order has a hold(s), click the Catalog link next to the line item number (or go back to Bib Record tab) and place hold(s).</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- </section>\r
- \r
- <section id="kcls_receiving_print_materials">\r
- <title>Receiving Print Materials</title>\r
- <procedure>\r
- <step>\r
- <simpara>\r
- From the Cataloging menu Select Search the Catalog.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Select your title. (If you cannot find the record linked to the order, use the Acquisitions General Search to search by line number – see #1 under Alternative Workflow section.)\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Click on Actions for this Record Select View/Place Orders.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Verify the Line number and Purchase Order number matches numbers on packing slip/invoice. Click on Purchase Order Number link.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Purchase Order will display. (Purchase Order Status & Line Item Status = on-order)\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Check item(s) received against the Line Item details and verify the following: Title/Author, ISBN, Publisher, Pub. Date, Edition, Format (Format is in Notes), Est. Price, Status, \r
- Provider, and Copies. If everything checks out with the order, you are ready to receive. If partial receipt, see Partial Receipts section.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Click on Line Item Actions drop down menu Select Mark Received. Purchase Order & Line Item status will change to “received.”\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Click on worksheet link. Print worksheet. Click Go Back.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Switch tabs back to Bib Record tab. Catalog record and if it is a new title, update call number when possible.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Switch tabs back to Related Lineitems tab. Click on the Line Item Actions drop down menu Select Update Barcodes.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Or go to Holdings Maintenance to replace barcodes.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Apply call number to all copies and replace barcodes.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Click Edit then Re-barcode – the Copy Editor box will appear. Apply templates as needed, confirm suppressed libraries and Reference items are correctly flagged, and click Modify Copies.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- For new orders, go to Holdings Maintenance and delete ON ORDER call numbers. (You can go to Holdings Maintenance by switching tabs back to Bib Record tab or by selecting \r
- Holdings Maintenance on the Line Item Actions drop down menu.)\r
- </simpara>\r
- </step>\r
- </procedure>\r
- <simplesect>\r
- <title>Receiving Print Materials - Alternative Workflow</title>\r
- <simpara>You can also receive in Acquisitions on one tab and then search the catalog by title on another tab.</simpara>\r
- <procedure>\r
- <step><simpara>From the Acquisitions menu Select General Search</simpara>\r
- <itemizedlist>\r
- <listitem><simpara>To search by ISBN:Search for “line items” matching “all” of the following terms: “LIA – ISBN” is \r
- “[enter/scan ISBN].”</simpara></listitem>\r
- <listitem><simpara>To search by line number: Search for “line items” matching “all” of the following terms: “LI – Lineitem ID” is “[enter your line number from packing \r
- slip/invoice].”</simpara></listitem>\r
- </itemizedlist>\r
- </step>\r
- <step><simpara>Click Search.</simpara></step>\r
- <step><simpara>Click Purchase Order number link.</simpara></step>\r
- <step><simpara>Purchase Order will display. (Purchase Order Status & Line Item Status = on-order)</simpara></step>\r
- <step><simpara>Check item(s) received against the Line Item details and verify the following: Title/Author, ISBN, Publisher, Pub. Date, Edition, Format \r
- (Format is in Notes), Est. Price, Status, \r
- Provider, and Copies. If everything checks out with the order, you are ready to receive. If partial receipt, see \r
- Partial Receipts section.</simpara></step>\r
- <step><simpara>Click on Line Item Actions drop down menu Select Mark Received. Purchase Order & Line Item status will change to “received.”</simpara></step>\r
- <step><simpara>Click on worksheet link. Print worksheet. Click Go Back.</simpara></step>\r
- <step><simpara>Open a new tab and search the catalog by title. Select title.</simpara></step>\r
- <step><simpara>Catalog record and if it is a new title, update call number when possible.</simpara></step>\r
- <step><simpara>Switch tabs back to Related Lineitems tab. Click on the Line Item Actions drop down menu Select Update Barcodes.</simpara></step>\r
- <step><simpara>Or go to Holdings Maintenance to replace barcodes.</simpara></step>\r
- <step><simpara>Apply call number to all copies and replace barcodes.</simpara></step>\r
- <step><simpara>Click Edit then Re-barcode – the Copy Editor box will appear. Apply templates as needed, confirm suppressed libraries and Reference items are correctly \r
- flagged, and click Modify Copies.</simpara></step>\r
- <step><simpara>For new orders, go to Holdings Maintenance and delete ON ORDER call numbers. (You can go to Holdings Maintenance by switching tabs back to Bib Record tab or \r
- by selecting Holdings Maintenance on the Line Item Actions drop down menu.)</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Receiving Print Materials - Partial Receipts</title>\r
- <simpara>First Shipment:</simpara>\r
- <procedure>\r
- <step><simpara>From the Purchase Order screen, click Notes link. Check for any earlier partial receipts.</simpara></step>\r
- <step><simpara>If first shipment, then click Copies link.</simpara></step>\r
- <step><simpara>Click “Mark Received” for number of copies in hand (start with top copy). Click Return.</simpara></step>\r
- <step><simpara>If you have most of the copies in hand, you can also select Mark Received (on Actions drop down menu) for entire order and then “un-receive” the \r
- missing copy/copies (starting with top copy). Click Return.</simpara></step>\r
- <step><simpara>Add a note stating how many copies were received (example: receiving 4 copies on 1/1/11 JL).</simpara></step>\r
- <step><simpara>Catalog as usual.</simpara></step>\r
- <step><simpara>To replace barcodes and apply down call number, you must use Holdings Maintenance. Currently it is not possible to replace barcodes using Update Barcodes \r
- in Line Item Actions drop down menu.</simpara></step>\r
- <step><simpara>Remember to flag title on invoice and change no. of copies on worksheet.</simpara></step>\r
- </procedure>\r
- <simpara>Next Shipment:</simpara>\r
- <procedure>\r
- <step><simpara>Check Notes to see how many items were previously received.</simpara></step>\r
- <step><simpara>If shipment completes the order, click on the Actions drop down menu and select Mark Received.</simpara></step>\r
- <step><simpara>If shipment does not complete order, click Copies and mark individual copies as received (as shown above).</simpara></step>\r
- <step><simpara>Add a note stating how many copies were received (example: receiving 2 copies on 1/20/11 JL).</simpara></step>\r
- <step><simpara>If the shipment completes the order, click on the Line Item Actions drop down menu Select Update Barcodes. Apply down call number and replace barcodes. \r
- Or replace barcodes in Holdings Maintenance.</simpara></step>\r
- <step><simpara>Remember to flag title on invoice and change no. of copies on worksheet. Also highlight locations to receive second shipment on worksheet or cross off \r
- locations already received.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Unreceiving Print Materials</title>\r
- <procedure>\r
- <step> <simpara> To un-receive an order, go to the Purchase Order screen.\r
- </simpara>\r
- </step>\r
- <step> <simpara> To un-receive the complete order, click on Actions drop down menu Select Un-Receive.\r
- </simpara>\r
- </step>\r
- <step> <simpara> To un-receive a partial order, click on Copies link and click Un-Receive for individual copies.\r
- </simpara>\r
- </step>\r
- <step> <simpara> If the barcodes have already been replaced, go to Holdings Maintenance and replace real barcode numbers with temporary barcode numbers. To create a temporary barcode use your initials and a number (example: cme1). Start with 1 and then auto-generate as needed. Keep track of last number used to start with the next time so you don’t create duplicate barcodes.\r
- </simpara>\r
- </step>\r
- </procedure>\r
- </simplesect>\r
- </section>\r
- <section id="_receiving_print_materials">\r
- <title>Receiving Non-print Materials</title>\r
- <procedure>\r
- <step>\r
- <simpara>\r
- From the Cataloging menu Search the Catalog.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Select your title.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Click on Actions for this Record Select View/Place Orders.\r
- </simpara>\r
- <note><simpara>Verify that the line number and purchase order number matches numbers on packing slip/invoice. If purchase order number is not printed on packing slip/invoice, write \r
- the purchase order number on packing slip/invoice.</simpara></note>\r
- </step>\r
- <step>\r
- <simpara>\r
- Click on purchase order number link.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Purchase Order will display. (Purchase Order status & Line Item status = on-order)\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Check item(s) received against the Line Item details and verify the following: Title/Author, ISBN, Publisher, Pub. Date, Edition, Format (Format is in Notes), Est. Price, Status, \r
- Provider, and Copies. If everything checks out with the order, you are ready to receive. If partial receipt, see Partial Receipts section.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Click on Line Item Actions drop down menu Select Mark Received. Purchase Order & Line Item status will change to “received.”\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Click on worksheet link. Print worksheet. Click Go Back.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- If new title, overlay short record with OCLC record if available.\r
- </simpara>\r
- <procedure numeration="loweralpha">\r
- <step>\r
- <simpara>\r
- Switch tabs back to Bib Record tab. Copy TCN.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Search OCLC for record. If found, export using overlay macro.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Reload record to confirm overlay.\r
- </simpara>\r
- </step>\r
- </procedure>\r
- </step>\r
- </procedure>\r
- <simplesect>\r
- <title>Receiving Non-print Materials - Alternative Workflow</title>\r
- <procedure>\r
- <step><simpara>From the Acquisitions menu Select General Search.</simpara>\r
- <itemizedlist>\r
- <listitem><simpara>To search by UPC or ISBN: Search for “line items” matching “all” of the following terms: “LIA – UPC” is “[enter/scan UPC] \r
- or “LIA - ISBN” is \r
- “[enter/scan ISBN].”</simpara></listitem>\r
- <listitem><simpara>To search by line number: Search for “line items” matching “all” of the following terms: “LI – Lineitem ID” is \r
- “[enter your line number from packing \r
- slip/invoice].”</simpara></listitem>\r
- </itemizedlist>\r
- </step>\r
- <step><simpara>Click Search.</simpara></step>\r
- <step><simpara>Click Purchase Order number link.</simpara></step>\r
- <step><simpara>Purchase Order will display. (Purchase Order status & Line Item status = on-order)</simpara></step>\r
- <step><simpara>Check item(s) received against the Line Item details and verify the following: Title/Author, ISBN, Publisher, Pub. Date, Edition, Format \r
- (Format is in Notes), Est. Price, \r
- Status, Provider, and Copies. If everything checks out with the order, you are ready to receive. If partial receipt, see Partial Receipts section.</simpara></step>\r
- <step><simpara>Click on Line Item Actions drop down menu Select Mark Received. Purchase Order & Line Item status will change to “received.”</simpara></step>\r
- <step><simpara>Click on worksheet link. Print worksheet. Click Go Back.</simpara></step>\r
- <step><simpara>If new title, overlay short record with OCLC record if available.</simpara>\r
- <procedure numeration="loweralpha">\r
- <step><simpara>Switch to second tab and search for title in catalog. Copy TCN.</simpara></step>\r
- <step><simpara>Search OCLC for record. If found, export using overlay macro.</simpara></step>\r
- <step><simpara>Reload record to confirm overlay.</simpara></step>\r
- </procedure>\r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Receiving Non-print Materials - Partial Receipts</title>\r
- <simpara>First Shipment:</simpara>\r
- <procedure>\r
- <step><simpara>From the Purchase Order screen, check Notes for any earlier partial receipts.</simpara></step>\r
- <step><simpara>If first shipment, then click Copies link.</simpara></step>\r
- <step><simpara>Click “Mark Received” for number of copies in hand (start with top copy). Click Return.</simpara></step>\r
- <step><simpara>Or if you have the majority of the copies in hand, you can select Mark Received (on Actions drop down menu) for entire order and then “un-receive” \r
- the missing copy/copies (starting \r
- with top copy). Click Return.</simpara></step>\r
- <step><simpara>Add a note stating how many copies were received (example: receiving 4 copies on 1/1/11 JL).</simpara></step>\r
- <step><simpara>Remember to flag title on invoice and change no. of copies on worksheet.</simpara></step>\r
- </procedure>\r
- <simpara>Next Shipment:</simpara>\r
- <procedure>\r
- <step><simpara>Check Notes to see how many items were previously received.</simpara></step>\r
- <step><simpara>If shipment completes the order, click on the Actions drop down menu and select Mark Received.</simpara></step>\r
- <step><simpara>If shipment does not complete order, click Copies and mark individual copies as received (as shown above).</simpara></step>\r
- <step><simpara>Add a note stating how many copies were received (example: receiving 2 copies on 1/20/11 JL).</simpara></step>\r
- <step><simpara>Remember to flag title on invoice and change no. of copies on worksheet. Also highlight locations to receive second shipment on worksheet or cross off \r
- locations already received.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect id="_unreciving_non_print_materials">\r
- <title>Unreceiving Non-print Materials</title>\r
- <procedure>\r
- <step><simpara>To un-receive an order, go to the Purchase Order screen.</simpara></step>\r
- <step><simpara>To un-receive the complete order, click on Actions drop down menu Select Un-Receive.</simpara></step>\r
- <step><simpara>To un-receive a partial order, click on Copies link and click Un-Receive for individual copies.</simpara></step>\r
- </procedure>\r
- </simplesect>\r
- </section>\r
-</chapter>\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"\r
- xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:id="serials_GPLS">\r
- <title>The Serials Module</title>\r
-<simpara>This documentation is intended for users who will be ordering subscriptions, distributing issues, and receiving issues in Evergreen . 0. Specifically, this tutorial documents the functionality in the serials module and illustrates a basic serials workflow in which the user will register a subscription to a serial publication; distribute issues of that publication to branches; define the captions to be affixed to each issue; specify details of the publication pattern; predict future issues, and receive copies of an issue. Claiming serials is not available in . 0. This document also includes a list of administrative permissions that users must have to use the serials module.</simpara>\r
-\r
-<section id="_serial_control_view_alternate_serial_control_view_and_mfhd_records_a_summary">\r
- <title>Serial Control View, Alternate Serial Control View, and MFHD Records: A Summary</title>\r
- <simpara>Serial Control View and Alternate Serial Control View offer you two views of Serials. Both views enable you to create subscriptions, \r
- add distributions, define captions, predict future issues, and receive items. Serial Control View was designed for users who work with a \r
- smaller number of issues and was designed to accommodate workflows in academic and special libraries. Alternate Serial Control View was \r
- designed for users who receive a larger number of issues and was designed for use in public libraries.</simpara>\r
- <simpara>The views are interoperable, but because the views were designed for different purposes, some differences emerge. For example, \r
- Serial Control View enables you to create and edit serials in a single tabbed interface while Alternate Serial Control View leads you through \r
- a series of steps on multiple screens. In addition, receiving functions vary between views. Both receiving interfaces enable you to \r
- batch receive issues. However, the Serials Batch Receive interface, which is associated with Alternate Serial Control View, allows for \r
- more customization of each receiving unit while the Items tab in Serial Control View allows for greater flexibility in creating multi-issue \r
- units, such as in binding serials.</simpara>\r
- <simpara>MFHD records that you created in . 6 will also exist in . 0. Pre-existing MFHD records will display above the holdings summary \r
- for serials created in Alternate Serial Control View. See simplesect . . 2 for an example of this display. If you create a serial in \r
- Serial Control View, the generated holdings and the previous MFHD record will display in a single holdings summary, separated by a comma. \r
- You can also create new MFHD records manually.</simpara>\r
-</section>\r
-\r
-<section id="_copy_templates_for_serials">\r
- <title>Copy Templates for Serials</title>\r
- <simpara>A copy template enables you to specify item attributes that should be applied by default to copies of serials. You can create one \r
- copy template and apply it to multiple serials. You can also create multiple copy templates. Templates will be used in the Alternate \r
- Serial Control View or the Serial Control View.</simpara>\r
- <simplesect>\r
- <title>Create a copy template</title>\r
- <procedure>\r
- <step>\r
- <simpara>\r
- To create a copy template, click Admin → Local Administration → Copy Template Editor.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Enter a Name for the template.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Select an owning library from the Owning lib drop down menu. This organization owns the copy template. A staff member \r
- with permissions at that organization can modify the copy template. The menu is populated from the organizations that you created in \r
- Admin → Server Administration → Organizational Units.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Click the box adjacent to Circulate? If you want the item to circulate.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Check the box adjacent to Holdable? if patrons can place holds on the item.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Check the box adjacent to OPAC Visible? if you want patrons to be able to see the item in the OPAC after you receive it.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Select a loan duration rule from the drop down menu.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Select a fine level for the item from the drop down menu.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Select a copy Location from the drop down menu. The menu is populated from the copy locations that you created in Admin → \r
- Local Administration → Copy Locations.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Select a circ modifier from the drop down box. The menu is populated from the modifiers that you created in Admin → Server \r
- Administration → Circulation Modifiers.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Check the box adjacent to Floating? if the item is part of a floating collection.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Check the box adjacent to Deposit? if patrons must place a deposit on the copy before they can use it.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Check the box adjacent to Reference? if the item is a reference item.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- If the item is in mint condition, then check the box adjacent to Mint Condition?\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Enter age protection rules in the Age Protect field. Age protection allows you to control the extent to which an item can circulate \r
- after it has been received. For example, you may want to protect new copies of a serial so that only patrons who check out the item \r
- at your branch can use it.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Enter a message in the Alert Message field. This message will appear every time the item is checked out to a patron.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Enter a code from the MARC fixed fields if you want to control the circulation based on the item type in the Circ as Type field.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Enter a deposit amount if patrons must place a deposit on the copy before they can use it.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Enter the price of the item.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Enter the ID of the copy status in the Status field. A list of copy statuses and their IDs can be found in Admin → Server \r
- Administration → Copy Status.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Click Save.\r
- </simpara>\r
- </step>\r
- </procedure>\r
- <simpara>Fine level and loan duration are required fields in the Copy Template Editor.</simpara>\r
- </simplesect>\r
- <simplesect>\r
- <title>Edit a copy template</title>\r
- <simpara>You can make changes to an existing copy template. Changes that you make to a copy template will apply to any items that you \r
- receive after you edited the template.</simpara>\r
- <procedure>\r
- <step>\r
- <simpara>\r
- To edit a copy template, click your cursor in the row that you want to edit. The row will turn blue.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Double-click. The copy template will appear, and you can edit the fields.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- After making changes, click Save.\r
- </simpara>\r
- </step>\r
- </procedure>\r
- <simpara>From the copy template interface, you can delete copy templates that have never been used.</simpara>\r
- </simplesect>\r
-</section>\r
-\r
-<section id="_alternate_serial_control_view">\r
- <title>Alternate Serial Control View</title>\r
- <simpara>Using the Alternate Serial Control View, you can create a subscription, a distribution, a stream, and a caption and pattern, \r
- and you can generate predictions and receive issues.\r
- To access Alternate Serial Control View, open a serials record, and click Actions for this Record → Alternate Serial Control. \r
- This opens the Subscriptions interface</simpara>\r
- <simplesect>\r
- <title>Subscriptions</title>\r
- <simpara>Add new subscriptions to a serials record that exists in the catalog.</simpara>\r
- <simplesect>\r
- <title>Create a subscription</title>\r
- <procedure>\r
- <step>\r
- <simpara>\r
- Click New Subscription.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Select an owning library. The owning library indicates the organizational unit(s) whose staff can use this subscription. This menu \r
- is populated with the shortnames that you created for your libraries in the organizational units tree in Admin → \r
- Server Administration → Organizational Units.\r
- The rule of parental inheritance applies to this list. For example, if a system is made the owner of a subscription, then users, \r
- with appropriate permissions, at the branches within the system could also use this subscription.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Enter the date that the subscription begins in the start date. Recommended practice is that you select the date from the drop down \r
- calendar although you can manually enter a date.\r
- Owning library and start date are required fields in the new subscription pop up box.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Enter the date that the subscription ends in the end date. Recommended practice is to select a date from the drop down calendar, but \r
- you can manually enter a date, also.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Enter the difference between the nominal publishing date of an issue and the date that you expect to receive your copy in the Expected \r
- Date Offset. For example, if an issue is published the first day of each month, but you receive the copy two days prior to the \r
- publication date, then enter -2 days into this field.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Click Save.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- After you save the subscription, it will appear in a list with a hyperlinked ID number.\r
- Use the drop down menu at the top of the screen to view subscriptions at other organizations.\r
- </simpara>\r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Manage a subscription</title>\r
- <simpara>Click the hyperlinked ID number to manage the subscription. The tabbed interface enables you to create distributions, captions \r
- and patterns, and issuances.</simpara>\r
- </simplesect>\r
- <simplesect>\r
- <title>Edit a subscription</title>\r
- <simpara>Edit a subscription as you would edit a copy template.</simpara>\r
- </simplesect>\r
- </simplesect>\r
- <simplesect>\r
- <title>Distributions</title>\r
- <simpara>Distributions indicate the branches that should receive copies of a serial. Distributions work together with streams to indicate \r
- the number of copies that should be sent to each branch.</simpara>\r
- <simplesect>\r
- <title>Create a distribution</title>\r
- <procedure>\r
- <step>\r
- <simpara>\r
- Click the Distributions tab.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Click New Distribution.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Enter a name for the distribution in the Label field. It may be useful to identify the branch to which you are distributing these \r
- issues in this field. This field is not publicly visible and only appears when an item is received. There are no limits on the number of \r
- characters that can be entered in this field.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Select a holding library from the drop down menu. The holding library is the branch that will receive the copies.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Select a copy template from the Receive Unit Template drop down menu. This menu is populated with the copy templates that you created in \r
- Copy Template Editor.\r
- </simpara>\r
- <note><simpara>Label, Holding Library, and Receive Unit Template are required fields in the new distribution pop up box.</simpara></note>\r
- </step>\r
- <step>\r
- <simpara>\r
- Ignore the fields, Unit Label Prefix and Unit Label Suffix. These fields are not functional in Alternate Serial Control View.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Click Save. The distribution will appear in a list in the Distributions tab in the Subscription Details.\r
- </simpara>\r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Edit a distribution</title>\r
- <simpara>Edit a distribution just as you would edit a copy template.</simpara>\r
- <simpara>From the distribution interface, you can also delete distributions. Deleting the distribution would delete related data, \r
- such as streams associated with this distribution, but it would not delete units, the copy-equivalent objects that hold barcodes. \r
- Recommended practice is that you do not delete distributions.</simpara>\r
- </simplesect>\r
- </simplesect>\r
- <simplesect>\r
- <title>Streams</title>\r
- <simpara>Distributions work together with streams to indicate the number of copies that should be sent to each branch. Distributions \r
- identify the branches that should receive copies of a serial. Streams identify how many copies should be sent to each branch. Streams \r
- are intended for copies that are received on a recurring, even if irregular, basis.</simpara>\r
- <simpara>In our example, the Apex Branch should receive copies, so we created a distribution to that branch. The Apex Branch should \r
- receive two copies, so we will create two streams to that branch.</simpara>\r
- <simplesect>\r
- <title>Create a stream</title> \r
- <simpara>Click the hyperlinked title of the distribution. The number of streams that have already been created for this distribution \r
- displays adjacent to the title.\r
- You can choose one of two ways to create a stream: New Stream or Create Many Streams. The New Stream button allows you to create one new \r
- stream and assign it a routing label.</simpara>\r
- <procedure> \r
- <step><simpara>Click New Stream</simpara></step>\r
- <step><simpara>Enter a routing label so that the copy could be read by specific users or departments before the copy is shelved. The routing label appears during receiving and could be added to routing lists; it is not viewable by the public. Routing lists do not print from in 2.0. This field is optional.</simpara></step>\r
- <step><simpara>Click Save.</simpara></step>\r
- </procedure>\r
- <simpara>The Create Many Streams button allows you to create multiple streams at once, but it does not allow you to add a routing label when you create the stream.</simpara>\r
- <procedure>\r
- <step>\r
- <simpara>\r
- Click Create Many Streams.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Enter the number of streams that you want to create in the How many? Field.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Click Create.\r
- </simpara>\r
- </step>\r
- </procedure>\r
- </simplesect>\r
- <simplesect>\r
- <title>Edit a stream</title>\r
- <simpara>Edit a stream just as you would edit a copy template.</simpara>\r
- <simpara>From the streams interface, you can also delete streams. Deleting the stream would delete related data, but it would not delete units, or the copy-equivalent objects that hold barcodes. Recommended practice is that you do not delete streams.</simpara>\r
- </simplesect>\r
- </simplesect>\r
- <simplesect>\r
- <title>Captions and Patterns</title>\r
- <simpara>The Captions and Patterns wizard allows you to enter caption and pattern data as it is described by the 853, 854, and 855 MARC tags. These tags allow you to define how issues will be captioned, and how often the library receives issues of the serial.</simpara>\r
- <simpara>In 2.0, it is not possible to create a caption and pattern and apply it to multiple subscriptions. However, you can re-use patterns if you copy and paste to and from the pattern code field in the Captions and Patterns tab.</simpara>\r
- <simplesect>\r
- <title>Create a Caption and Pattern</title>\r
- <procedure>\r
- <step>\r
- <simpara>\r
- Open the Subscription Details.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Click the Captions and Patterns tab.\r
- </simpara>\r
-\r
-</step>\r
-<step>\r
-<simpara>\r
-Click Add Caption and Pattern.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-In the Type drop down box, select the MARC tag to which you would like to add data.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-In the Pattern Code drop down box, you can enter a JSON representation of the 85X tag by hand, or you can click the Wizard to enter the information in a user-friendly format.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-The Caption and Pattern that you create is Active by default, but you can deactivate a caption and pattern at a later time by unchecking the box.\r
-</simpara>\r
-</step>\r
-</procedure>\r
-<note><simpara>A subscription may have multiple captions and patterns listed in the subscripiton details, but only one Caption and Pattern can be active at any time.\r
-If you want to add multiple patterns, e.g. for Basic and Supplement, Click Add Caption and Pattern.</simpara></note>\r
-</simplesect>\r
-<simplesect>\r
-<title>Use the Pattern Code Wizard</title>\r
-<simpara>The Pattern Code Wizard enables you to create the caption of the item and add its publication information. The Wizard is composed of five pages of questions. You can use the Next and Previous navigation buttons in the top corners to flip between pages.</simpara>\r
-<procedure>\r
-<step>\r
-<simpara>\r
-To add a pattern code, click Wizard.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Page 1: Enumerations\r
-</simpara>\r
-<procedure numeration="loweralpha">\r
-<step>\r
-<simpara>\r
-To add an enumeration, check the box adjacent to Use enumerations?. The enumerations conform to $a-$h of the 853,854, and 855 MARC tags.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-A field for the First level will appear. Enter the enumeration for the first level. A common first level enumeration is volume, or “v.”\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click Add Enumeration.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-A field for the Second level will appear. Enter the enumeration for the second level. A common first level enumeration is number, or “no.”\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Enter the number of bibliographic units per next higher level. This conforms to $u in the 853, 854, and 855 MARC tags.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Choose the enumeration scheme from the drop down menu. This conforms to $v in the 853, 854, and 855 MARC tags.\r
-</simpara>\r
-<note><simpara>You can add up to six levels of enumeration.</simpara></note>\r
-</step>\r
-<step>\r
-<simpara>\r
-Add Alternate Enumeration if desired.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-When you have completed the enumerations, click Next.\r
-</simpara>\r
-</step>\r
-</procedure>\r
-</step>\r
-<step>\r
-<simpara>\r
-Page 2: Calendar\r
-</simpara>\r
-<procedure numeration="loweralpha">\r
-<step>\r
-<simpara>\r
-To use months, seasons, or dates in your caption, check the box adjacent to Use calendar changes?\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Identify the point in the year at which the highest level enumeration caption changes.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-In the Type drop down menu, select the points during the year at which you want the calendar to restart.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-In the Point drop down menu, select the specific time at which you would like to change the calendar\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-To add another calendar change, click Add Calendar Change. There are no limits on the number of calendar changes that you can add.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-When you have finished the calendar changes, click Next.\r
-</simpara>\r
-</step>\r
-</procedure>\r
-</step>\r
-<step>\r
-<simpara>\r
-Page 3: Chronology\r
-</simpara>\r
-<procedure numeration="loweralpha">\r
-<step>\r
-<simpara>\r
-To add chronological units to the captions, check the box adjacent to Use chronology captions?\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Choose a chronology for the first level. If you want to display the terms, “year” and “month” next to the chronology caption in the catlaog, then check the box beneath Display in holding field?\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-To include additional levels of chronology, click Add Chronology Caption. Each level that you add must be smaller than the previous level.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-After you have completed the chronology caption, click Next.\r
-</simpara>\r
-</step>\r
-</procedure>\r
-</step>\r
-<step>\r
-<simpara>\r
-Page 4: Compress and Expand Captions\r
-</simpara>\r
-<procedure numeration="loweralpha">\r
-<step>\r
-<simpara>\r
-Select the appropriate option for compressing or expanding your captions in the catalog from the compressibility and expandability drop down menu. The entries in the drop down menu correspond to the indicator codes and the subfield $w in the 853 tag. Compressibility and expandability correspond to the first indicator in the 853 tag.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Choose the appropriate caption evaluation from the drop down menu.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Choose the frequency of your publication from the drop down menu. For irregular frequencies, you may wish to select use number of issues per year, and enter the total number of issues that you receive each year. However, in the . 0 release, recommended practice is that you use only regular frequencies. Planned development will create an additional step to aid in the creation of irregular frequencies.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click Next.\r
-</simpara>\r
-</step>\r
-</procedure>\r
-</step>\r
-<step>\r
-<simpara>\r
-Page 5: Finish Captions and Patterns\r
-</simpara>\r
-<procedure numeration="loweralpha">\r
-<step>\r
-<simpara>\r
-To complete the wizard, click Create Pattern Code.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Return to Subscription Details.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Confirm that the box adjacent to Active is checked. Click Save Changes. The row is now highlighted gray instead of orange.\r
-</simpara>\r
-</step>\r
-</procedure>\r
-</step>\r
-</procedure>\r
-</simplesect>\r
-\r
-</simplesect>\r
-<simplesect xml:id="create_an_issuance">\r
-<title>Issuances</title>\r
-<simpara>The Issuances tab enables you to manually create an issue in the ILS. The ILS will use the initial issue that you manually create to predict future issues.</simpara>\r
-<simplesect>\r
-<title>Create an issuance</title>\r
-<procedure>\r
-<step>\r
-<simpara>\r
-Click the Issuances tab in the Subscription Details.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click New Issuance.\r
-<mediaobject>\r
- <alt>\r
- <phrase>Create an Issuance 1</phrase> \r
- </alt>\r
- <imageobject>\r
- <imagedata fileref="../media/create_an_issuance1.png" format="PNG" scalefit="1" width="45%"/> \r
- </imageobject>\r
-</mediaobject>\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-The Subscription, Creator, and Editor fields contain subscription and user IDs, respectively. These fields are disabled because Evergreen automatically fills in these fields.\r
-<mediaobject>\r
- <alt>\r
- <phrase>Create an Issuance 2</phrase> \r
- </alt>\r
- <imageobject>\r
- <imagedata fileref="../media/create_an_issuance2.png" format="PNG" scalefit="1" width="60%"/> \r
- </imageobject>\r
-</mediaobject>\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Enter a name for this issuance in the Label field. There are no limits on the number of characters that can be entered in this field. You may want to enter the month and year of the publication in hand.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Enter the Date Published of the issuance that you are editing. Recommended practice is that you select the date from the drop down calendar although you can manually enter a date. If you are creating one manual issue before automatically predicting more issues, then this date should be the date of the most current issue before the prediction starts.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Select a Caption/Pattern from the drop down menu. The numbers in the drop down menu correspond to the IDs of the caption/patterns that you created.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-The Holding Type appears by default and corresponds to the Type that you selected when you created the Caption/Pattern.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-In the holding code area of the New Issuance dialog, click Wizard. The Wizard enables you to add holdings information.\r
-<mediaobject>\r
- <alt>\r
- <phrase>Create an Issuance 3</phrase> \r
- </alt>\r
- <imageobject>\r
- <imagedata fileref="../media/create_an_issuance3.png" format="PNG" scalefit="1" width="60%"/> \r
- </imageobject>\r
-</mediaobject>\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Enter the volume of the item in hand in the v. field.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Enter the number of the item in hand in the no. field.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Enter the year of publication in the Year field.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Enter the month of publication in the Month field if applicable. You must enter the calendar number of the month rather than the name of the month. For example, enter 12 if the item in hand was published in December.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Enter the day of publication in the day field if applicable.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click Compile to generate the holdings code.\r
-<mediaobject>\r
- <alt>\r
- <phrase>Create an Issuance 4</phrase> \r
- </alt>\r
- <imageobject>\r
- <imagedata fileref="../media/create_an_issuance4.png" format="PNG" scalefit="1" width="60%"/> \r
- </imageobject>\r
-</mediaobject>\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click Save. The newly generated issuance will appear in a list in the Issuances tab of the Subscription Details.\r
-<mediaobject>\r
- <alt>\r
- <phrase>Create an Issuance 5</phrase> \r
- </alt>\r
- <imageobject>\r
- <imagedata fileref="../media/create_an_issuance5.png" format="PNG" scalefit="1" width="60%"/> \r
- </imageobject>\r
-</mediaobject>\r
-</simpara>\r
-</step>\r
-</procedure>\r
-</simplesect>\r
-</simplesect>\r
-<simplesect>\r
-<title>Generate item predicitions</title>\r
-<simpara>After you manually create the first issue, Evergreen will predict future issuances. Use the Generate Predictions functionality to predict future issues.</simpara>\r
-<procedure>\r
-<step>\r
-<simpara>\r
-Click Subscription Details → Issuances → Generate Predictions.\r
-<mediaobject>\r
- <alt>\r
- <phrase>Generate item predicitions 1</phrase> \r
- </alt>\r
- <imageobject>\r
- <imagedata fileref="../media/generate_item_predictions1.png" format="PNG" scalefit="1" width="60%"/> \r
- </imageobject>\r
-</mediaobject>\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Choose the length of time for which you want to predict issues. If you select the radio button to predict until end of subscription, then Evergreen will predict issues until the end date that you created when you created the subscription. See simplesect . 1 for more information. If you do not have an end date, select the radio button to predict a certain number of issuances, and enter a number in the field.\r
-<mediaobject>\r
- <alt>\r
- <phrase>Generate item predicitions 2</phrase> \r
- </alt>\r
- <imageobject>\r
- <imagedata fileref="../media/generate_item_predictions2.png" format="PNG" scalefit="1" width="60%"/> \r
- </imageobject>\r
-</mediaobject>\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click Generate.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Evergreen will predict a run of issuances and copies. The prediction will appear in a list.\r
-<mediaobject>\r
- <alt>\r
- <phrase>Generate item predicitions 3</phrase> \r
- </alt>\r
- <imageobject>\r
- <imagedata fileref="../media/generate_item_predictions3.png" format="PNG" scalefit="1" width="60%"/> \r
- </imageobject>\r
-</mediaobject>\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-You can delete the first, manual issuance by clicking the check box adjacent to the issuance and clicking Delete Selected.\r
-</simpara>\r
-</step>\r
-</procedure>\r
-</simplesect>\r
-<simplesect>\r
-<title>Receiving</title>\r
-<simpara>You can batch receive items through a simple or an advanced interface. The simple interface does not allow you to add barcodes or use the copy template. These items are also not visible in the OPAC. The advanced interface enables you to use the copy templates that you created, add barcodes, and make items OPAC visible and holdable.</simpara>\r
-<simpara>You can access both Batch Receive interfaces from two locations in the ILS. From the Subscription Details screen, you can click Batch Item Receive. You can also access these interfaces by opening the catalog record for the serial, and clicking Actions for this Record → Serials Batch Receive.</simpara>\r
-<simplesect>\r
-<title>Simple Batch Receiving</title>\r
-<simpara>Follow these steps to receive items in batch in a simple interface.</simpara>\r
-<procedure>\r
-<step>\r
-<simpara>\r
-The Batch Receive interface displays issues that have not yet been received. The earliest expected issue appears at the top of the list.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-In the right lower corner, you see a check box to Create Units for Received Items. If you do not check this box, then you will receive items in simple mode.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click Next.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-In simple mode, the distributions that you created are displayed. They are marked received by default. If you hover over the branch name, you can view the name of the distribution and its stream.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-You can receive and add a note to each item individually, or you can perform these actions on all of the distributions and streams at once. To do so, look above the line, and enter the note that you want to apply to all copies and confirm that the box to Receive? is checked.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click Apply. The note should appear in the note field in each distribution.\r
-</simpara>\r
-<note><simpara>In 2.0, the note field is only displayed in the current screen.</simpara></note>\r
-</step>\r
-<step>\r
-<simpara>\r
-Then click Receive Selected Items.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-The received items are cleared from the screen.\r
-</simpara>\r
-</step>\r
-</procedure>\r
-</simplesect>\r
-<simplesect>\r
-<title>Advanced Batch Receiving</title>\r
-<simpara>Follow these steps to receive items in batch in a simple interface.</simpara>\r
-<procedure>\r
-<step>\r
-<simpara>\r
-The Batch Receive interface displays issues that have not yet been received. The earliest expected issue appears at the top of the list.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-If you want to barcode each copy, display it in the catalog, and make it holdable, then check the box adjacent to Create Units for Received Items in the lower right side of the screen.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-This will allow you to utilize the copy templates and input additional information about the copy:\r
-</simpara>\r
-<procedure numeration="loweralpha">\r
-<step>\r
-<simpara>\r
-Barcode – You can scan printed barcodes into the barcode field for each copy, or you can allow the system to auto-generate barcodes.\r
- …To auto-generate barcodes, check the box adjacent to Auto-generate?, and enter the first barcode into the barcode field in the first row of the table. Then press the Tab key. The remaining barcode fields will automatically populate with the next barcodes in sequence, including check digits.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Circ Modifiers - The circ modifiers drop down menu is populated with the circulation modifiers that you created in Admin → Server Administration → Circulation Modifiers. If you entered a circ modifier in the copy template that you created for this subscription, then it will appear by default in the distributions.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Call Number – Enter a call number. Any item with a barcode must also have a call number.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Note – Add a note. There are no limits on the number of characters that can be entered in this field. The note only displays in this screen.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Copy Location – The copy location drop down menu is populated with the copy locations that you created in Admin → Local Administration → Copy Location Editor. If you entered a copy location in the copy template that you created for this subscription, then it will appear by default in the distributions.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Price - If you entered a price in the copy template that you created for this subscription, then it will appear by default in the distributions. You can also manually enter a price if you did not include one in the copy template.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Receive? – The boxes in the Receive? Column are checked by default. Uncheck the box if you do not want to receive the item. Evergreen will retain the unreceived copies and will allow you to receive them at a later time.\r
-</simpara>\r
-</step>\r
-</procedure>\r
-</step>\r
-<step>\r
-<simpara>\r
-When you are ready to receive the items, click Receive Selected Items.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-The items that have been received are cleared from the Batch Receive interface. The remaining disabled item is an unreceived item.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-If the items that you received have a barcode, a copy template that was set to OPAC Visible, and are assigned a shelving location that is OPAC Visible, then you can view the received items in the catalog. Notice that the Holdings Summary has been updated to reflect the most recent addition to the holdings.\r
-</simpara>\r
-</step>\r
-</procedure>\r
-</simplesect>\r
-</simplesect>\r
-</section>\r
-\r
-<section id="_serial_control_view">\r
-<title>Serial Control View</title>\r
-<simpara>Serial Control View is separate from the Alternate Serial Control interface. Serial Control View enables you to manage serials in a single tabbed interface. This view also enables you to bind units. Serial Control View consists of five tabs: Items, Units, Distributions, Subscriptions, and Claims. Units and Claims are not functional in 2.0.</simpara>\r
-<simpara>To access Serial Control View, open a bib record and click Actions for this Record → Serial Control View.</simpara>\r
-<simplesect>\r
-<title>Subscriptions</title>\r
-<simpara>The Subscriptions tab enables you to view and manage subscriptions.</simpara>\r
-<simplesect>\r
-<title>Create a subscription</title>\r
-<procedure>\r
-<step>\r
-<simpara>\r
-Click the Subscriptions tab.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Select the branch that will own the subscription.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Right-click or click Actions for Selected Row, and click Add Subscription.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Enter the date that the subscription begins in the start date, and click Apply. You must enter the date in YYYY-MM-DD format.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Enter the date that the subscription ends in the end date. This field is optional.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Enter the difference between the nominal publishing date of an issue and the date that you expect to receive your copy in the Expected Date Offset. For example, if an issue is published the first day of each month, but you receive the copy two days prior to the publication date, then enter -2 days into this field.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-When finished, click Create Subscription(s) in the bottom right corner of the screen.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-A confirmation message appears. Click OK.\r
-</simpara>\r
-</step>\r
-</procedure>\r
-<simpara>You can add notes to the subscription by clicking Subscription Notes. These\r
-notes are currently viewable only in the staff client by clicking on the Subscription Notes button.</simpara>\r
-</simplesect>\r
-<simplesect>\r
-<title>Edit a subscription</title>\r
-<simpara>To edit a subscription, select the subscription in the tree on the left side of the screen. You can edit the following categories: Owning Lib, Start Date, End Date, and Date Offset. After you edit the subscription, click Modify Subscription(s) to save the changes.</simpara>\r
-</simplesect>\r
-</simplesect>\r
-<simplesect>\r
-<title>Distributions</title>\r
-<simpara>Distributions indicate the branches that should receive copies of a serial. Distributions work together with streams to indicate the number of copies that should be sent to each branch.</simpara>\r
-<simplesect>\r
-<title>Create a distribution</title>\r
-<procedure>\r
-<step>\r
-<simpara>\r
-Click the distributions link beneath the subscription. Right click or click Actions for Selected Rows, and click Add distribution.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Apply a new label to the distribution. It may be useful to identify the branch to which you are distributing these issues in this field. This field is not publicly visible and only appears when an item is received. There are no limits on the number of characters that can be entered in this field.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Apply a prefix to the spine label if desired. This information will display in Serial Control View when the items are received, but it does not print on the spine label in . 0.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Apply a suffix to the spine label if desired. This information will display in Serial Control View when the items are received, but it does not print on the spine label in . 0.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-The holding library is filled in by default and is the library to which you attached the subscription.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-The Legacy Record Entry contains the MFHD records that are attached to the bib record if the owning library is identical to the distribution’s holding library. A distribution can thus be an extension of an MFHD record. Select the MFHD record from the drop down menu.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-The Receive Call Number field is empty until you receive the first item. When you receive the first item, you are prompted to enter a call number. That call number will populate this drop down menu.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-The Bind Call Number field is empty until you bind the first item. When you receive the first item, you are prompted to enter a call number. That call number will populate this drop down menu.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Receive Unit Template – The template that should be applied to copies when they are received. Select a template from the drop down menu.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Bind Unit Template - The template that should be applied to copies when they are bound. Select a template from the drop down menu.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-When finished, click Create Distribution(s) in the bottom right corner of the screen.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-A confirmation message appears. Click OK.\r
-</simpara>\r
-</step>\r
-</procedure>\r
-<note><simpara>You can add notes to the distribution by clicking Distribution Notes. These\r
-notes are currently viewable only in the staff client by clicking on the Distribution Notes button.</simpara></note>\r
-</simplesect>\r
-<simplesect>\r
-<title>Edit a distribution</title>\r
-<simpara>To edit a distribution, select the distribution in the tree on the left side of the screen. You can edit the following categories: Label, Holding Lib, Legacy Record Entry, Receive Unit Template, Bind Unit Template, Receive Call Number and Bind Call Number. After you edit the distribution, click Modify Distribution(s) to save the changes.</simpara>\r
-</simplesect>\r
-</simplesect>\r
-<simplesect>\r
-<title>Streams</title>\r
-<simpara>Distributions work together with streams to indicate the number of copies that should be sent to each branch. Distributions identify the branches that should receive copies of a serial. Streams identify how many copies should be sent to each branch. Streams are intended for copies that are received on a recurring, even if irregular, basis.</simpara>\r
-<simpara>In our example, the Apex Branch should receive copies, so we created a distribution to that branch. The Apex Branch should receive two copies, so we will create two streams to that branch.</simpara>\r
-<simplesect>\r
-<title>Create a stream</title>\r
-<procedure>\r
-<step>\r
-<simpara>\r
-Click the Distributions tab.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Check the boxes to Show Dist. and Show Groups to view distributions and streams.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Select the Streams link beneath the distribution that you created for that branch. Right click or click Actions for Selected Row → Add Stream.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click the stream that is created.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Enter a routing label so that the copy could be read by specific users or departments before the copy is shelved. The routing label appears during receiving and could be added to routing lists; it is not viewable by the public. Routing lists do not print in . 0. This field is optional.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click Modify Stream(s) in the bottom right corner of the screen.\r
-</simpara>\r
-</step>\r
-</procedure>\r
-<simpara>The data in the Basic Summary, Supplement Summary, and Index Summary are automatically generated by the ILS when you create a caption and pattern and a holdings statement. You can create additional textual holdings manually by editing the Textual Holdings field.</simpara>\r
-</simplesect>\r
-<simplesect>\r
-<title>Edit a stream</title>\r
-<procedure>\r
-<step>\r
-<simpara>\r
-To edit a stream, select the stream in the tree on the left side of the screen. You can edit the following category:\r
-</simpara>\r
-<itemizedlist>\r
-<listitem>\r
-<simpara>\r
-Routing Label – The label given to an issue to direct it to the people or departments that should view the issue before it is available to the public.\r
-</simpara>\r
-</listitem>\r
-</itemizedlist>\r
-</step>\r
-<step>\r
-<simpara>\r
-The Basic Summary displays the distribution ID, the Textual Holdings, and the Generated Holdings. The OPAC uses data in legacy records, the generated coverage field, and the textual holdings fields to display holdings information.\r
-</simpara>\r
-<procedure numeration="loweralpha">\r
-<step>\r
-<simpara>\r
-The distribution ID and the Generated Coverage are created by Evergreen.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Textual Holdings – Enter any additional holdings information in this field, and it will display in the OPAC as Additional Volume Information.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Then click Modify Basic Summary to save your changes. Your changes will appear in the OPAC view.\r
-</simpara>\r
-</step>\r
-</procedure>\r
-</step>\r
-</procedure>\r
-</simplesect>\r
-</simplesect>\r
-<simplesect>\r
-<title>Captions and Patterns</title>\r
-<simpara>The Captions and Patterns wizard allows you to enter caption and pattern data as it is described by the 853, 854, and 855 MARC tags. These tags allow you to define how issues will be captioned, and how often the library receives issues of the serial.</simpara>\r
-<simpara>In 2.0, it is not possible to create a caption and pattern and apply it to multiple subscriptions. However, you can re-use patterns if you copy and paste to and from the pattern code field in the Captions and Patterns tab.</simpara>\r
-<simplesect>\r
-<title>Create a caption and pattern</title>\r
-<procedure>\r
-<step>\r
-<simpara>\r
-Click the Subscriptions tab.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Beneath the subscription, click Captions and Patterns, and right-click or click Actions for Selected Row → Add Caption/Pattern.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-The ID and Creation Date will fill in automatically.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click the Unset entry beneath Type. A drop down menu will appear. Choose the type of caption and pattern that you want to create, and click Apply.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click the Unset entry beneath Active. A drop down menu will appear. Choose Yes if you want to activate the caption and pattern. Click Apply.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click the Unset entry beneath the Pattern Code (temporary) field if you want to create the pattern code by hand. If you want to create it automatically, click Pattern Code Wizard in the lower right corner.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Follow the steps for using the pattern code wizard.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click Apply.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click Create Caption and Pattern(s).\r
-</simpara>\r
-</step>\r
-</procedure>\r
-</simplesect>\r
-<simplesect>\r
-<title>Edit a caption and pattern</title>\r
-<simpara>To edit a caption/pattern, select the caption/pattern in the tree on the left side of the screen. You can edit the following categories:\r
- - Type – Change the type of the caption/pattern.\r
- - Acitve – Activate or deactivate the caption/pattern.\r
- - Pattern Code – Edit the contents of the field, or click the Pattern Code Wizard to create a new pattern code.</simpara>\r
-<simpara>After you edit the subscription, click Modify Caption and Pattern(s) to save the changes.</simpara>\r
-</simplesect>\r
-</simplesect>\r
-<simplesect>\r
-<title>Issuances</title>\r
-<simpara>The Issuances tab enables you to manually create an issue in the ILS. The ILS will use the initial issue that you manually create to predict future issues.</simpara>\r
-<simplesect>\r
-<title>Create an issuance</title>\r
-<procedure>\r
-<step>\r
-<simpara>\r
-Click the Subscriptions tab.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Beneath the subscription, click Issuances, and right-click or click Actions for Selected Row → Add Issuance.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-The fields in the first column will fill in automatically after you have created the issuance.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click the Unset link in the Holding Code field, and manually enter a holding code. Click Apply.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click the Unset link in the Caption/Pattern field. Select a caption/pattern from the drop down menu. Click Apply.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Enter the Date Published of the issuance that you are editing. Enter the date in YYYY-MM-DD format. If you are creating one manual issue before automatically predicting more issues, then this date should be the date that you want to enter before the prediction starts. Click Apply.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click in the Issuance Label field to name the issuance. There are no limits on the number of characters that can be entered in this field. You may want to enter the month and year of the publication in hand. Click Apply.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click Create Issuance in the lower right corner to save your changes.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-A confirmation message appears. Click OK.\r
-</simpara>\r
-</step>\r
-</procedure>\r
-</simplesect>\r
-<simplesect>\r
-<title>Edit an issuance</title>\r
-<simpara>To edit an issuance, select the issuance in the tree on the left side of the screen. You can edit the following categories: Holding Code, Caption/Pattern, Date Published, and Issuance Label. After you edit the issuance, click Modify Issuance(s) to save the changes.</simpara>\r
-</simplesect>\r
-</simplesect>\r
-<simplesect>\r
-<title>Generate item predictions</title>\r
-<procedure>\r
-<step>\r
-<simpara>\r
-Open the Subscriptions tab.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Right-click or click Actions for Selected Row → Make predictions.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-A pop up box will aks you how many items you want to predict. Enter the number, and click OK.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-A confirmation message will appear. Click OK.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click the Issuances link to view the predicted issues.\r
-</simpara>\r
-</step>\r
-</procedure>\r
-</simplesect>\r
-<simplesect>\r
-<title>Receiving</title>\r
-<simpara>Receive items in the Items tab. From this interface, you can receive items, edit item attributes, and delete items.</simpara>\r
-<simplesect>\r
-<title>Receive Items</title>\r
-<procedure>\r
-<step>\r
-<simpara>\r
-To receive items, click the Receive radio button. In the top half of the screen, the items that have yet to be received are displayed. In the bottom half of the screen, recently received items are displayed.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Select the branch that will receive the items from the drop down box.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Select the issue that you want to receive.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Select the current working unit. Click Set Current Unit, located in the lower right corner of the screen. A drop down menu will appear.\r
-</simpara>\r
-<itemizedlist>\r
-<listitem>\r
-<simpara>\r
-If you want to barcode each item individually, select Auto per item. This setting is recommended for most receiving processes.\r
-</simpara>\r
-</listitem>\r
-<listitem>\r
-<simpara>\r
-If you want each item within a unit to share the same barcode, then select New Unit. This setting is advised for most binding processes.\r
-</simpara>\r
-</listitem>\r
-<listitem>\r
-<simpara>\r
-If you want the item to be received or bound into an existing item, select Recent and select the desired issue. To making a change in bound items, receive or bind the items into an already existing unit.\r
-</simpara>\r
-</listitem>\r
-</itemizedlist>\r
-</step>\r
-<step>\r
-<simpara>\r
-Click Receive/Move Selected.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Enter a barcode and call number if prompted to do so.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-A message confirming receipt of the item appears. Click OK.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-The screen refreshes. In the top half of the screen, the item displays a received date. In the bottom half of the screen, the item that you have just received is now at the top of the list of the received items.\r
-</simpara>\r
-</step>\r
-</procedure>\r
-<simpara>After receiving items, you can view the updated holdings in the OPAC. In this example, the legacy MFHD record and the items recently received in the serial control view display together in the MFHD statement.</simpara>\r
-</simplesect>\r
-<simplesect>\r
-<title>Edit Item Attributes</title>\r
-<simpara>In this pop up box, you can view the Item ID, Status, Distribution, and Shelving ID. These are generated by Evergreen. However, you may need to edit an item’s Date Expected or Received.</simpara>\r
-<procedure>\r
-<step>\r
-<simpara>\r
-To edit item attributes, select the item(s) that you want to edit, and click Actions for Selected Rows → Edit Item Attributes.\r
-</simpara>\r
-</step>\r
-<step>\r
-<simpara>\r
-Edit the attributes that appear. When you are finished, click Modify Item(s).\r
-</simpara>\r
-</step>\r
-</procedure>\r
-</simplesect>\r
-<simplesect>\r
-<title>Delete Items</title>\r
-<simpara>You can use this menu item to delete items from your holdings. To delete items from your holdings, click Actions for Selected Rows → Delete Item.</simpara>\r
-</simplesect>\r
-</simplesect>\r
-<simplesect>\r
-<title>Bind Items</title>\r
-<simpara>The binding mode applies the binding template, which is defined in the distribution (see simplesect 2 for more information), to units that should be bound.</simpara>\r
- <procedure>\r
- <step>\r
- <simpara>\r
- Select the the branch that will receive the items from the drop down box.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- To bind items, click the Bind radio button. Items that have been received will appear in the top half of the screen.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Select the current working unit.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Select the issues that you want to bind, and click Receive/Move Selected.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- In the bottom half of the screen, you can view the items that you have bound together.\r
- </simpara>\r
- </step>\r
- </procedure>\r
- <simpara>If you want to view all items, including those that have not been received, in the top half of the screen, click the check box \r
- adjacent to Show All.</simpara>\r
- </simplesect>\r
-</section>\r
-\r
-<section id="Serials_MFHD_records"> \r
- <title>MFHD Record</title>\r
- <simpara>You can manually create MFHD statements.</simpara>\r
- <procedure>\r
- <step>\r
- <simpara>\r
- Create an MFHD record\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Open a serial record, and in the bottom right corner above the copy information, click Add MFHD Record. You can also add the MFHD statement by clicking Actions for this Record →MFHD Holdings →Add MFHD Record.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- A message will confirm that you have created the MFHD Record. Click OK.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Click Reload in the top left corner of the record.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- The Holdings Summary will appear. Click Edit Holdings in the right corner.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Click Edit Record.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- The MFHD window will pop up. Enter holdings information. Click Save MFHD.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Close the MFHD window.\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Click Reload in the top left corner of the record. The Holdings Summary will reflect the changes to the MFHD statement.\r
- </simpara>\r
- </step>\r
- </procedure>\r
-</section>\r
-<section id="serial_permissions">\r
- <simpara>The following permissions enable you to control serials’ functions. Although you can assign each permission to users in the Admin module, it is recommended that either all serials permissions be assigned to an individual, or that they should be assigned to individuals in the following groups.</simpara>\r
- <simpara>The following permission allow you to create, manage, view, edit, and perform all other functions associated with these serials tasks:</simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- ADMIN_SERIAL_CAPTION_PATTERN\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- ADMIN_SERIAL_DISTRIBUTION\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- ADMIN_SERIAL_STREAM\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- ADMIN_SERIAL_SUBSCRIPTION\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- <simpara>To receive copies of serials:</simpara>\r
- <itemizedlist>\r
- <listitem>\r
- <simpara>\r
- RECEIVE_SERIAL\r
- </simpara>\r
- </listitem>\r
- <listitem>\r
- <simpara>\r
- CREATE_VOLUME\r
- </simpara>\r
- </listitem>\r
- </itemizedlist>\r
- <simpara>You only need the CREATE_VOLUME permission if you are barcoding items and creating new call numbers per issue.</simpara>\r
-</section>\r
-<section id="_serials_creating_a_special_issue_to_receive"> \r
- <title>Creating a Special Issue to Receive</title>\r
- <simpara>Sometimes you may have to create a special issue to receive that occur outside of the standard publication pattern. To do this you need to do the following:</simpara>\r
- <procedure>\r
- <step>\r
- <simpara>\r
- <link linkend="create_an_issuance"> Create an issuance </link> for the special edition\r
- <mediaobject>\r
- <alt>\r
- <phrase>Create an Issuance for the Special Edition 1</phrase> \r
- </alt>\r
- <imageobject>\r
- <imagedata fileref="../media/serial_special_issue1.png" format="PNG" scalefit="1" width="60%"/> \r
- </imageobject>\r
- </mediaobject> \r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Click on the name of your special issue in the list of issuances\r
- <mediaobject>\r
- <alt>\r
- <phrase>Create an Issuance for the Special Edition 1</phrase> \r
- </alt>\r
- <imageobject>\r
- <imagedata fileref="../media/serial_special_issue2.png" format="PNG" scalefit="1" width="60%"/>\r
- </imageobject>\r
- </mediaobject>\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Click the New Items button\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- Enter the appropriate information\r
- </simpara>\r
- </step>\r
- <step>\r
- <simpara>\r
- The item is now ready to receive. If you complete the Date Received field and change the status to received then it will receive the issue but it won't create the associated copy record whereas if you leave it blank and receive the item through the Serials Control View or Batch Receive function you can create the Copy Record at that time.\r
- </simpara>\r
- </step>\r
- </procedure>\r
-</section>\r
-\r
-</chapter>\r
-<partintro xmlns:xl="http://www.w3.org/1999/xlink" xml:id="stafftasks_intro">\r
- <para>This part of the documentation covers a broad range of the common tasks carried out by your library and includes tasks performed by circulation staff and catalogers among others. Some of these procedures should only be performed by Local System Administrators, but most of these sections will give all staff a better understanding of the Evergreen system and its features.</para>\r
-</partintro>\r