Bug 16755 - allow SIP2 field DA ( hold patron name ) to be customized
authorKyle M Hall <kyle@bywatersolutions.com>
Thu, 29 Dec 2016 14:22:04 +0000 (14:22 +0000)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Thu, 6 Jul 2017 17:52:54 +0000 (14:52 -0300)
The SIP2 DA field that Koha transmits is an odd and arbitrary format
that some SIP2 clients cannot handle. It would be best if this
format were customizable on a per-login basis in the same manner as
the AV field.

Test Plan:
1) Find an item that is checked out with holds
2) Return the item via SIP2 ( using the SIP2 cli emulator )
3) Note the value of the DA field
4) Apply this patch, restart your SIP2 server
5) Repeat step 2
6) Note the DA field value has not changed
7) Add this parameter to the login stanza you are using:
   da_field_template="[% patron.surname %][% IF patron.firstname %], [% patron.firstname %][% END %]"
8) Restart the SIP2 server again
9) Repeat step 2
10) Note the DA field returned is now in the format "$surname, $firstname"

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Benjamin Daeuber <BDaeuber@cityoffargo.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

C4/SIP/ILS/Item.pm
C4/SIP/Sip/MsgType.pm
etc/SIPconfig.xml

index 0649799..a6c735c 100644 (file)
@@ -11,6 +11,7 @@ use warnings;
 
 use Sys::Syslog qw(syslog);
 use Carp;
+use Template;
 
 use C4::SIP::ILS::Transaction;
 
@@ -23,7 +24,7 @@ use C4::Members;
 use C4::Reserves;
 use Koha::Database;
 use Koha::Biblios;
-
+use Koha::Patrons;
 
 =encoding UTF-8
 
@@ -161,8 +162,19 @@ sub hold_patron_id {
 
 }
 sub hold_patron_name {
-    my $self = shift;
-    my $borrowernumber = (@_ ? shift: $self->hold_patron_id()) or return;
+    my ( $self, $template ) = @_;
+    my $borrowernumber = $self->hold_patron_id() or return;
+
+    if ($template) {
+        my $tt = Template->new();
+
+        my $patron = Koha::Patrons->find($borrowernumber);
+
+        my $output;
+        $tt->process( \$template, { patron => $patron }, \$output );
+        return $output;
+    }
+
     my $holder = GetMember(borrowernumber=>$borrowernumber);
     unless ($holder) {
         syslog("LOG_ERR", "While checking hold, GetMember failed for borrowernumber '$borrowernumber'");
index ede80c3..f3815cf 100644 (file)
@@ -671,7 +671,7 @@ sub handle_checkin {
             $resp .= maybe_add( FID_CALL_NUMBER,          $item->call_number );
             $resp .= maybe_add( FID_DESTINATION_LOCATION, $item->destination_loc );
             $resp .= maybe_add( FID_HOLD_PATRON_ID,       $item->hold_patron_bcode );
-            $resp .= maybe_add( FID_HOLD_PATRON_NAME,     $item->hold_patron_name );
+            $resp .= maybe_add( FID_HOLD_PATRON_NAME,     $item->hold_patron_name( $server->{account}->{da_field_template} ) );
             if ( $status->hold and $status->hold->{branchcode} ne $item->destination_loc ) {
                 warn 'SIP hold mismatch: $status->hold->{branchcode}=' . $status->hold->{branchcode} . '; $item->destination_loc=' . $item->destination_loc;
 
index db25975..80f667e 100644 (file)
@@ -51,6 +51,7 @@
       <login id="lpl-sc-beacock" password="xyzzy"
              delimiter="|" error-detect="enabled" institution="LPL"
              send_patron_home_library_in_af="1"
+             da_field_template="[% patron.surname %][% IF patron.firstname %], [% patron.firstname %][% END %]"
              av_field_template="[% accountline.description %] [% accountline.amountoutstanding | format('%.2f') %]" >
           <screen_msg_regex find="Greetings from Koha." replace="Welcome to your library!" />
           <screen_msg_regex find="Invalid patron barcode." replace="Barcode not found, are you sure this is your library card?" />