[open-ils-commits] SPAM: r10187 - in branches/rel_1_2/Open-ILS:
examples/apache web/opac/extras web/opac/extras/selfcheck
web/opac/locale/en-US
svn at svn.open-ils.org
svn at svn.open-ils.org
Wed Jul 30 13:03:56 EDT 2008
Author: erickson
Date: 2008-07-30 13:03:48 -0400 (Wed, 30 Jul 2008)
New Revision: 10187
Added:
branches/rel_1_2/Open-ILS/web/opac/extras/selfcheck/
branches/rel_1_2/Open-ILS/web/opac/extras/selfcheck/selfcheck.css
branches/rel_1_2/Open-ILS/web/opac/extras/selfcheck/selfcheck.js
branches/rel_1_2/Open-ILS/web/opac/extras/selfcheck/selfcheck.xml
branches/rel_1_2/Open-ILS/web/opac/extras/selfcheck/selfcheck_print.css
Modified:
branches/rel_1_2/Open-ILS/examples/apache/eg_vhost.conf
branches/rel_1_2/Open-ILS/web/opac/locale/en-US/opac.dtd
Log:
Basic web-based selfcheck interface. This interface implements a subset of
http://open-ils.org/dokuwiki/doku.php?id=scratchpad:simple_self_check
Modified: branches/rel_1_2/Open-ILS/examples/apache/eg_vhost.conf
===================================================================
--- branches/rel_1_2/Open-ILS/examples/apache/eg_vhost.conf 2008-07-30 13:57:27 UTC (rev 10186)
+++ branches/rel_1_2/Open-ILS/examples/apache/eg_vhost.conf 2008-07-30 17:03:48 UTC (rev 10187)
@@ -191,6 +191,18 @@
</Location>
# ----------------------------------------------------------------------------------
+# Selfcheck interface
+# ----------------------------------------------------------------------------------
+<LocationMatch .*/selfcheck.xml>
+ SetHandler perl-script
+ PerlHandler OpenILS::Reporter::Proxy
+ Options +ExecCGI
+ PerlSendHeader On
+ allow from all
+</LocationMatch>
+
+
+# ----------------------------------------------------------------------------------
# Reports GUI
# ----------------------------------------------------------------------------------
<LocationMatch /reports/>
Added: branches/rel_1_2/Open-ILS/web/opac/extras/selfcheck/selfcheck.css
===================================================================
--- branches/rel_1_2/Open-ILS/web/opac/extras/selfcheck/selfcheck.css (rev 0)
+++ branches/rel_1_2/Open-ILS/web/opac/extras/selfcheck/selfcheck.css 2008-07-30 17:03:48 UTC (rev 10187)
@@ -0,0 +1,86 @@
+.hide_me {
+ visibility: hidden;
+ display: none;
+}
+table { border-collapse:collapse; }
+body { font-size: 12pt; }
+.container:after {content: ""; display: block; height: 0; clear: both; }
+
+.biglabel {
+ font-size: 13pt;
+ margin: 5px;
+}
+
+.selfck-link-span {
+ padding: 2px 4px 2px 4px;
+}
+
+#selfck-items-out-table {
+ width: 100%;
+}
+.form_div {
+ width:100%;
+}
+.form_div span {
+ padding: 5px;
+}
+
+#selfck-item-barcode-form {
+ margin-top:20px;
+}
+#selfck-items-out-table thead td {
+ font-weight: bold;
+}
+#selfck-items-out-table thead tr {
+ border-bottom: 2px solid #808080;
+}
+#selfck-items-out-table {
+ margin-top: 20px;
+}
+#selfck-items-out-tbody td {
+ padding: 4px 0px 4px 0px;
+}
+#selfck-items-out-tbody tr {
+ border-bottom: 1px solid #808080;
+}
+#selfck-pic-cell { width: 43px;}
+.jacket { height: 50px; width: 40px; border: none;}
+
+#selfck-logout-div {
+ width: 100%;
+ margin: 0px 0px 0px 0px;
+ padding: 3px;
+ /*border-bottom:2px solid #e0f0e0;*/
+ text-align: right;
+}
+
+#selfck-patron-info-div {
+ text-align: left;
+ float:left;
+}
+#selfck-logout-link-div {
+ text-align: right;
+ float:right;
+}
+
+#selfck-message-div {
+ border: 1px solid #e0f0e0;
+ height: 1.5em;
+ overflow: auto;
+ margin-bottom: 20px;
+}
+#selfck-item-barcode-form-div {
+ text-align: center;
+}
+
+.print {
+ display: none;
+ visibility: hidden;
+}
+.noprint {
+ display: block;
+ visibility: visible;
+}
+
+
+
Added: branches/rel_1_2/Open-ILS/web/opac/extras/selfcheck/selfcheck.js
===================================================================
--- branches/rel_1_2/Open-ILS/web/opac/extras/selfcheck/selfcheck.js (rev 0)
+++ branches/rel_1_2/Open-ILS/web/opac/extras/selfcheck/selfcheck.js 2008-07-30 17:03:48 UTC (rev 10187)
@@ -0,0 +1,307 @@
+/* -----------------------------------------------------------------
+* Copyright (C) 2008 Equinox Software, Inc.
+* Bill Erickson <erickson at esilibrary.com>
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+* 02110-1301, USA
+----------------------------------------------------------------- */
+
+var STAFF_SES_PARAM = 'ses';
+var patron = null
+var itemBarcode = null;
+var itemsOutTemplate = null;
+var isRenewal = false;
+var pendingXact = false;
+var patronTimeout = 120000;
+var timerId = null;
+var printWrapper;
+var printTemplate;
+var successfulItems = {};
+
+
+function selfckInit() {
+ var cgi = new CGI();
+ var staff = grabUser(cookieManager.read(STAFF_SES_PARAM) || cgi.param(STAFF_SES_PARAM));
+
+ /*
+ XXX we need org information (from the proxy?)
+ var t = fetchOrgSettingDefault(1, 'circ.selfcheck.patron_login_timeout');
+ patronTimeout = (t) ? parseInt(t) * 1000 : patronTimeout;
+ */
+
+ if(!staff) {
+ // should not happen when behind the proxy
+ return alert('Staff must login');
+ }
+
+ unHideMe($('selfck-patron-login-container'));
+ $('selfck-patron-login-input').focus();
+
+ $('selfck-patron-login-input').onkeypress = function(evt) {
+ if(userPressedEnter(evt))
+ selfckPatronLogin();
+ };
+
+ $('selfck-item-barcode-input').onkeypress = function(evt) {
+ if(userPressedEnter(evt))
+ selfckCheckout();
+ };
+
+ // for debugging, allow passing the user barcode via param
+ var urlbc = new CGI().param('patron');
+ if(urlbc)
+ selfckPatronLogin(urlbc);
+
+ selfckStartTimer();
+
+ printWrapper = $('selfck-print-items-list');
+ printTemplate = printWrapper.removeChild($n(printWrapper, 'selfck-print-items-template'));
+ itemsOutTemplate = $('selfck-items-out-tbody').removeChild($('selfck-items-out-row'));
+
+// selfckMkDummyCirc(); // testing only
+}
+
+/*
+ * Start the logout timer
+ */
+function selfckStartTimer() {
+ timerId = setTimeout(
+ function() {
+ selfckLogoutPatron();
+ },
+ patronTimeout
+ );
+
+}
+
+/*
+ * Reset the logout timer
+ */
+function selfckResetTimer() {
+ clearTimeout(timerId);
+ selfckStartTimer();
+}
+
+/*
+ * Clears fields and "logs out" the patron by reloading the page
+ */
+function selfckLogoutPatron() {
+ $('selfck-item-barcode-input').value = ''; // prevent browser caching
+ $('selfck-patron-login-input').value = '';
+ if(patron) // page reload resets everything
+ location.href = location.href;
+}
+
+/*
+ * Fetches the user by barcode and displays the item barcode input
+ */
+
+function selfckPatronLogin(barcode) {
+ barcode = barcode || $('selfck-patron-login-input').value;
+ if(!barcode) return;
+
+ var bcReq = new Request(
+ 'open-ils.actor:open-ils.actor.user.fleshed.retrieve_by_barcode',
+ G.user.session, barcode);
+
+ bcReq.request.alertEvent = false;
+
+ bcReq.callback(function(r) {
+ patron = r.getResultObject();
+ if(checkILSEvent(patron)) {
+ if(patron.textcode == 'ACTOR_USER_NOT_FOUND') {
+ unHideMe($('selfck-patron-not-found'));
+ $('selfck-patron-login-input').select();
+ return;
+ }
+ return alert(patron.textcode);
+ }
+ $('selfck-patron-login-input').value = ''; // reset the input
+ hideMe($('selfck-patron-login-container'));
+ unHideMe($('selfck-patron-checkout-container'));
+ $('selfck-patron-name-span').appendChild(text(patron.usrname()));
+ $('selfck-item-barcode-input').focus();
+ });
+
+ bcReq.send();
+}
+
+/**
+ * Sends the checkout request
+ */
+function selfckCheckout() {
+ if(pendingXact) return;
+ selfckResetTimer();
+ pendingXact = true;
+ isRenewal = false;
+
+ removeChildren($('selfck-event-time'));
+ removeChildren($('selfck-event-span'));
+
+ itemBarcode = $('selfck-item-barcode-input').value;
+ if(!itemBarcode) return;
+
+ if (itemBarcode in successfulItems) {
+ selfckShowMsgNode({textcode:'dupe-barcode'});
+ $('selfck-item-barcode-input').select();
+ pendingXact = false;
+ return;
+ }
+
+ var coReq = new Request(
+ 'open-ils.circ:open-ils.circ.checkout.full',
+ G.user.session, {patron_id:patron.id(), copy_barcode:itemBarcode});
+
+ coReq.request.alertEvent = false;
+ coReq.callback(selfckHandleCoResult);
+ coReq.send();
+}
+
+/**
+ * Handles the resulting event. If the item is already checked out,
+ * attempts renewal. Any other events will display a message
+ */
+function selfckHandleCoResult(r) {
+ var evt = r.getResultObject();
+
+ if(evt.textcode == 'SUCCESS') {
+ selfckDislplayCheckout(evt);
+ selfckShowMsgNode(evt);
+ successfulItems[itemBarcode] = 1;
+
+ } else if(evt.textcode == 'OPEN_CIRCULATION_EXISTS') {
+ selfckRenew();
+
+ } else {
+ pendingXact = false;
+ selfckShowMsgNode(evt);
+ $('selfck-item-barcode-input').select();
+ }
+}
+
+/**
+ * Display event text in the messages block
+ */
+function selfckShowMsgNode(evt) {
+ var code = evt.textcode;
+ var msgspan = $('selfck-event-span');
+
+ // if we're not explicitly handling the event, just say "copy cannot circ"
+ if(!$('selfck-event-' + code))
+ code = 'COPY_CIRC_NOT_ALLOWED';
+
+ appendClear($('selfck-event-time'), text(new Date().toLocaleString()));
+ appendClear($('selfck-event-span'), text($('selfck-event-' + code).innerHTML));
+}
+
+/**
+ * Renders a row in the checkouts table for the current circulation
+ */
+function selfckDislplayCheckout(evt) {
+ unHideMe($('selfck-items-out-table'));
+
+ var template = itemsOutTemplate.cloneNode(true);
+ var copy = evt.payload.copy;
+ var record = evt.payload.record;
+ var circ = evt.payload.circ;
+
+ if(record.isbn()) {
+ var pic = $n(template, 'selfck.jacket');
+ pic.setAttribute('src', '../ac/jacket/small/'+cleanISBN(record.isbn()));
+ }
+ $n(template, 'selfck.barcode').appendChild(text(copy.barcode()));
+ $n(template, 'selfck.title').appendChild(text(record.title()));
+ $n(template, 'selfck.author').appendChild(text(record.author()));
+ $n(template, 'selfck.due_date').appendChild(text(circ.due_date().replace(/T.*/,'')));
+ $n(template, 'selfck.remaining').appendChild(text(circ.renewal_remaining()));
+ if(isRenewal) {
+ hideMe($n(template, 'selfck.cotype_co'));
+ unHideMe($n(template, 'selfck.cotype_rn'));
+ }
+
+ $('selfck-items-out-tbody').appendChild(template);
+ $('selfck-item-barcode-input').value = '';
+
+
+ // flesh out the printable version of the page as well
+ var ptemplate = printTemplate.cloneNode(true);
+ $n(ptemplate, 'title').appendChild(text(record.title()));
+ $n(ptemplate, 'barcode').appendChild(text(copy.barcode()));
+ $n(ptemplate, 'due_date').appendChild(text(circ.due_date().replace(/T.*/,'')));
+ printWrapper.appendChild(ptemplate);
+
+ pendingXact = false;
+}
+
+/**
+ * Checks to see if this item is checked out to the current patron. If so,
+ * this sends the renewal request.
+ */
+function selfckRenew() {
+
+ // first, make sure the item is checked out to this patron
+ var detailReq = new Request(
+ 'open-ils.circ:open-ils.circ.copy_details.retrieve.barcode',
+ G.user.session, itemBarcode);
+
+ detailReq.callback(
+ function(r) {
+ var details = r.getResultObject();
+ if(details.circ.usr() == patron.id()) {
+ // OK, this is our item, renew it
+ isRenewal = true;
+ var rnReq = new Request(
+ 'open-ils.circ:open-ils.circ.renew',
+ G.user.session, {copy_barcode:itemBarcode});
+ rnReq.request.alertEvent = false;
+ rnReq.callback(selfckHandleCoResult);
+ rnReq.send();
+ }
+ }
+ );
+
+ detailReq.send();
+}
+
+/**
+ * Sets the print date and prints the page
+ */
+function selfckPrint() {
+ appendClear($('selfck-print-date'), text(new Date().toLocaleString()));
+ window.print();
+}
+
+
+/**
+ * Test method for generating dummy data in the checkout tables
+ */
+function selfckMkDummyCirc() {
+ unHideMe($('selfck-items-out-table'));
+
+ var template = itemsOutTemplate.cloneNode(true);
+ $n(template, 'selfck.barcode').appendChild(text('123456789'));
+ $n(template, 'selfck.title').appendChild(text('Test Title'));
+ $n(template, 'selfck.author').appendChild(text('Test Author'));
+ $n(template, 'selfck.due_date').appendChild(text('2008-08-01'));
+ $n(template, 'selfck.remaining').appendChild(text('1'));
+ $('selfck-items-out-tbody').appendChild(template);
+
+ // flesh out the printable version of the page as well
+ var ptemplate = printTemplate.cloneNode(true);
+ $n(ptemplate, 'title').appendChild(text('Test Title'));
+ $n(ptemplate, 'barcode').appendChild(text('123456789'));
+ $n(ptemplate, 'due_date').appendChild(text('2008-08-01'));
+ printWrapper.appendChild(ptemplate);
+}
Added: branches/rel_1_2/Open-ILS/web/opac/extras/selfcheck/selfcheck.xml
===================================================================
--- branches/rel_1_2/Open-ILS/web/opac/extras/selfcheck/selfcheck.xml (rev 0)
+++ branches/rel_1_2/Open-ILS/web/opac/extras/selfcheck/selfcheck.xml 2008-07-30 17:03:48 UTC (rev 10187)
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- ***********************************************************************
+* Copyright (C) 2008 Equinox Software, Inc.
+* Bill Erickson <erickson at esilibrary.com>
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+* 02110-1301, USA
+************************************************************************ -->
+
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
+ <!--#include virtual="/opac/locale/${locale}/opac.dtd" -->
+]>
+
+<!--#include virtual="../../skin/default/xml/setenv.xml"-->
+
+<html xmlns='http://www.w3.org/1999/xhtml'>
+
+ <head>
+ <script>var config = {css:{}}</script>
+ <!--#include virtual="../../skin/default/xml/common/js_common.xml"-->
+ <script language='javascript' type='text/javascript'
+ src='<!--#echo var="OILS_OPAC_JS_HOST"-->/common/js/DP_DateExtensions.js'></script>
+ <script language='javascript' type='text/javascript'
+ src='<!--#echo var="OILS_OPAC_JS_HOST"-->/extras/selfcheck/selfcheck.js'></script>
+ <link type='text/css' rel='stylesheet' title='Regular'
+ href="<!--#echo var='OILS_OPAC_CSS_HOST'-->/extras/selfcheck/selfcheck.css"/>
+ <link type='text/css' rel='stylesheet' media='print'
+ href="<!--#echo var='OILS_OPAC_CSS_HOST'-->/extras/selfcheck/selfcheck_print.css"/>
+ <link type='text/css' rel='alternate stylesheet' title='Printable'
+ href="<!--#echo var='OILS_OPAC_CSS_HOST'-->/extras/selfcheck/selfcheck_print.css"/>
+ </head>
+
+ <body onload='selfckInit();'>
+
+ <div class='noprint'>
+
+ <!--***********************************************************************
+ Form for patron "login"
+ *********************************************************************** -->
+ <div id='selfck-patron-login-container' class='hide_me form_div'>
+ <span>&selfck.patron_barcode_label;</span>
+ <span><input type='text' id='selfck-patron-login-input'> </input></span>
+ <span><button onclick='selfckPatronLogin();'>&selfck.submit;</button></span>
+ <span id='selfck-patron-not-found' class='hide_me'>&selfck.event.patron_not_found;</span>
+ </div>
+
+ <!--***********************************************************************
+ Checkout form
+ *********************************************************************** -->
+ <div id='selfck-patron-checkout-container' class='hide_me'>
+
+ <!--***********************************************************************
+ Header
+ *********************************************************************** -->
+ <div id='selfck-logout-div' class='container'>
+ <div id='selfck-patron-info-div'>
+ <!-- not really i18n friendly, but better than nothing -->
+ &selfck.welcome; <span id='selfck-patron-name-span'></span>!
+ </div>
+ <div id='selfck-logout-link-div'>
+ <span class='selfck-link-span'>
+ <a href='javascript:void(0);' id='selfck-print-co-button'
+ onclick='selfckPrint();'>&selfck.print_checkouts;</a>
+ </span>
+ <span class='selfck-link-span'>
+ <a href='javascript:void(0);' id='selfck-logout-button'
+ onclick='selfckLogoutPatron();'>&selfck.logout;</a>
+ </span>
+ <span class='selfck-link-span'>
+ <a href='javascript:void(0);' id='selfck-logout-print-button'
+ onclick='selfckPrint(); selfckLogoutPatron();'>&selfck.print_logout;</a>
+ </span>
+ </div>
+ </div>
+
+ <!--***********************************************************************
+ Display messages here
+ *********************************************************************** -->
+ <div id='selfck-message-div' class='form_div'>
+ <span class='' id='selfck-event-time'></span>
+ <span class='biglabel' id='selfck-event-span'> </span>
+ <span class='hide_me'>
+ <span id='selfck-event-SUCCESS'>&selfck.event.co_success;</span>
+ <span id='selfck-event-UNKNOWN'>&selfck.event.unknown;</span>
+ <span id='selfck-event-ACTOR_USER_NOT_FOUND'>&selfck.event.patron_not_found;</span>
+ <span id='selfck-event-COPY_CIRC_NOT_ALLOWED'>&selfck.event.item_nocirc;</span>
+ <span id='selfck-event-ITEM_NOT_CATALOGED'>&selfck.event.item_noncat;</span>
+ <span id='selfck-event-dupe-barcode'>&selfck.event.dupe_barcode;</span>
+ </span>
+ </div>
+
+ <!--***********************************************************************
+ This is where patrons scan in the item barcodes
+ *********************************************************************** -->
+ <div id='selfck-item-barcode-form-div' class='form_div'>
+ <div>
+ <img src='../../../images/small_logo.jpg'/>
+ <div class='biglabel'>&selfck.item_barcode_label;</div>
+ <div id='selfck-item-barcode-form'>
+ <span><input type='text' id='selfck-item-barcode-input'> </input></span>
+ <span><button onclick='selfckCheckout();'>&selfck.submit;</button></span>
+ </div>
+ </div>
+ </div>
+
+ <!--***********************************************************************
+ This is where patrons scan in the item barcodes
+ *********************************************************************** -->
+ <table id='selfck-items-out-table' class='hide_me'>
+ <thead>
+ <tr>
+ <td id='selfck-pic-cell'></td>
+ <td>&selfck.barcode;</td>
+ <td>&selfck.title;</td>
+ <td>&selfck.author;</td>
+ <td>&selfck.due_date;</td>
+ <td>&selfck.remaining;</td>
+ <td>&selfck.cotype;</td>
+ </tr>
+ </thead>
+ <tbody id='selfck-items-out-tbody'>
+ <tr id='selfck-items-out-row'>
+ <td><img class='jacket' name='selfck.jacket'></img></td>
+ <td name='selfck.barcode'></td>
+ <td name='selfck.title'></td>
+ <td name='selfck.author'></td>
+ <td name='selfck.due_date'></td>
+ <td name='selfck.remaining'></td>
+ <td>
+ <span name='selfck.cotype_co'>&selfck.cotype_co;</span>
+ <span name='selfck.cotype_rn' class='hide_me'>&selfck.cotype_rn;</span>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+
+ <!--***********************************************************************
+ Generate the printable version of the checked out list here
+ *********************************************************************** -->
+ <div class='print' id='selfck-print-div'>
+ <div>
+ <div id='selfck-print-date'/>
+ You checked out the following items:
+ <ol id='selfck-print-items-list'>
+ <li name='selfck-print-items-template'>
+ <div name='title'/>
+ Barcode: <span name='barcode'/>
+ Due Date: <span name='due_date'/>
+ </li>
+ </ol>
+ </div>
+ </div>
+ </body>
+</html>
+
Added: branches/rel_1_2/Open-ILS/web/opac/extras/selfcheck/selfcheck_print.css
===================================================================
--- branches/rel_1_2/Open-ILS/web/opac/extras/selfcheck/selfcheck_print.css (rev 0)
+++ branches/rel_1_2/Open-ILS/web/opac/extras/selfcheck/selfcheck_print.css 2008-07-30 17:03:48 UTC (rev 10187)
@@ -0,0 +1,15 @@
+.noprint {
+ display: none;
+ visibility: hidden;
+}
+.print {
+ display: block;
+ visibility: visible;
+ width: 100%;
+ font-size: 10pt;
+ color: black;
+ font-family: Arial;
+ background-color: white;
+}
+
+
Modified: branches/rel_1_2/Open-ILS/web/opac/locale/en-US/opac.dtd
===================================================================
--- branches/rel_1_2/Open-ILS/web/opac/locale/en-US/opac.dtd 2008-07-30 13:57:27 UTC (rev 10186)
+++ branches/rel_1_2/Open-ILS/web/opac/locale/en-US/opac.dtd 2008-07-30 17:03:48 UTC (rev 10187)
@@ -636,3 +636,36 @@
<!ENTITY opac.image_provided "Image provided by">
<!ENTITY vendor.name "Amazon">
<!ENTITY vendor.base_link "http://amazon.com/dp/">
+
+
+
+<!-- =================================================================
+ Selfcheck
+ ================================================================= -->
+<!ENTITY selfck.staff_login_label "Staff login">
+<!ENTITY selfck.staff_login "Library barcode or username">
+<!ENTITY selfck.staff_pw "Password">
+<!ENTITY selfck.submit "Submit">
+<!ENTITY selfck.patron_barcode_label "Please scan your library barcode">
+<!ENTITY selfck.item_barcode_label "Please scan an item to checkout or renew:">
+<!ENTITY selfck.barcode "Barcode">
+<!ENTITY selfck.title "Title">
+<!ENTITY selfck.author "Author">
+<!ENTITY selfck.due_date "Due Date">
+<!ENTITY selfck.remaining "Renewals Remaining">
+<!ENTITY selfck.cotype "Type">
+<!ENTITY selfck.cotype_co "Checkout">
+<!ENTITY selfck.cotype_rn "Renewal">
+<!ENTITY selfck.logout "Logout">
+<!ENTITY selfck.print_logout "Print & Logout">
+<!ENTITY selfck.welcome "Welcome">
+
+<!-- event messages -->
+<!ENTITY selfck.event.co_success "Check out succeeded">
+<!ENTITY selfck.event.co_unknown "An unknown event has occurred">
+<!ENTITY selfck.event.dupe_barcode "This item has already been checked out during this session">
+<!ENTITY selfck.event.patron_not_found "The patron barcode was not found">
+<!ENTITY selfck.event.item_noncat "The requested item is not in the catalog">
+<!ENTITY selfck.event.item_nocirc "The requested item is not allowed to circulate">
+<!ENTITY selfck.print_checkouts "Print Receipt">
+
More information about the open-ils-commits
mailing list