From: Bill Erickson Date: Fri, 4 Sep 2020 20:15:28 +0000 (-0400) Subject: patron info items out list X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=81dca5172ae8b5089266779d77ca0b1d71c6f204;p=working%2FEvergreen.git patron info items out list Signed-off-by: Bill Erickson --- diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/SIP2.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/SIP2.pm index cc33dcc114..813fe0cd3d 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/SIP2.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/SIP2.pm @@ -209,8 +209,8 @@ sub handle_patron_info { summary_list_items => $list_items ); - my $response = patron_response_common_data( - $session, $barcode, $password, $pdetails); + my $response = + patron_response_common_data($session, $barcode, $password, $pdetails); $response->{code} = '64'; @@ -237,6 +237,10 @@ sub handle_patron_info { for my $hold (@{$pdetails->{hold_items}}) { push(@{$response->{fields}}, {AS => $hold}); } + } elsif ($list_items eq 'charged_items') { + for my $item (@{$pdetails->{items_out}}) { + push(@{$response->{fields}}, {AU => $item}); + } } return $response; diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/SIP2/Patron.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/SIP2/Patron.pm index 6c83da0204..30b8618e46 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/SIP2/Patron.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/SIP2/Patron.pm @@ -97,6 +97,8 @@ sub set_patron_summary_items { my $out_ids = [ grep {$_ > 0} split(',', $circ_summary->out) ]; $details->{overdue_count} = scalar(@$overdue_ids); $details->{out_count} = scalar(@$out_ids) + scalar(@$overdue_ids); + $details->{items_overdue_ids} = $overdue_ids; + $details->{items_out_ids} = $out_ids; } my $xacts = $U->simplereq( @@ -151,16 +153,21 @@ sub set_patron_summary_list_items { my $e = $session->editor; my $list_items = $params{summary_list_items}; - my $offset = $params{summary_start_item} || 0; - my $end_item = $params{summary_end_item} || 10; - my $limit = $end_item - $offset; - add_hold_items($e, $session, $details, $offset, $limit) + # Start and end are 1-based. Translate to zero-based for internal use. + my $offset = $params{summary_start_item} ? $params{summary_start_item} - 1 : 0; + my $end = $params{summary_end_item} ? $params{summary_end_item} - 1 : 10; + my $limit = $end - $offset; + + add_hold_items($session, $details, $offset, $limit) if $list_items eq 'hold_items'; + + add_items_out($session, $details, $offset, $limit) + if $list_items eq 'charged_items'; } sub add_hold_items { - my ($e, $session, $details, $offset, $limit) = @_; + my ($session, $details, $offset, $limit) = @_; my $patron = $details->{patron}; my $format = $session->config->{msg64_hold_datatype} || ''; @@ -168,13 +175,13 @@ sub add_hold_items { my @hold_items; for my $hold_id (@$hold_ids) { - my $hold = $e->retrieve_action_hold_request($hold_id); + my $hold = $session->editor->retrieve_action_hold_request($hold_id); if ($format eq 'barcode') { - my $copy = find_copy_for_hold($e, $hold); + my $copy = find_copy_for_hold($session, $hold); push(@hold_items, $copy->barcode) if $copy; } else { - my $title = find_title_for_hold($e, $hold); + my $title = find_title_for_hold($session, $hold); push(@hold_items, $title) if $title; } } @@ -182,9 +189,58 @@ sub add_hold_items { $details->{hold_items} = \@hold_items; } +sub add_items_out { + my ($session, $details, $offset, $limit) = @_; + my $patron = $details->{patron}; + + my $format = $session->config->{settings}->{msg64_summary_datatype} || ''; + + my @circ_ids = (@{$details->{items_out_ids}}, @{$details->{items_overdue_ids}}); + + @circ_ids = grep { $_ } @circ_ids[$offset .. ($offset + $limit - 1)]; + + $details->{items_out} = []; + for my $circ_id (@circ_ids) { + my $value; + + if ($format eq 'barcode') { + my $circ = $session->editor->retrieve_action_circulation([ + $circ_id, { + flesh => 1, + flesh_fields => {circ => ['target_copy']} + }]); + + $value = $circ->target_copy->barcode; + + } else { # title + + my $circ = $session->editor->retrieve_action_circulation([ + $circ_id, { + flesh => 4, + flesh_fields => { + circ => ['target_copy'], + acp => ['call_number'], + acn => ['record'], + bre => ['simple_record'] + } + }]); + + if ($circ->target_copy->call_number == -1) { + $value = $circ->target_copy->dummy_title; + } else { + $value = + $circ->target_copy->call_number->record->simple_record->title; + } + } + + push(@{$details->{items_out}}, $value); + } +} + # Hold -> reporter.hold_request_record -> display field for title. sub find_title_for_hold { - my ($e, $hold) = @_; + my ($session, $hold) = @_; + my $e = $session->editor; my $bib_link = $e->retrieve_reporter_hold_request_record($hold->id); @@ -199,7 +255,8 @@ sub find_title_for_hold { # "representative" copy is that it cannot be deleted. Otherwise, any # copy that allows us to find the hold later is good enough. sub find_copy_for_hold { - my ($e, $hold) = @_; + my ($session, $hold) = @_; + my $e = $session->editor; return $e->retrieve_asset_copy($hold->current_copy) if $hold->current_copy; @@ -299,4 +356,5 @@ sub get_patron_penalties { }); } + 1; diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.sip-config.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.sip-config.sql index 9b8567e098..3b6c1212db 100644 --- a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.sip-config.sql +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.sip-config.sql @@ -30,6 +30,18 @@ CREATE TABLE config.sip_setting ( INSERT INTO actor.passwd_type (code, name, login, crypt_algo, iter_count) VALUES ('sip2', 'SIP2 Client Password', FALSE, 'bf', 5); +INSERT INTO config.sip_setting (institution, name, value) +VALUES + ('*', 'allow_sc_status_before_login', 'true'), + ('*', 'currency', '"USD"'), + ('*', 'due_date_use_sip_date_format', 'false'), + ('*', 'patron_status_permit_loans', 'false'), + ('*', 'patron_status_permit_all', 'false'), + ('*', 'msg64_summary_datatype', '"title"'), + ('*', 'msg64_hold_items_available', '"title"') +; + + /* EXAMPLE SETTINGS -- Example linking a SIP password to the 'admin' account. @@ -47,15 +59,6 @@ INSERT INTO config.sip_account( '3m' ); -INSERT INTO config.sip_setting (institution, name, value) -VALUES - ('*', 'allow_sc_status_before_login', 'true'), - ('*', 'currency', '"USD"'), - ('example', 'due_date_use_sip_date_format', 'false'), - ('example', 'patron_status_permit_loans', 'false'), - ('example', 'patron_status_permit_all', 'false'), - ('example', 'msg64_hold_items_available', 'false') -; */