@@ -, +, @@ av_field_template="TEST [% accountline.description %] [% accountline.amountoutstanding | format('%.2f') %]" --- C4/SIP/ILS/Patron.pm | 33 ++++++++++++++++++++++++++++++++- C4/SIP/Sip/MsgType.pm | 16 ++++++++-------- etc/SIPconfig.xml | 3 ++- misc/sip_cli_emulator.pl | 17 +++++++++++++---- 4 files changed, 55 insertions(+), 14 deletions(-) --- a/C4/SIP/ILS/Patron.pm +++ a/C4/SIP/ILS/Patron.pm @@ -295,8 +295,39 @@ sub charged_items { return $self->x_items('items', @_); } sub fine_items { + require Koha::Database; + require Template; + my $self = shift; - return $self->x_items('fine_items', @_); + my $start = shift; + my $end = shift; + my $server = shift; + + my @fees = Koha::Database->new()->schema()->resultset('Accountline')->search( + { + borrowernumber => $self->{borrowernumber}, + amountoutstanding => { '>' => '0' }, + } + ); + + $start = $start ? $start - 1 : 0; + $end = $end ? $end : scalar @fees - 1; + + my $av_field_template = $server ? $server->{account}->{av_field_template} : undef; + $av_field_template ||= "[% accountline.description %] [% accountline.amountoutstanding | format('%.2f') %]"; + + my $tt = Template->new(); + + my @return_values; + for ( my $i = $start; $i <= $end; $i++ ) { + my $fee = $fees[$i]; + + my $output; + $tt->process( \$av_field_template, { accountline => $fee }, \$output ); + push( @return_values, { barcode => $output } ); + } + + return \@return_values; } sub recall_items { my $self = shift; --- a/C4/SIP/Sip/MsgType.pm +++ a/C4/SIP/Sip/MsgType.pm @@ -890,7 +890,7 @@ sub handle_login { # and we're going to believe it. # sub summary_info { - my ($ils, $patron, $summary, $start, $end) = @_; + my ($ils, $patron, $summary, $start, $end, $server) = @_; my $resp = ''; my $summary_type; # @@ -898,11 +898,11 @@ sub summary_info { # message to the corresponding field and handler # my @summary_map = ( - { func => $patron->can( "hold_items"), fid => FID_HOLD_ITEMS }, - { func => $patron->can("overdue_items"), fid => FID_OVERDUE_ITEMS }, - { func => $patron->can("charged_items"), fid => FID_CHARGED_ITEMS }, - { func => $patron->can( "fine_items"), fid => FID_FINE_ITEMS }, - { func => $patron->can( "recall_items"), fid => FID_RECALL_ITEMS }, + { func => $patron->can("hold_items"), fid => FID_HOLD_ITEMS }, + { func => $patron->can("overdue_items"), fid => FID_OVERDUE_ITEMS }, + { func => $patron->can("charged_items"), fid => FID_CHARGED_ITEMS }, + { func => $patron->can("fine_items"), fid => FID_FINE_ITEMS }, + { func => $patron->can("recall_items"), fid => FID_RECALL_ITEMS }, { func => $patron->can("unavail_holds"), fid => FID_UNAVAILABLE_HOLD_ITEMS }, ); @@ -915,7 +915,7 @@ sub summary_info { my $func = $summary_map[$summary_type]->{func}; my $fid = $summary_map[$summary_type]->{fid}; - my $itemlist = &$func($patron, $start, $end); + my $itemlist = &$func($patron, $start, $end, $server); syslog("LOG_DEBUG", "summary_info: list = (%s)", join(", ", @{$itemlist})); foreach my $i (@{$itemlist}) { @@ -991,7 +991,7 @@ sub handle_patron_info { # fine_items # recall_items - $resp .= summary_info($ils, $patron, $summary, $start, $end); + $resp .= summary_info($ils, $patron, $summary, $start, $end, $server); $resp .= maybe_add(FID_HOME_ADDR, $patron->address); $resp .= maybe_add(FID_EMAIL, $patron->email_addr); --- a/etc/SIPconfig.xml +++ a/etc/SIPconfig.xml @@ -42,7 +42,8 @@ + send_patron_home_library_in_af="1" + av_field_template="[% accountline.description %] [% accountline.amountoutstanding | format('%.2f') %]" > --- a/misc/sip_cli_emulator.pl +++ a/misc/sip_cli_emulator.pl @@ -40,6 +40,8 @@ my $location_code; my $patron_identifier; my $patron_password; +my $summary; + my $item_identifier; my $fee_acknowledged = 0; @@ -55,13 +57,15 @@ GetOptions( "sp|sip_pass=s" => \$login_password, # sip password "l|location|location_code=s" => \$location_code, # sip location code - "patron=s" => \$patron_identifier, # patron cardnumber or login - "password=s" => \$patron_password, # patron's password + "patron=s" => \$patron_identifier, # patron cardnumber or login + "password=s" => \$patron_password, # patron's password "i|item=s" => \$item_identifier, "fa|fee-acknowledged" => \$fee_acknowledged, + "s|summary=s" => \$summary, + "t|terminator=s" => \$terminator, "m|message=s" => \@messages, @@ -126,8 +130,9 @@ my $handlers = { patron_identifier => $patron_identifier, terminal_password => $terminal_password, patron_password => $patron_password, + summary => $summary, }, - optional => [ 'patron_password', ], + optional => [ 'patron_password', 'summary' ], }, item_information => { name => 'Item Information', @@ -312,8 +317,9 @@ sub build_patron_information_command_message { my $patron_identifier = $params->{patron_identifier}; my $terminal_password = $params->{terminal_password}; my $patron_password = $params->{patron_password}; + my $summary = $params->{summary}; - my $summary = " "; + $summary //= " "; return PATRON_INFO @@ -484,6 +490,9 @@ Options: --patron ILS patron cardnumber or username --password ILS patron password + -s --summary Optionally define the patron information request summary field. + Please refer to the SIP2 protocol specification for details + --item ILS item identifier ( item barcode ) -t --terminator SIP2 message terminator, either CR, or CRLF --