[Koha-patches] [PATCH 3/3] bug 3435: SIP2 - 3M extension for SmartChute checkin.

Galen Charlton galen.charlton at liblime.com
Thu Jul 30 02:56:08 CEST 2009


From: Joe Atzberger <joe.atzberger at liblime.com>

Implement the optional fields: CR CS CT CV CY and DA.
Also silenced some outstanding debugging print statements.
Consolidated similar accesseor subs in Patron.pm to use x_items.
Adjust SIP tests to specify correct AP (location).  Add a 3rd item
to SIPtext.pm for later use.

Note CT (destination) is currently populated with destination branch code.
We can adjust that to be destination branch name, or some combination in
a subsequent patch if necessary.

This work was sponsored by the Northeast Kansas Library system.

Signed-off-by: Galen Charlton <galen.charlton at liblime.com>
---
 C4/SIP/ILS.pm                     |   39 +++++++----------
 C4/SIP/ILS/Item.pm                |   15 ++++---
 C4/SIP/ILS/Patron.pm              |   85 +++++++++++++++++--------------------
 C4/SIP/ILS/Transaction/Checkin.pm |   33 +++++++++++---
 C4/SIP/ILS/Transaction/Renew.pm   |    1 +
 C4/SIP/Makefile                   |    6 +-
 C4/SIP/Sip/MsgType.pm             |   22 +++++++++-
 C4/SIP/t/03checkout.t             |    5 +-
 C4/SIP/t/07hold.t                 |    1 +
 C4/SIP/t/08checkin.t              |   43 ++++++++++---------
 C4/SIP/t/09renew.t                |    7 +++-
 C4/SIP/t/10renew_all.t            |    4 +-
 C4/SIP/t/SIPtest.pm               |   20 +++++++--
 13 files changed, 167 insertions(+), 114 deletions(-)

