From e88ae53bb3ca042bc3e13f96d26c52b292e2a7f1 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Wed, 18 Sep 2013 14:45:08 -0400 Subject: [PATCH] checkout Signed-off-by: Bill Erickson --- env.js | 4 +-- org.js | 7 +++-- patron.html | 50 +++++++++++++++++++++++++++++------- patron_checkout.js | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ patron_search.js | 37 +++++++++++++++++++++++++++ 5 files changed, 158 insertions(+), 15 deletions(-) create mode 100644 patron_checkout.js diff --git a/env.js b/env.js index 664674d66..fa27be16a 100644 --- a/env.js +++ b/env.js @@ -50,7 +50,7 @@ function BatchFetcher() { map : {} }; function d(node) { - cache.aou.map[node.id()] = node; + cache.aou.map[Number(node.id())] = node; dojo.forEach(node.children(), function(c) { d(c) }); } d(cache.aou.tree); @@ -71,7 +71,7 @@ function BatchFetcher() { var grps = r.recv().content(); cache.pgt = {map : {}}; dojo.forEach(grps, function(grp) { - cache.pgt.map[grp.id()] = grp; + cache.pgt.map[Number(grp.id())] = grp; }); self.onload_handler(); } diff --git a/org.js b/org.js index f0dd383e3..140c54658 100644 --- a/org.js +++ b/org.js @@ -2,10 +2,9 @@ // org mangling code here function get_org_unit(node_or_id) { - return - (typeof node_or_id == 'object') ? - node_or_id : - cache.aou.map[node_or_id]; + if (typeof node_or_id == 'object') + return node_or_id; + return cache.aou.map[Number(node_or_id)]; } function org_unit_ancestors(node_or_id) { diff --git a/patron.html b/patron.html index f9ad10771..07f1ec838 100644 --- a/patron.html +++ b/patron.html @@ -7,6 +7,10 @@ .hidden { display: none } #container { width: 100% } #search-results td { padding: 5px; } + #search-results tbody > tr:hover {background: #EEF; } + #retrieve { float: left; } + #patron { float: left; } + #patron-summary { float: right; } @@ -56,7 +60,7 @@ ${id} - ${name} + ${name} ${card} ${profile} ${dob} @@ -66,9 +70,6 @@ @@ -100,5 +131,6 @@ + diff --git a/patron_checkout.js b/patron_checkout.js new file mode 100644 index 000000000..3ec9f7f5e --- /dev/null +++ b/patron_checkout.js @@ -0,0 +1,75 @@ + +var items_out_container; +var items_out_template; + +function show_patron_checkout_ui(user) { + dojo.removeClass(dojo.byId('patron'), 'hidden'); + dojo.addClass(dojo.byId('retrieve'), 'hidden'); + + if (items_out_container) { + dojo.empty(items_out_container); + } else { + items_out_container = dojo.byId('patron_checkout_container'); + console.log(items_out_container.innerHTML); + items_out_template = items_out_container.removeChild( + dojo.byId('patron_checkout_response_template')); + } + + var barcode_input = dojo.byId('checkout_barcode_input'); + barcode_input.focus(); + barcode_input.onchange = function() { + perform_checkout(user); + return false; + } +} + +function perform_checkout(user) { + var barcode_input = dojo.byId('checkout_barcode_input'); + var copy_barcode = barcode_input.value; + if (!copy_barcode) return; + barcode_input.value = ''; + + var row = items_out_template.cloneNode(true); + items_out_container.insertBefore(row, items_out_container.childNodes[0]); + + /* + nodeByName('index', row).innerHTML = + checkoutTbody.getElementsByTagName('tr').length; + */ + + var ses = new OpenSRF.ClientSession('open-ils.circ'); + ses.request({ + async : true, + method : 'open-ils.circ.checkout.full', + params : [cache.authtoken, {patron_id : user.id(), copy_barcode : copy_barcode}], + oncomplete : function(r) { + var blob = r.recv().content(); + if (dojo.isArray(blob)) blob = blob[0]; + + var args = { + barcode : copy_barcode, + response : blob.textcode + } + + var payload = blob.payload; + if (payload) { + if (payload.record) { + // mvr.. wheee. display attrs, anyone? + args.title = payload.record.title(); + args.author = payload.record.author(); + } + + if (payload.circ) { + var due = dojo.date.stamp.fromISOString(payload.circ.due_date()); + args.due_date = dojo.date.locale.format(due); + } + } + + row.innerHTML = + dojo.string.substitute( + row.innerHTML, + args, function (v) { if (!v) return ''; return v; }); + dojo.removeClass(row, 'hidden'); + } + }).send(); +} diff --git a/patron_search.js b/patron_search.js index ed828fa10..f7c3b4638 100644 --- a/patron_search.js +++ b/patron_search.js @@ -139,5 +139,42 @@ function display_psearch_result(row, user, index) { row.innerHTML = dojo.string.substitute(row.innerHTML, args, function (v) { if (!v) return ''; return v; } ); + + row.onclick = function(evt) { + show_patron_summary(user); + } + + dojo.query('[name=name]', row)[0].onclick = function() { + show_patron_checkout_ui(user); + } +} + +function show_patron_summary(user) { + + var args = { + name : user.first_given_name() + ' ' + user.family_name(), // i18n + card : user.card() ? user.card().barcode() : '', + profile : cache.pgt.map[user.profile()].name(), + home_ou : get_org_unit(user.home_ou()).shortname(), + create_date : dojo.date.locale.format( + dojo.date.stamp.fromISOString(user.create_date()), + {selector : 'date'}), + expire_date : dojo.date.locale.format( + dojo.date.stamp.fromISOString(user.expire_date()), + {selector : 'date'}), + items_out : 0, // TODO + items_od : 0, + money_owed : 0, + detail_holds : 0 + }; + + var container = dojo.byId('patron-summary-container'); + var template = dojo.byId('patron-summary-template'); + + dojo.removeClass(dojo.byId('patron-summary'), 'hidden'); + container.innerHTML = + dojo.string.substitute( + template.innerHTML, + args, function (v) { if (!v) return ''; return v; }); } -- 2.11.0