}
__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,
install_date TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
);
-INSERT INTO config.upgrade_log (version) VALUES ('0383'); -- phasefx
+INSERT INTO config.upgrade_log (version) VALUES ('0384'); -- berick
CREATE TABLE config.bib_source (
id SERIAL PRIMARY KEY,
'bool'
);
+-- 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 -%]
+<style>
+ table { border-collapse: collapse; }
+ td { padding: 5px; border-bottom: 1px solid #888; }
+ th { font-weight: bold; }
+</style>
+[%
+ # 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)
+%]
+<table>
+ <thead>
+ <tr>
+ <th>Title</th>
+ <th>Author</th>
+ <th>Shelving Location</th>
+ <th>Call Number</th>
+ <th>Barcode</th>
+ <th>Patron</th>
+ </tr>
+ </thead>
+ <tbody>
+ [% 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);
+ %]
+ <tr>
+ <td>[% copy_data.title | truncate %]</td>
+ <td>[% copy_data.author | truncate %]</td>
+ <td>[% hold.current_copy.location.name %]</td>
+ <td>[% hold.current_copy.call_number.label %]</td>
+ <td>[% hold.current_copy.barcode %]</td>
+ <td>[% hold.usr.card.barcode %]</td>
+ </tr>
+ [% END %]
+ [% END %]
+ <tbody>
+</table>
+$$
+);
+
+INSERT INTO action_trigger.environment (
+ event_def,
+ path
+ ) VALUES
+ (35, 'current_copy.location'),
+ (35, 'current_copy.call_number'),
+ (35, 'usr.card'),
+ (35, 'pickup_lib')
+;
--- /dev/null
+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 -%]
+<style>
+ table { border-collapse: collapse; }
+ td { padding: 5px; border-bottom: 1px solid #888; }
+ th { font-weight: bold; }
+</style>
+[%
+ # 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)
+%]
+<table>
+ <thead>
+ <tr>
+ <th>Title</th>
+ <th>Author</th>
+ <th>Shelving Location</th>
+ <th>Call Number</th>
+ <th>Barcode</th>
+ <th>Patron</th>
+ </tr>
+ </thead>
+ <tbody>
+ [% 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);
+ %]
+ <tr>
+ <td>[% copy_data.title | truncate %]</td>
+ <td>[% copy_data.author | truncate %]</td>
+ <td>[% hold.current_copy.location.name %]</td>
+ <td>[% hold.current_copy.call_number.label %]</td>
+ <td>[% hold.current_copy.barcode %]</td>
+ <td>[% hold.usr.card.barcode %]</td>
+ </tr>
+ [% END %]
+ [% END %]
+ <tbody>
+</table>
+$$
+);
+
+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;
+