From: phasefx Date: Fri, 3 Sep 2010 00:10:48 +0000 (+0000) Subject: backport 17445, 17464: A/T template based full pull list printing for holds X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=56d75866566357ac6483276be8e8523a36dbd217;p=working%2FEvergreen.git backport 17445, 17464: A/T template based full pull list printing for holds git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_2_0@17465 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Circ/Holds.pm b/Open-ILS/src/perlmods/OpenILS/Application/Circ/Holds.pm index 7a75ee9136..4333f4c1a7 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Circ/Holds.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Circ/Holds.pm @@ -1284,6 +1284,46 @@ sub hold_pull_list { } __PACKAGE__->register_method( + method => "print_hold_pull_list", + api_name => "open-ils.circ.hold_pull_list.print", + signature => { + desc => 'Returns an HTML-formatted holds pull list', + params => [ + { desc => 'Authtoken', type => 'string'}, + { desc => 'Org unit ID. Optional, defaults to workstation org unit', type => 'number'}, + ], + return => { + desc => 'HTML string', + type => 'string' + } + } +); + +sub print_hold_pull_list { + my($self, $client, $auth, $org_id) = @_; + + my $e = new_editor(authtoken=>$auth, xact=>1); + return $e->die_event unless $e->checkauth; + + $org_id = (defined $org_id) ? $org_id : $e->requestor->ws_ou; + return $e->die_event unless $e->allowed('VIEW_HOLD', $org_id); + + my $hold_ids = $U->storagereq( + 'open-ils.storage.direct.action.hold_request.pull_list.id_list.current_copy_circ_lib.status_filtered.atomic', + $org_id, 10000); + + return undef unless @$hold_ids; + $client->status(new OpenSRF::DomainObject::oilsContinueStatus); + + my $holds = $e->search_action_hold_request({id => $hold_ids}, {substream => 1}); + $client->status(new OpenSRF::DomainObject::oilsContinueStatus); + + return $U->fire_object_event(undef, 'ahr.format.pull_list', $holds, $org_id); +} + + + +__PACKAGE__->register_method( method => 'fetch_hold_notify', api_name => 'open-ils.circ.hold_notification.retrieve_by_hold', authoritative => 1, diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql index 8d57dbdb8c..327ee54bd8 100644 --- a/Open-ILS/src/sql/Pg/002.schema.config.sql +++ b/Open-ILS/src/sql/Pg/002.schema.config.sql @@ -68,7 +68,7 @@ CREATE TABLE config.upgrade_log ( install_date TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() ); -INSERT INTO config.upgrade_log (version) VALUES ('0381'); -- dbs +INSERT INTO config.upgrade_log (version) VALUES ('0384'); -- berick CREATE TABLE config.bib_source ( id SERIAL PRIMARY KEY, diff --git a/Open-ILS/src/sql/Pg/950.data.seed-values.sql b/Open-ILS/src/sql/Pg/950.data.seed-values.sql index 384b341aa2..bf26eea006 100644 --- a/Open-ILS/src/sql/Pg/950.data.seed-values.sql +++ b/Open-ILS/src/sql/Pg/950.data.seed-values.sql @@ -6715,4 +6715,108 @@ INSERT INTO actor.org_unit_setting (org_unit, name, value) VALUES ,(1, 'cat.label.font.weight', '"normal"') ; +-- 0384.data.hold_pull_list_template.sql +INSERT INTO action_trigger.hook (key,core_type,description,passive) + VALUES ( + 'ahr.format.pull_list', + 'ahr', + oils_i18n_gettext( + 'ahr.format.pull_list', + 'Format holds pull list for printing', + 'ath', + 'description' + ), + FALSE + ); + +INSERT INTO action_trigger.event_definition ( + id, + active, + owner, + name, + hook, + validator, + reactor, + group_field, + granularity, + template + ) VALUES ( + 35, + TRUE, + 1, + 'Holds Pull List', + 'ahr.format.pull_list', + 'NOOP_True', + 'ProcessTemplate', + 'pickup_lib', + 'print-on-demand', +$$ +[%- USE date -%] + +[% + # Sort the holds into copy-location buckets + # In the main print loop, sort each bucket by callnumber before printing + SET holds_list = []; + SET loc_data = []; + SET current_location = target.0.current_copy.location.id; + FOR hold IN target; + IF current_location != hold.current_copy.location.id; + SET current_location = hold.current_copy.location.id; + holds_list.push(loc_data); + SET loc_data = []; + END; + SET hold_data = { + 'hold' => hold, + 'callnumber' => hold.current_copy.call_number.label + }; + loc_data.push(hold_data); + END; + holds_list.push(loc_data) +%] + + + + + + + + + + + + + [% FOR loc_data IN holds_list %] + [% FOR hold_data IN loc_data.sort('callnumber') %] + [% + SET hold = hold_data.hold; + SET copy_data = helpers.get_copy_bib_basics(hold.current_copy.id); + %] + + + + + + + + + [% END %] + [% END %] + +
TitleAuthorShelving LocationCall NumberBarcodePatron
[% copy_data.title | truncate %][% copy_data.author | truncate %][% hold.current_copy.location.name %][% hold.current_copy.call_number.label %][% hold.current_copy.barcode %][% hold.usr.card.barcode %]
+$$ +); + +INSERT INTO action_trigger.environment ( + event_def, + path + ) VALUES + (35, 'current_copy.location'), + (35, 'current_copy.call_number'), + (35, 'usr.card'), + (35, 'pickup_lib') +; diff --git a/Open-ILS/src/sql/Pg/upgrade/0384.data.hold_pull_list_template.sql b/Open-ILS/src/sql/Pg/upgrade/0384.data.hold_pull_list_template.sql new file mode 100644 index 0000000000..bd38a28393 --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/0384.data.hold_pull_list_template.sql @@ -0,0 +1,112 @@ +BEGIN; + +INSERT INTO config.upgrade_log (version) VALUES ('0384'); + +INSERT INTO action_trigger.hook (key,core_type,description,passive) + VALUES ( + 'ahr.format.pull_list', + 'ahr', + oils_i18n_gettext( + 'ahr.format.pull_list', + 'Format holds pull list for printing', + 'ath', + 'description' + ), + FALSE + ); + +INSERT INTO action_trigger.event_definition ( + id, + active, + owner, + name, + hook, + validator, + reactor, + group_field, + granularity, + template + ) VALUES ( + 35, + TRUE, + 1, + 'Holds Pull List', + 'ahr.format.pull_list', + 'NOOP_True', + 'ProcessTemplate', + 'pickup_lib', + 'print-on-demand', +$$ +[%- USE date -%] + +[% + # Sort the holds into copy-location buckets + # In the main print loop, sort each bucket by callnumber before printing + SET holds_list = []; + SET loc_data = []; + SET current_location = target.0.current_copy.location.id; + FOR hold IN target; + IF current_location != hold.current_copy.location.id; + SET current_location = hold.current_copy.location.id; + holds_list.push(loc_data); + SET loc_data = []; + END; + SET hold_data = { + 'hold' => hold, + 'callnumber' => hold.current_copy.call_number.label + }; + loc_data.push(hold_data); + END; + holds_list.push(loc_data) +%] + + + + + + + + + + + + + [% FOR loc_data IN holds_list %] + [% FOR hold_data IN loc_data.sort('callnumber') %] + [% + SET hold = hold_data.hold; + SET copy_data = helpers.get_copy_bib_basics(hold.current_copy.id); + %] + + + + + + + + + [% END %] + [% END %] + +
TitleAuthorShelving LocationCall NumberBarcodePatron
[% copy_data.title | truncate %][% copy_data.author | truncate %][% hold.current_copy.location.name %][% hold.current_copy.call_number.label %][% hold.current_copy.barcode %][% hold.usr.card.barcode %]
+$$ +); + +INSERT INTO action_trigger.environment ( + event_def, + path + ) VALUES + (35, 'current_copy.location'), + (35, 'current_copy.call_number'), + (35, 'usr.card'), + (35, 'pickup_lib') +; + +-- DELETE FROM config.upgrade_log WHERE version = 'tmp'; DELETE FROM action_trigger.event WHERE event_def IN (35); DELETE FROM action_trigger.environment WHERE event_def IN (35); DELETE FROM action_trigger.event_definition WHERE id IN (35); DELETE FROM action_trigger.hook WHERE key IN ( 'ahr.format.pull_list' ); + +COMMIT; + diff --git a/Open-ILS/web/opac/locale/en-US/lang.dtd b/Open-ILS/web/opac/locale/en-US/lang.dtd index 9c0eda646d..ecd51715d9 100644 --- a/Open-ILS/web/opac/locale/en-US/lang.dtd +++ b/Open-ILS/web/opac/locale/en-US/lang.dtd @@ -2973,6 +2973,8 @@ + + diff --git a/Open-ILS/xul/staff_client/chrome/content/main/constants.js b/Open-ILS/xul/staff_client/chrome/content/main/constants.js index 38d096cfe7..102592083b 100644 --- a/Open-ILS/xul/staff_client/chrome/content/main/constants.js +++ b/Open-ILS/xul/staff_client/chrome/content/main/constants.js @@ -126,6 +126,7 @@ var api = { 'FM_AHR_PULL_LIST' : { 'app' : 'open-ils.circ', 'method' : 'open-ils.circ.hold_pull_list.retrieve' }, 'FM_AHR_PULL_LIST_COUNT' : { 'app' : 'open-ils.circ', 'method' : 'open-ils.circ.hold_pull_list.retrieve.count' }, 'FM_AHR_ID_LIST_PULL_LIST' : { 'app' : 'open-ils.circ', 'method' : 'open-ils.circ.hold_pull_list.id_list.retrieve', 'secure' : false }, + 'HTML_HOLD_PULL_LIST' : { 'app' : 'open-ils.circ', 'method' : 'open-ils.circ.hold_pull_list.print' }, 'FM_AHR_ONSHELF_RETRIEVE' : { 'app' : 'open-ils.circ', 'method' : 'open-ils.circ.captured_holds.on_shelf.retrieve' }, 'FM_AHR_ID_LIST_ONSHELF_RETRIEVE' : { 'app' : 'open-ils.circ', 'method' : 'open-ils.circ.captured_holds.id_list.on_shelf.retrieve', 'secure' : false }, 'FM_AHR_ID_LIST_EXPIRED_ONSHELF_RETRIEVE' : { 'app' : 'open-ils.circ', 'method' : 'open-ils.circ.captured_holds.id_list.expired_on_shelf.retrieve', 'secure' : false }, diff --git a/Open-ILS/xul/staff_client/server/patron/holds.js b/Open-ILS/xul/staff_client/server/patron/holds.js index cfae61efb6..cc7b15a072 100644 --- a/Open-ILS/xul/staff_client/server/patron/holds.js +++ b/Open-ILS/xul/staff_client/server/patron/holds.js @@ -289,7 +289,31 @@ patron.holds.prototype = { ); } ], - + 'cmd_holds_print_full' : [ + ['command'], + function() { + var x_print_full_pull_list = document.getElementById('print_full_btn'); + try { + if (progressmeter) { + progressmeter.mode = 'undetermined'; + progressmeter.hidden = false; + x_print_full_pull_list.disabled = true; + } + JSAN.use('util.print'); + var print = new util.print('default'); + var robj = obj.network.simple_request('HTML_HOLD_PULL_LIST',[ses()]); + if (typeof robj.ilsevent != 'undefined') { throw(robj); } + print.simple( robj.template_output().data() ); + } catch(E) { + obj.error.standard_unexpected_error_alert('cmd_holds_print_full',E); + } + if (progressmeter) { + progressmeter.mode = 'determined'; + progressmeter.hidden = true; + x_print_full_pull_list.disabled = false; + } + } + ], 'cmd_holds_print' : [ ['command'], function() { @@ -1259,6 +1283,7 @@ patron.holds.prototype = { var x_show_cancelled_deck = document.getElementById('show_cancelled_deck'); var x_clear_shelf_widgets = document.getElementById('clear_shelf_widgets'); var x_expired_checkbox = document.getElementById('expired_checkbox'); + var x_print_full_pull_list = document.getElementById('print_full_btn'); switch(obj.hold_interface_type) { case 'shelf': obj.render_lib_menus({'pickup_lib':true}); @@ -1269,6 +1294,7 @@ patron.holds.prototype = { break; case 'pull' : if (x_fetch_more) x_fetch_more.hidden = false; + if (x_print_full_pull_list) x_print_full_pull_list.hidden = false; if (x_lib_type_menu) x_lib_type_menu.hidden = true; if (x_lib_menu_placeholder) x_lib_menu_placeholder.hidden = true; break; diff --git a/Open-ILS/xul/staff_client/server/patron/holds_overlay.xul b/Open-ILS/xul/staff_client/server/patron/holds_overlay.xul index e0f3ee090f..106501cf9a 100644 --- a/Open-ILS/xul/staff_client/server/patron/holds_overlay.xul +++ b/Open-ILS/xul/staff_client/server/patron/holds_overlay.xul @@ -18,6 +18,7 @@ + @@ -186,6 +187,7 @@