diff --git a/C4/SIP/ILS.pm b/C4/SIP/ILS.pm
index b1e516a..f57bbd0 100644
--- a/C4/SIP/ILS.pm
+++ b/C4/SIP/ILS.pm
@@ -82,8 +82,8 @@ sub supports {
 sub check_inst_id {
     my ($self, $id, $whence) = @_;
     if ($id ne $self->{institution}->{id}) {
-	syslog("LOG_WARNING", "%s: received institution '%s', expected '%s'",
-	       $whence, $id, $self->{institution}->{id});
+        syslog("LOG_WARNING", "%s: received institution '%s', expected '%s'", $whence, $id, $self->{institution}->{id});
+        # Just an FYI check, we don't expect the user to change location from that in SIPconfig.xml
     }
 }
 
@@ -396,8 +396,12 @@ sub renew {
 		my $j = 0;
 		my $count = scalar @{$patron->{items}};
 		foreach my $i (@{$patron->{items}}) {
-			syslog("LOG_DEBUG", "checking item %s of %s: $item_id vs. %s", ++$j, $count, $i);
-			if ($i eq $item_id) {
+            unless (defined $i->{barcode}) {    # FIXME: using data instead of objects may violate the abstraction layer
+                syslog("LOG_ERR", "No barcode for item %s of %s: $item_id", $j+1, $count);
+                next;
+            }
+            syslog("LOG_DEBUG", "checking item %s of %s: $item_id vs. %s", ++$j, $count, $i->{barcode});
+            if ($i->{barcode} eq $item_id) {
 				# We have it checked out
 				$item = new ILS::Item $item_id;
 				last;
@@ -408,26 +412,19 @@ sub renew {
     $trans->item($item);
 
     if (!defined($item)) {
-	# It's not checked out to $patron_id
-		$trans->screen_msg("Item not checked out to " . $patron->name);
+		$trans->screen_msg("Item not checked out to " . $patron->name);     # not checked out to $patron_id
+        $trans->ok(0);
     } elsif (!$item->available($patron_id)) {
 		$trans->screen_msg("Item unavailable due to outstanding holds");
+        $trans->ok(0);
     } else {
 		$trans->renewal_ok(1);
 		$trans->desensitize(0);	# It's already checked out
 		$trans->do_renew();
-		syslog("LOG_DEBUG", "done renew (%s): %s renews %s", $trans->renewal_ok(1),$patron_id,$item_id);
-
-#		if ($no_block eq 'Y') {
-#			$item->{due_date} = $nb_due_date;
-#		} else {
-#			$item->{due_date} = time + (14*24*60*60); # two weeks
-#		}
-#		if ($item_props) {
-#			$item->{sip_item_properties} = $item_props;
-#		}
-#		$trans->ok(1);
-#		return $trans;
+		syslog("LOG_DEBUG", "done renew (ok:%s): %s renews %s", $trans->renewal_ok, $patron_id, $item_id);
+
+#		$item->{due_date} = $nb_due_date if $no_block eq 'Y';
+#		$item->{sip_item_properties} = $item_props if $item_props;
     }
 
     return $trans;
@@ -442,11 +439,9 @@ sub renew_all {
 
     $trans->patron($patron = new ILS::Patron $patron_id);
     if (defined $patron) {
-	syslog("LOG_DEBUG", "ILS::renew_all: patron '%s': renew_ok: %s",
-	       $patron->name, $patron->renew_ok);
+        syslog("LOG_DEBUG", "ILS::renew_all: patron '%s': renew_ok: %s", $patron->name, $patron->renew_ok);
     } else {
-	syslog("LOG_DEBUG", "ILS::renew_all: Invalid patron id: '%s'",
-	       $patron_id);
+        syslog("LOG_DEBUG", "ILS::renew_all: Invalid patron id: '%s'", $patron_id);
     }
 
     if (!defined($patron)) {
diff --git a/C4/SIP/ILS/Item.pm b/C4/SIP/ILS/Item.pm
index 28cd4bb..7e6fac9 100644
--- a/C4/SIP/ILS/Item.pm
+++ b/C4/SIP/ILS/Item.pm
@@ -138,16 +138,19 @@ my %fields = (
 
 sub next_hold {
     my $self = shift or return;
-    foreach (@$self->{hold_shelf}) {    # If this item was taken from the hold shelf, then that reserve still governs
+    # use Data::Dumper; warn "next_hold() hold_shelf: " . Dumper($self->{hold_shelf}); warn "next_hold() pending_queue: " . $self->{pending_queue};
+    foreach (@{$self->hold_shelf}) {    # If this item was taken from the hold shelf, then that reserve still governs
         next unless ($_->{itemnumber} and $_->{itemnumber} == $self->{itemnumber});
         return $_;
     }
-    if (scalar @$self->{pending_queue}) {    # Otherwise, if there is at least one hold, the first (best priority) gets it
+    if (scalar @{$self->{pending_queue}}) {    # Otherwise, if there is at least one hold, the first (best priority) gets it
         return  $self->{pending_queue}->[0];
     }
     return;
 }
 
+# hold_patron_id is NOT the barcode.  It's the borrowernumber.
+# That's because the reserving patron may not have a barcode, or may be from an different system entirely (ILL)!
 sub hold_patron_id {
     my $self = shift or return;
     my $hold = $self->next_hold() or return;
@@ -162,11 +165,11 @@ sub hold_patron_name {
         syslog("LOG_ERR", "While checking hold, GetMember failed for borrowernumber '$borrowernumber'");
         return;
     }
-    my $email = $holder{email} || '';
-    my $phone = $holder{phone} || '';
+    my $email = $holder->{email} || '';
+    my $phone = $holder->{phone} || '';
     my $extra = ($email and $phone) ? " ($email, $phone)" :  # both populated, employ comma
                 ($email or  $phone) ? " ($email$phone)"   :  # only 1 populated, we don't care which: no comma
-                "" ;                                         # niether populated, empty string
+                "" ;                                         # neither populated, empty string
     my $name = $holder->{firstname} ? $holder->{firstname} . ' ' : '';
     $name .= $holder->{surname} . $extra;
     # $self->{hold_patron_name} = $name;      # TODO: consider caching
@@ -175,7 +178,7 @@ sub hold_patron_name {
 sub destination_loc {
     my $self = shift or return;
     my $hold = $self->next_hold();
-    return ($hold ? $hold->{branchcode}
+    return ($hold ? $hold->{branchcode} : '');
 }
 
 our $AUTOLOAD;
diff --git a/C4/SIP/ILS/Patron.pm b/C4/SIP/ILS/Patron.pm
index d3f6de8..29e7464 100644
--- a/C4/SIP/ILS/Patron.pm
+++ b/C4/SIP/ILS/Patron.pm
@@ -98,7 +98,9 @@ sub new {
     $debug and warn "patron fines: $ilspatron{fines} ... amountoutstanding: $kp->{amountoutstanding} ... CHARGES->amount: $flags->{CHARGES}->{amount}";
 	for (qw(CHARGES CREDITS GNA LOST DBARRED NOTES)) {
 		($flags->{$_}) or next;
-		$ilspatron{screen_msg} .= ($flags->{$_}->{message} || '') ;
+        if ($_ ne 'NOTES' and $flags->{$_}->{message}) {
+            $ilspatron{screen_msg} .= " -- " . $flags->{$_}->{message};  # show all but internal NOTES
+        }
 		if ($flags->{$_}->{noissues}) {
 			foreach my $toggle (qw(charge_ok renew_ok recall_ok hold_ok inet)) {
 				$ilspatron{$toggle} = 0;    # if we get noissues, disable everything
@@ -204,17 +206,6 @@ sub language {
 }
 
 #
-# List of outstanding holds placed
-#
-sub hold_items {
-    my ($self, $start, $end) = @_;
-	$self->{hold_items} or return [];
-    $start = 1 unless defined($start);
-    $end = scalar @{$self->{hold_items}} unless defined($end);
-    return [@{$self->{hold_items}}[$start-1 .. $end-1]];    # SIP "start item" and "end item" values are 1-indexed, not 0 like perl arrays
-}
-
-#
 # remove the hold on item item_id from my hold queue.
 # return true if I was holding the item, false otherwise.
 # 
@@ -235,46 +226,48 @@ sub drop_hold {
     return $result;
 }
 
-sub overdue_items {
-    my ($self, $start, $end) = @_;
-	$self->{overdue_items} or return [];
-    $start = 1 if !defined($start);
-    $end = scalar @{$self->{overdue_items}} if !defined($end);
-    return [@{$self->{overdue_items}}[$start-1 .. $end-1]];
+# Accessor method for array_ref values, designed to get the "start" and "end" values
+# from the SIP request.  Note those incoming values are 1-indexed, not 0-indexed.
+#
+sub x_items {
+    my $self      = shift or return;
+    my $array_var = shift or return;
+    my ($start, $end) = @_;
+	$self->{$array_var} or return [];
+    $start = 1 unless defined($start);
+    $end   = scalar @{$self->{$array_var}} unless defined($end);
+    # syslog("LOG_DEBUG", "$array_var: start = %d, end = %d; items(%s)", $start, $end, join(', ', @{$self->{items}}));
+
+    return [@{$self->{$array_var}}[$start-1 .. $end-1]];
 }
 
-sub charged_items {
-    my ($self, $start, $end) = shift;
-	$self->{items} or return [];
-    $start = 1 if !defined($start);
-    $end = scalar @{$self->{items}} if !defined($end);
-    syslog("LOG_DEBUG", "charged_items: start = %d, end = %d; items(%s)",
-			$start, $end, join(', ', @{$self->{items}}));
-	return [@{$self->{items}}[$start-1 .. $end-1]];
+#
+# List of outstanding holds placed
+#
+sub hold_items {
+    my $self = shift or return;
+    return $self->x_items('hold_items', @_);
 }
 
+sub overdue_items {
+    my $self = shift or return;
+    return $self->x_items('overdue_items', @_);
+}
+sub charged_items {
+    my $self = shift or return;
+    return $self->x_items('items', @_);
+}
 sub fine_items {
-    my ($self, $start, $end) = @_;
-	$self->{fine_items} or return [];
-    $start = 1 if !defined($start);
-    $end = scalar @{$self->{fine_items}} if !defined($end);
-    return [@{$self->{fine_items}}[$start-1 .. $end-1]];
+    my $self = shift or return;
+    return $self->x_items('fine_items', @_);
 }
-
 sub recall_items {
-    my ($self, $start, $end) = @_;
-	$self->{recall_items} or return [];
-    $start = 1 if !defined($start);
-    $end = scalar @{$self->{recall_items}} if !defined($end);
-    return [@{$self->{recall_items}}[$start-1 .. $end-1]];
+    my $self = shift or return;
+    return $self->x_items('recall_items', @_);
 }
-
 sub unavail_holds {
-    my ($self, $start, $end) = @_;
-	$self->{unavail_holds} or return [];
-    $start = 1 if !defined($start);
-    $end = scalar @{$self->{unavail_holds}} if !defined($end);
-    return [@{$self->{unavail_holds}}[$start-1 .. $end-1]];
+    my $self = shift or return;
+    return $self->x_items('unavail_holds', @_);
 }
 
 sub block {
@@ -282,7 +275,7 @@ sub block {
     foreach my $field ('charge_ok', 'renew_ok', 'recall_ok', 'hold_ok', 'inet') {
 		$self->{$field} = 0;
     }
-    $self->{screen_msg} = "Feature not implemented";  # $blocked_card_msg || "Card Blocked.  Please contact library staff";
+    $self->{screen_msg} = "Block feature not implemented";  # $blocked_card_msg || "Card Blocked.  Please contact library staff";
     # TODO: not really affecting patron record
     return $self;
 }
@@ -295,7 +288,7 @@ sub enable {
     syslog("LOG_DEBUG", "Patron(%s)->enable: charge: %s, renew:%s, recall:%s, hold:%s",
 	   $self->{id}, $self->{charge_ok}, $self->{renew_ok},
 	   $self->{recall_ok}, $self->{hold_ok});
-    $self->{screen_msg} = "This feature not implemented."; # "All privileges restored.";   # TODO: not really affecting patron record
+    $self->{screen_msg} = "Enable feature not implemented."; # "All privileges restored.";   # TODO: not really affecting patron record
     return $self;
 }
 
@@ -315,7 +308,7 @@ sub excessive_fees {
 }
 sub excessive_fines {
     my $self = shift or return;
-    return $self->excessive_fees;   # same thing for Koha
+    return $self->excessive_fees;   # excessive_fines is the same thing as excessive_fees for Koha
 }
     
 sub library_name {
diff --git a/C4/SIP/ILS/Transaction/Checkin.pm b/C4/SIP/ILS/Transaction/Checkin.pm
index fd5f861..d3a4700 100644
--- a/C4/SIP/ILS/Transaction/Checkin.pm
+++ b/C4/SIP/ILS/Transaction/Checkin.pm
@@ -13,6 +13,7 @@ use ILS;
 use ILS::Transaction;
 
 use C4::Circulation;
+use C4::Debug;
 
 our @ISA = qw(ILS::Transaction);
 
@@ -45,28 +46,46 @@ sub do_checkin {
     my $self = shift;
     my $branch = @_ ? shift : 'SIP2' ;
     my $barcode = $self->{item}->id;
+    $debug and warn "do_checkin() calling AddReturn($barcode, $branch)";
     my ($return, $messages, $iteminformation, $borrower) = AddReturn($barcode, $branch);
     $self->alert(!$return);
+    # ignoring messages: NotIssued, IsPermanent, WasLost, WasTransfered
+
+    # biblionumber, biblioitemnumber, itemnumber
+    # borrowernumber, reservedate, branchcode
+    # cancellationdate, found, reservenotes, priority, timestamp
+
     if ($messages->{BadBarcode}) {
         $self->alert_type('99');
     }
-    # ignoring: NotIssued, IsPermanent
     if ($messages->{wthdrawn}) {
         $self->alert_type('99');
     }
+    if ($messages->{Wrongbranch}) {
+        $self->destination_loc($messages->{Wrongbranch}->{Rightbranch});
+        $self->alert_type('04');            # send to other branch
+    }
+    if ($messages->{WrongTransfer}) {
+        $self->destination_loc($messages->{WrongTransfer});
+        $self->alert_type('04');            # send to other branch
+    }
+    if ($messages->{NeedsTransfer}) {
+        $self->destination_loc($iteminformation->{homebranch});
+        $self->alert_type('04');            # send to other branch
+    }
     if ($messages->{ResFound}) {
-        if ($self->hold($messages->{ResFound}->{ResFound})) {
-            $self->alert_type('99');
-        }
+        $self->hold($messages->{ResFound});
+        $debug and warn "Item returned at $branch reserved at $messages->{ResFound}->{branchcode}";
+        $self->alert_type(($branch eq $messages->{ResFound}->{branchcode}) ? '01' : '02');
     }
-    $self->alert(1) if defined $self->alert_type;  # alert_type could be "00"
+    $self->alert(1) if defined $self->alert_type;  # alert_type could be "00", hypothetically
     $self->ok($return);
 }
 
 sub resensitize {
 	my $self = shift;
 	unless ($self->{item}) {
-		warn "no item found in object to resensitize";
+		warn "resensitize(): no item found in object to resensitize";
 		return;
 	}
 	return !$self->{item}->magnetic_media;
@@ -75,7 +94,7 @@ sub resensitize {
 sub patron_id {
 	my $self = shift;
 	unless ($self->{patron}) {
-		warn "no patron found in object";
+		warn "patron_id(): no patron found in object";
 		return;
 	}
 	return $self->{patron}->id;
diff --git a/C4/SIP/ILS/Transaction/Renew.pm b/C4/SIP/ILS/Transaction/Renew.pm
index 5310936..3aea7f9 100644
--- a/C4/SIP/ILS/Transaction/Renew.pm
+++ b/C4/SIP/ILS/Transaction/Renew.pm
@@ -44,6 +44,7 @@ sub do_renew_for ($$) {
 		$self->screen_msg(($self->screen_msg || '') . " " . $renewerror);
 		$self->renewal_ok(0);
 	}
+    $! and warn "do_renew_for error: $!";
 	$self->ok(1) unless $!;
 	return $self;
 }
diff --git a/C4/SIP/Makefile b/C4/SIP/Makefile
index 2f670bb..0a90261 100644
--- a/C4/SIP/Makefile
+++ b/C4/SIP/Makefile
@@ -11,11 +11,11 @@ PODFLAGS = --htmlroot=. --podroot=.
 	pod2html $(PODFLAGS) --outfile=$@ --infile=$<
 
 all:
-	@echo Nothing to make.  The command '"make run"' will run the server.
+	@echo Nothing to make.  Use make test.
 
 # just run the server from the command line
-run: 
-	perl SIPServer.pm SIPconfig.xml
+# run:
+# 	perl SIPServer.pm SIPconfig.xml
 
 test:
 	cd t; $(MAKE) test
diff --git a/C4/SIP/Sip/MsgType.pm b/C4/SIP/Sip/MsgType.pm
index 01e094f..f04d162 100644
--- a/C4/SIP/Sip/MsgType.pm
+++ b/C4/SIP/Sip/MsgType.pm
@@ -639,6 +639,22 @@ sub handle_checkin {
         # item barcode is invalid or system doesn't support 'magnetic media' indicator
 		$resp .= 'U';
     }
+
+    # apparently we can't trust the returns from Checkin yet (because C4::Circulation::AddReturn is faulty)
+    # So we reproduce the alert logic here.
+    if (not $status->alert) {
+        if ($item->hold_patron_id) {
+            $status->alert(1);
+            if ($item->destination_loc and $item->destination_loc ne $current_loc) {
+                $status->alert_type('02');  # hold at other library
+            } else {
+                $status->alert_type('01');  # hold at this library
+            }
+        } elsif ($item->destination_loc and $item->destination_loc ne $current_loc) {
+            $status->alert(1);
+            $status->alert_type('04');  # no hold, just send it
+        }
+    }
     $resp .= $status->alert ? 'Y' : 'N';
     $resp .= Sip::timestamp;
     $resp .= add_field(FID_INST_ID, $inst_id);
@@ -662,6 +678,10 @@ sub handle_checkin {
             $resp .= maybe_add(FID_DESTINATION_LOCATION, $item->destination_loc    );
             $resp .= maybe_add(FID_HOLD_PATRON_ID,       $item->hold_patron_id     );
             $resp .= maybe_add(FID_HOLD_PATRON_NAME,     $item->hold_patron_name   );
+            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;
+                # just me being paranoid.
+            }
         }
     }
 
@@ -1569,7 +1589,7 @@ sub api_auth($$) {
 	$query->param(userid   => $username);
 	$query->param(password => $password);
 	my ($status, $cookie, $sessionID) = check_api_auth($query, {circulate=>1}, "intranet");
-	print STDERR "check_api_auth returns " . ($status || 'undef') . "\n";
+	# print STDERR "check_api_auth returns " . ($status || 'undef') . "\n";
 	# print "api_auth userenv = " . &dump_userenv;
 	return $status;
 }
diff --git a/C4/SIP/t/03checkout.t b/C4/SIP/t/03checkout.t
index 3278010..259e28c 100644
--- a/C4/SIP/t/03checkout.t
+++ b/C4/SIP/t/03checkout.t
@@ -10,8 +10,9 @@ use CGI;
 use Sip::Constants qw(:all);
 use SIPtest qw(
 		:basic
-		$user_barcode $item_barcode $item_title
+		$user_barcode
 		:diacritic
+        :item1
 	);
 
 my $patron_enable_template = {
@@ -31,7 +32,7 @@ my $patron_disable_template = {
 
 my $checkin_template = {
 	id => 'Checkout: cleanup: check in item',
-	msg => "09N20050102    08423620060113    084235APUnder the bed|AO$instid|AB$item_barcode|ACterminal password|",
+	msg => "09N20050102    08423620060113    084235AP$item_owner|AO$instid|AB$item_barcode|ACterminal password|",
 	pat => qr/^101YNN$datepat/o,
 	fields => [],
 };
diff --git a/C4/SIP/t/07hold.t b/C4/SIP/t/07hold.t
index bce7ab7..f469ba5 100644
--- a/C4/SIP/t/07hold.t
+++ b/C4/SIP/t/07hold.t
@@ -182,6 +182,7 @@ push @tests, $test, $hold_count_test_template0;				# 15
 #     - valid item, not allowed to hold item
 #     - multiple holds on item: correct queue position management
 #     - setting and verifying hold expiry dates (requires ILS support)
+#     - 3M checkin extensions for hold/ILL routing
 
 SIPtest::run_sip_tests(@tests);
 
diff --git a/C4/SIP/t/08checkin.t b/C4/SIP/t/08checkin.t
index d6e9cf8..2e04589 100644
--- a/C4/SIP/t/08checkin.t
+++ b/C4/SIP/t/08checkin.t
@@ -9,29 +9,32 @@ use Sip::Constants qw(:all);
 use SIPtest qw(:basic :user1 :item1);
 
 my $checkin_test_template = {
-    id => "Checkin: Item ($item_barcode) is checked out",
-    msg => "09N20060102    08423620060113    084235APUnder the bed|AO$instid|AB$item_barcode|AC$password|",
+    id  => "Checkin: Item ($item_barcode) is checked out",
+    msg => "09N20060102    08423620060113    084235AP$item_owner|AO$instid|AB$item_barcode|AC$password|",
     pat => qr/^101YNN$datepat/,
     fields => [
-	       $SIPtest::field_specs{(FID_INST_ID)},
-	       $SIPtest::field_specs{(FID_SCREEN_MSG)},
-	       $SIPtest::field_specs{(FID_PRINT_LINE)},
-	       { field    => FID_PATRON_ID,
-		 pat      => qr/^$user_barcode$/,
-		 required => 1, },
-	       { field    => FID_ITEM_ID,
-		 pat      => qr/^$item_barcode$/,
-		 required => 1, },
-	       { field    => FID_PERM_LOCN,
-		 pat      => $textpat,
-		 required => 1, },
-	       { field    => FID_TITLE_ID,
-		 pat      => qr/^$item_title\s*$/,
-		 required => 1, }, # not required by the spec.
-	       ],};
+        $SIPtest::field_specs{(FID_INST_ID   )},
+        $SIPtest::field_specs{(FID_SCREEN_MSG)},
+        $SIPtest::field_specs{(FID_PRINT_LINE)},
+        { field    => FID_PATRON_ID,
+          pat      => qr/^$user_barcode$/,
+          required => 1, },
+        { field    => FID_ITEM_ID,
+          pat      => qr/^$item_barcode$/,
+          required => 1, },
+        { field    => FID_PERM_LOCN,
+          pat      => $textpat,
+          required => 1, },
+        { field    => FID_TITLE_ID,
+          pat      => qr/^$item_title\s*$/,
+          required => 1, }, # not required by the spec.
+        { field    => FID_DESTINATION_LOCATION,
+          pat      => qr/^$item_owner\s*$/,
+          required => 0, }, # 3M Extension
+   ],};
 
 my $checkout_template = {
-    id => "Checkin: prep: check out item ($item_barcode)",
+    id  => "Checkin: prep: check out item ($item_barcode)",
     msg => "11YN20060329    203000                  AO$instid|AA$user_barcode|AB$item_barcode|AC|",
     pat => qr/^121NNY$datepat/,
     fields => [],
@@ -50,7 +53,7 @@ my $test;
 # is identical to the first case, except the header says that
 # the ILS didn't check the item in, and there's no patron id.
 $test = clone($checkin_test_template);
-$test->{id} = 'Checkin: Item not checked out';
+$test->{id}  = 'Checkin: Item not checked out';
 $test->{pat} = qr/^100YNN$datepat/o;
 $test->{fields} = [grep $_->{field} ne FID_PATRON_ID, @{$test->{fields}}];
 
diff --git a/C4/SIP/t/09renew.t b/C4/SIP/t/09renew.t
index 4868312..93f3527 100644
--- a/C4/SIP/t/09renew.t
+++ b/C4/SIP/t/09renew.t
@@ -18,7 +18,7 @@ my $checkout_template = {
 
 my $checkin_template = {
 	id => "Renew: cleanup: check in item ($item_barcode)",
-	msg => "09N20060102    08423620060113    084235APUnder the bed|AO$instid|AB$item_barcode|AC$password|",
+	msg => "09N20060102    08423620060113    084235AP$item_owner|AO$instid|AB$item_barcode|AC$password|",
 	pat => qr/^101YNN$datepat/,
 	fields => [],
 };
@@ -71,6 +71,8 @@ my @tests = (
 	$renew_test_template,
 );
 
+SIPtest::run_sip_tests(@tests); exit;   # debug hack
+
 my $test;
 
 # Renew: item checked out, identify by title
@@ -92,6 +94,9 @@ my $test;
 #
 #push @tests, $hold_template, $test, $cancel_hold_template;
 #
+#
+# Tests for impossible renewals.
+#
 # Renew: item not checked out.  Basically the same, except
 # for the leader test.
 
diff --git a/C4/SIP/t/10renew_all.t b/C4/SIP/t/10renew_all.t
index 66211a2..ea86879 100644
--- a/C4/SIP/t/10renew_all.t
+++ b/C4/SIP/t/10renew_all.t
@@ -29,11 +29,11 @@ my @checkout_templates = (
 
 my @checkin_templates = (
 	{    id => "Renew All: prep: check in $item_barcode",
-		msg => "09N20060102    08423620060113    084235APUnder the bed|AO$instid|AB$item_barcode|AC$password|",
+		msg => "09N20060102    08423620060113    084235AP$item_owner|AO$instid|AB$item_barcode|AC$password|",
 		pat => qr/^101YNN$datepat/,
 		fields => [],},
 	{    id => "Renew All: prep: check in $item2_barcode",
-		msg => "09N20060102    08423620060113    084235APUnder the bed|AO$instid|AB$item2_barcode|AC$password|",
+		msg => "09N20060102    08423620060113    084235AP$item2_owner|AO$instid|AB$item2_barcode|AC$password|",
 		pat => qr/^101YNN$datepat/,
 		fields => [],}
 );
diff --git a/C4/SIP/t/SIPtest.pm b/C4/SIP/t/SIPtest.pm
index 193aa5b..62d5646 100644
--- a/C4/SIP/t/SIPtest.pm
+++ b/C4/SIP/t/SIPtest.pm
@@ -13,7 +13,7 @@ BEGIN {
 	%EXPORT_TAGS = (
 		auth  => [qw(&api_auth)],
 		basic => [qw($datepat $textpat $login_test $sc_status_test
-						$instid $currency $server $username $password)],
+						$instid $instid2 $currency $server $username $password)],
 		user1 => [qw($user_barcode  $user_pin  $user_fullname  $user_homeaddr  $user_email
 						$user_phone  $user_birthday  $user_ptype  $user_inet)],
 		item1 => [qw($item_barcode  $item_title  $item_owner )],
@@ -25,6 +25,11 @@ BEGIN {
 		my @tags = @{$EXPORT_TAGS{$tag.'1'}};	# fresh array avoids side affect in map
 		push @{$EXPORT_TAGS{$tag.'2'}}, map {s/($tag)\_/${1}2_/;$_} @tags;
 	}
+    # we've got item3_* also
+	foreach my $tag (qw(item)) {
+		my @tags = @{$EXPORT_TAGS{$tag.'1'}};	# fresh array avoids side affect in map
+		push @{$EXPORT_TAGS{$tag.'3'}}, map {s/($tag)\_/${1}3_/;$_} @tags;
+	}
 	# From perldoc Exporter
 	# Add all the other ":class" tags to the ":all" class, deleting duplicates
 	my %seen;
@@ -47,15 +52,17 @@ use Sip::Constants qw(:all);
 use C4::Auth qw(&check_api_auth);
 use C4::Context;
 
+# TODO: just read SIPconfig.xml and extract what we can....
 # 
 # Configuration parameters to run the test suite
 #
-our $instid   = 'CPL';	# 'UWOLS';
+our $instid   = 'CPL';  # branchcode
+our $instid2  = 'FPL';  # branchcode
 our $currency = 'USD';	# 'CAD';
 our $server   = 'localhost:6001'; 	# Address of the SIP server
 
-# SIP username and password to connect to the server.  See the
-# SIP config.xml for the correct values.
+# SIP username and password to connect to the server.
+# See SIPconfig.xml for the correct values.
 our $username = 'term1';
 our $password = 'term1';
 
@@ -94,6 +101,11 @@ our $item2_barcode = '502326000011';
 our $item2_title   = 'The biggest, smallest, fastest, tallest things you\'ve ever heard of /';
 our $item2_owner   = 'CPL';
 
+# A third valid item
+our $item3_barcode = '502326000240';
+our $item3_title   = 'The girl who owned a city /';
+our $item3_owner   = 'FPL';
+
 # An item with a diacritical in the title
 our $item_diacritic_barcode = '502326001030';
 our $item_diacritic_titlea  = 'Hari Poṭer u-geviʻa ha-esh /';
-- 
1.5.6.5




More information about the Koha-patches mailing list