From 529ea2f4ce1302290ddd3a27c31db9d9503a592a Mon Sep 17 00:00:00 2001 From: Lucas Gass Date: Mon, 21 Apr 2025 21:35:01 +0000 Subject: [PATCH] Bug 31698: Add support for moving record level holds --- Koha/Hold.pm | 52 ++++++++ .../prog/en/modules/reserve/request.tt | 125 +++++++++++++++++- reserve/request.pl | 41 +++--- 3 files changed, 193 insertions(+), 25 deletions(-) diff --git a/Koha/Hold.pm b/Koha/Hold.pm index 392cda0e234..1de478c35fd 100644 --- a/Koha/Hold.pm +++ b/Koha/Hold.pm @@ -230,6 +230,58 @@ sub move_hold_item { return $self; } +=head3 move_hold_biblio + +$hold->move_hold_biblio(); + +=cut + +sub move_hold_biblio { + my ( $self, $args ) = @_; + + my $new_biblionumber = $args->{new_biblionumber}; + + my $original = $self; + my $original_biblionumber = $self->biblionumber; + + my $patron = Koha::Patrons->find( { borrowernumber => $self->borrowernumber } ); + + if ($new_biblionumber) { + + #check to see if moving this hold is allowed + my $canReserve = C4::Reserves::CanBookBeReserved( + $patron->borrowernumber, $new_biblionumber, $self->branchcode, + { ignore_hold_counts => 1 } + ); + + if ( $canReserve->{status} eq 'OK' ) { + my $max = Koha::Holds->search( + { biblionumber => $new_biblionumber }, + { order_by => { -desc => 'priority' }, rows => 1 } + )->next; + my $base_priority = $max ? $max->priority : 0; + my $priority = $base_priority + 1; + my $new_priority = C4::Reserves::_ShiftPriority( $new_biblionumber, $priority ); + + $self->update( + { + itemnumber => undef, + biblionumber => $new_biblionumber, + priority => $new_priority, + } + ); + + C4::Log::logaction( 'HOLDS', 'MODIFY', $self->reserve_id, $self, undef, $original ) + if C4::Context->preference('HoldsLog'); + + return { success => 1, hold => $self }; + } else { + return { success => 0, error => $canReserve->{status} }; + } + } + return $self; +} + =head3 set_transfer =cut diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt index 697f7c02e72..790fe2dd15a 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt @@ -1505,7 +1505,7 @@
-
+

2. Enter the item barcode of new hold target:

@@ -1515,12 +1515,62 @@
-
+
+
+ + + + + +