From 163654bbf348a8a7551b06a086cb33a4ecc6290f Mon Sep 17 00:00:00 2001 From: erickson Date: Wed, 18 Nov 2009 21:03:57 +0000 Subject: [PATCH] implemented holds list and navigation links git-svn-id: svn://svn.open-ils.org/ILS/trunk@14958 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/web/css/skin/default/selfcheck.css | 30 ++-- .../web/js/dojo/openils/circ/nls/selfcheck.js | 4 +- .../js/ui/default/circ/selfcheck/selfcheck.js | 165 ++++++++++++++---- .../default/circ/selfcheck/circ_page.tt2 | 2 +- .../default/circ/selfcheck/holds_page.tt2 | 4 +- .../templates/default/circ/selfcheck/main.tt2 | 2 +- .../default/circ/selfcheck/summary.tt2 | 6 +- 7 files changed, 159 insertions(+), 54 deletions(-) diff --git a/Open-ILS/web/css/skin/default/selfcheck.css b/Open-ILS/web/css/skin/default/selfcheck.css index bde1d81db5..2df9216f23 100644 --- a/Open-ILS/web/css/skin/default/selfcheck.css +++ b/Open-ILS/web/css/skin/default/selfcheck.css @@ -41,19 +41,29 @@ body { border: none; } -#oils-selfck-circ-table { +.oils-selfck-item-table { width: 98%; margin-top: 15px; } -#oils-selfck-circ-table td { - text-align: center; +.oils-selfck-item-table td { + text-align: left; + padding: 10px; } -#oils-selfck-circ-table thead { +.oils-selfck-item-table thead { font-weight: bold; } +.oils-selfck-item-table tbody tr { + border-bottom: 1px solid #888; +} + +.oils-selfck-item-table tbody td { + padding:10px; +} + + #oils-selfck-content-div { width: 70%; position: float; @@ -73,9 +83,14 @@ body { } #oils-selfck-info-nav span { + padding-left: 10px; padding-right: 10px; } +#oils-selfck-info-nav span.selected { + background-color: #e0e0e0; +} + #oils-selfck-circ-info-div fieldset { margin: 15px 10px 15px 10px; padding: 8px; @@ -91,11 +106,4 @@ body { padding: 3px; } -#oils-selfck-circ-tbody tr { - border-bottom: 1px solid #888; -} - -#oils-selfck-circ-tbody td { - padding:10px; -} diff --git a/Open-ILS/web/js/dojo/openils/circ/nls/selfcheck.js b/Open-ILS/web/js/dojo/openils/circ/nls/selfcheck.js index 53aab3871c..8b426a8d2a 100644 --- a/Open-ILS/web/js/dojo/openils/circ/nls/selfcheck.js +++ b/Open-ILS/web/js/dojo/openils/circ/nls/selfcheck.js @@ -3,6 +3,8 @@ 'TOTAL_ITEMS_ACCOUNT' : "Total items on account: ${0}.", 'HOLDS_READY_FOR_PICKUP' : "You have ${0} item(s) ready for pickup.", 'TOTAL_HOLDS' : "You have ${0} total holds.", - 'TOTAL_FINES_ACCOUNT' : "Total fines on account: $${0}." + 'TOTAL_FINES_ACCOUNT' : "Total fines on account: $${0}.", + 'HOLD_STATUS_READY' : 'Ready for pickup', + 'HOLD_STATUS_WAITING' : '#${0} in line with ${1} copies' } diff --git a/Open-ILS/web/js/ui/default/circ/selfcheck/selfcheck.js b/Open-ILS/web/js/ui/default/circ/selfcheck/selfcheck.js index 4ac16d30c5..64ac970a62 100644 --- a/Open-ILS/web/js/ui/default/circ/selfcheck/selfcheck.js +++ b/Open-ILS/web/js/ui/default/circ/selfcheck/selfcheck.js @@ -4,6 +4,7 @@ dojo.require('openils.CGI'); dojo.require('openils.Util'); dojo.require('openils.User'); dojo.require('openils.Event'); +dojo.require('openils.widget.ProgressDialog'); dojo.requireLocalization('openils.circ', 'selfcheck'); var localeStrings = dojo.i18n.getLocalization('openils.circ', 'selfcheck'); @@ -37,23 +38,26 @@ function SelfCheckManager() { // dict of org unit settings for "here" this.orgSettings = {}; - + // Construct a mock checkout for debugging purposes - this.mockCheckout = { - payload : { - record : new fieldmapper.mvr(), - copy : new fieldmapper.acp(), - circ : new fieldmapper.circ() - } - }; + if(this.mockCheckouts = this.cgi.param('mock-circ')) { + + this.mockCheckout = { + payload : { + record : new fieldmapper.mvr(), + copy : new fieldmapper.acp(), + circ : new fieldmapper.circ() + } + }; - this.mockCheckout.payload.record.title('Jazz improvisation for guitar'); - this.mockCheckout.payload.record.author('Wise, Les'); - this.mockCheckout.payload.record.isbn('0634033565'); - this.mockCheckout.payload.copy.barcode('123456789'); - this.mockCheckout.payload.circ.renewal_remaining(1); - this.mockCheckout.payload.circ.parent_circ(1); - this.mockCheckout.payload.circ.due_date('2012-12-21'); + this.mockCheckout.payload.record.title('Jazz improvisation for guitar'); + this.mockCheckout.payload.record.author('Wise, Les'); + this.mockCheckout.payload.record.isbn('0634033565'); + this.mockCheckout.payload.copy.barcode('123456789'); + this.mockCheckout.payload.circ.renewal_remaining(1); + this.mockCheckout.payload.circ.parent_circ(1); + this.mockCheckout.payload.circ.due_date('2012-12-21'); + } } @@ -68,20 +72,20 @@ SelfCheckManager.prototype.init = function() { this.authtoken = openils.User.authtoken; this.loadOrgSettings(); - // add onclick handlers for nav links - + var self = this; - dojo.connect( - dojo.byId('oils-selfck-hold-details-link'), - 'onclick', - function() { self.drawHoldsPage(); } - ); + // connect onclick handlers to the various navigation links + var linkHandlers = { + 'oils-selfck-hold-details-link' : function() { self.drawHoldsPage(); }, + 'oils-selfck-nav-holds' : function() { self.drawHoldsPage(); }, + 'oils-selfck-pay-fines-link' : function() { self.drawFinesPage(); }, + 'oils-selfck-nav-fines' : function() { self.drawFinesPage(); }, + 'oils-selfck-nav-home' : function() { self.drawCircPage(); }, + 'oils-selfck-nav-logout' : function() { self.logoutPatron(); } + } - dojo.connect( - dojo.byId('oils-selfck-pay-fines-link'), - 'onclick', - function() { self.drawPayFinesPage(); } - ); + for(var id in linkHandlers) + dojo.connect(dojo.byId(id), 'onclick', linkHandlers[id]); if(this.cgi.param('patron')) { @@ -241,6 +245,8 @@ SelfCheckManager.prototype.drawCircPage = function() { handler : function(barcode) { self.checkout(barcode); } }); + openils.Util.hide('oils-selfck-payment-page'); + openils.Util.hide('oils-selfck-holds-page'); openils.Util.show('oils-selfck-circ-page'); this.circTbody = dojo.byId('oils-selfck-circ-tbody'); @@ -272,7 +278,7 @@ SelfCheckManager.prototype.drawCircPage = function() { this.updateCircSummary(); // render mock checkouts for debugging? - if(this.cgi.param('mock-circ')) { + if(this.mockCheckouts) { for(var i in [1,2,3]) this.displayCheckout(this.mockCheckout); } @@ -355,8 +361,86 @@ SelfCheckManager.prototype.drawHoldsPage = function() { openils.Util.hide('oils-selfck-circ-page'); openils.Util.hide('oils-selfck-payment-page'); openils.Util.show('oils-selfck-holds-page'); + + this.holdTbody = dojo.byId('oils-selfck-hold-tbody'); + if(!this.holdTemplate) + this.holdTemplate = this.holdTbody.removeChild(dojo.byId('oils-selfck-hold-row')); + while(this.holdTbody.childNodes[0]) + this.holdTbody.removeChild(this.holdTbody.childNodes[0]); + + progressDialog.show(true); + + var self = this; + fieldmapper.standardRequest( // fetch the hold IDs + ['open-ils.circ', 'open-ils.circ.holds.id_list.retrieve'], + { async : true, + params : [this.authtoken, this.patron.id()], + + oncomplete : function(r) { + var ids = openils.Util.readResponse(r); + if(!ids || ids.length == 0) return; + + fieldmapper.standardRequest( // fetch the hold objects with fleshed details + ['open-ils.circ', 'open-ils.circ.hold.details.batch.retrieve.atomic'], + { async : true, + params : [self.authtoken, ids], + oncomplete : function(rr) { + self.drawHolds(openils.Util.readResponse(rr)); + } + } + ); + } + } + ); } +/** + * Fetch and add a single hold to the list of holds + */ +SelfCheckManager.prototype.drawHolds = function(holds) { + + holds = holds.sort( + // sort available holds to the top of the list + // followed by queue position order + function(a, b) { + if(a.status == 4) return -1; + if(a.queue_position < b.queue_position) return -1; + return 1; + } + ); + + progressDialog.hide(); + + for(var i in holds) { + + var data = holds[i]; + var row = this.holdTemplate.cloneNode(true); + + if(data.mvr.isbn()) { + this.byName(row, 'jacket').setAttribute('src', '/opac/extras/ac/jacket/small/' + data.mvr.isbn()); + } + + this.byName(row, 'title').innerHTML = data.mvr.title(); + this.byName(row, 'author').innerHTML = data.mvr.author(); + + if(data.status == 4) { + + // hold is ready for pickup + this.byName(row, 'status').innerHTML = localeStrings.HOLD_STATUS_READY; + + } else { + + // hold is still pending + this.byName(row, 'status').innerHTML = + dojo.string.substitute( + localeStrings.HOLD_STATUS_WAITING, + [data.queue_position, data.potential_copies] + ); + } + + this.holdTbody.appendChild(row); + } +} @@ -371,6 +455,13 @@ SelfCheckManager.prototype.checkout = function(barcode, override) { return; } + if(this.mockCheckouts) { + // if we're in mock-checkout mode, just insert another + // fake circ into the table and get out of here. + this.displayCheckout(this.mockCheckout); + return; + } + // TODO see if it's a patron barcode // TODO see if this item has already been checked out in this session @@ -443,7 +534,8 @@ SelfCheckManager.prototype.displayCheckout = function(evt) { this.byName(row, 'due_date').innerHTML = dojo.date.locale.format(date, {selector : 'date'}); - this.circTbody.appendChild(row); + // put new circs at the top of the list + this.circTbody.insertBefore(row, this.circTbody.getElementsByTagName('tr')[0]); } @@ -451,16 +543,19 @@ SelfCheckManager.prototype.byName = function(node, name) { return dojo.query('[name=' + name+']', node)[0]; } -/** - * Print a receipt - */ -SelfCheckManager.prototype.printReceipt = function() { + +SelfCheckManager.prototype.drawFinesPage = function() { + + openils.Util.hide('oils-selfck-circ-page'); + openils.Util.hide('oils-selfck-holds-page'); + openils.Util.show('oils-selfck-payment-page'); + } /** - * Build the patron holds table + * Print a receipt */ -SelfCheckManager.prototype.displayHolds = function() { +SelfCheckManager.prototype.printReceipt = function() { } diff --git a/Open-ILS/web/templates/default/circ/selfcheck/circ_page.tt2 b/Open-ILS/web/templates/default/circ/selfcheck/circ_page.tt2 index 8a9ea67b2b..33837b9942 100644 --- a/Open-ILS/web/templates/default/circ/selfcheck/circ_page.tt2 +++ b/Open-ILS/web/templates/default/circ/selfcheck/circ_page.tt2 @@ -1,5 +1,5 @@
- +
diff --git a/Open-ILS/web/templates/default/circ/selfcheck/holds_page.tt2 b/Open-ILS/web/templates/default/circ/selfcheck/holds_page.tt2 index 5be3a19e85..c6af5afd49 100644 --- a/Open-ILS/web/templates/default/circ/selfcheck/holds_page.tt2 +++ b/Open-ILS/web/templates/default/circ/selfcheck/holds_page.tt2 @@ -1,12 +1,11 @@
-
+
- @@ -15,7 +14,6 @@ -
Title Author StatusType
diff --git a/Open-ILS/web/templates/default/circ/selfcheck/main.tt2 b/Open-ILS/web/templates/default/circ/selfcheck/main.tt2 index 14a7fb41fb..585bf89d0e 100644 --- a/Open-ILS/web/templates/default/circ/selfcheck/main.tt2 +++ b/Open-ILS/web/templates/default/circ/selfcheck/main.tt2 @@ -31,7 +31,7 @@ [% INCLUDE 'default/circ/selfcheck/summary.tt2' %]
- +
[% END %] diff --git a/Open-ILS/web/templates/default/circ/selfcheck/summary.tt2 b/Open-ILS/web/templates/default/circ/selfcheck/summary.tt2 index 536c0722a0..b69cf8e62b 100644 --- a/Open-ILS/web/templates/default/circ/selfcheck/summary.tt2 +++ b/Open-ILS/web/templates/default/circ/selfcheck/summary.tt2 @@ -1,7 +1,9 @@
Items Checked Out -- 2.43.2