[Koha-patches] [PATCH] Bug 5459 - Holds not being shifted when merging biblios
Chris Cormack
chrisc at catalyst.net.nz
Mon Sep 5 01:06:59 CEST 2011
Holds are now shifted and reordered by date placed.
---
C4/Reserves.pm | 32 ++++++++++++++++++++++++++++++++
cataloguing/merge.pl | 5 +++++
2 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/C4/Reserves.pm b/C4/Reserves.pm
index 8373840..58ddbfe 100644
--- a/C4/Reserves.pm
+++ b/C4/Reserves.pm
@@ -3,6 +3,7 @@ package C4::Reserves;
# Copyright 2000-2002 Katipo Communications
# 2006 SAN Ouest Provence
# 2007-2010 BibLibre Paul POULAIN
+# 2011 Catalyst IT
#
# This file is part of Koha.
#
@@ -121,6 +122,7 @@ BEGIN {
&AlterPriority
&ToggleLowestPriority
);
+ @EXPORT_OK = qw( MergeHolds );
}
=head2 AddReserve
@@ -1794,6 +1796,36 @@ sub _ShiftPriorityByDateAndPriority {
return $new_priority; # so the caller knows what priority they wind up receiving
}
+=head2 MergeHolds
+
+ MergeHolds($dbh,$to_biblio, $from_biblio);
+
+This shifts the holds from C<$from_biblio> to C<$to_biblio> and reorders them by the date they were placed
+
+=cut
+
+sub MergeHolds {
+ my ($dbh,$to_biblio,$from_biblio) = @_;
+ my $sth = $dbh->prepare("SELECT count(*) as reservenumber FROM reserves WHERE biblionumber = ?");
+ $sth->execute($from_biblio);
+ if (my $data = $sth->fetchrow_hashref()){
+ # holds exist on old record if not we don't need to do anything
+ $sth = $dbh->prepare("UPDATE reserves SET biblionumber = ? WHERE biblionumber = ?");
+ $sth->execute($to_biblio,$from_biblio);
+ # Reorder by date
+ $sth = $dbh->prepare("SELECT * FROM reserves WHERE biblionumber = ? ORDER BY reservedate ASC");
+ my $upd_sth = $dbh->prepare("UPDATE reserves SET priority = ? WHERE biblionumber = ? AND borrowernumber = ?
+ AND reservedate = ? AND constrainttype = ? AND (itemnumber = ? or itemnumber is NULL) ");
+ $sth->execute($to_biblio);
+ my $priority = 1;
+ while (my $reserve = $sth->fetchrow_hashref()){
+ $upd_sth->execute($priority,$to_biblio,$reserve->{'borrowernumber'},$reserve->{'reservedate'},$reserve->{'constrainttype'},$reserve->{'itemnumber'});
+ $priority++;
+ }
+ }
+}
+
+
=head1 AUTHOR
Koha Development Team <http://koha-community.org/>
diff --git a/cataloguing/merge.pl b/cataloguing/merge.pl
index cc2d01d..f32991e 100755
--- a/cataloguing/merge.pl
+++ b/cataloguing/merge.pl
@@ -2,6 +2,7 @@
# Copyright 2009 BibLibre
+# Parts Copyright Catalyst IT 2011
#
# This file is part of Koha.
#
@@ -26,6 +27,7 @@ use C4::Auth;
use C4::Items;
use C4::Biblio;
use C4::Serials;
+use C4::Reserves qw/MergeHolds/;
my $input = new CGI;
my @biblionumber = $input->param('biblionumber');
@@ -101,6 +103,8 @@ if ($merge) {
# Deleting the other record
if (scalar(@errors) == 0) {
+ # Move holds
+ MergeHolds($dbh,$tobiblio,$frombiblio);
my $error = DelBiblio($frombiblio);
push @errors, $error if ($error);
}
@@ -252,3 +256,4 @@ sub createKey(){
}
+
--
1.7.4.1
More information about the Koha-patches
mailing list