+=head2 RevertWaitingStatus
+
+ $success = RevertWaitingStatus({ itemnumber => $itemnumber });
+
+ Reverts a 'waiting' hold back to a regular hold with a priority of 1.
+
+ Caveat: Any waiting hold fixed with RevertWaitingStatus will be an
+ item level hold, even if it was only a bibliolevel hold to
+ begin with. This is because we can no longer know if a hold
+ was item-level or bib-level after a hold has been set to
+ waiting status.
+
+=cut
+
+sub RevertWaitingStatus {
+ my ( $params ) = @_;
+ my $itemnumber = $params->{'itemnumber'};
+
+ return unless ( $itemnumber );
+
+ my $dbh = C4::Context->dbh;
+
+ ## Get the waiting reserve we want to revert
+ my $query = "
+ SELECT * FROM reserves
+ WHERE itemnumber = ?
+ AND found IS NOT NULL
+ ";
+ my $sth = $dbh->prepare( $query );
+ $sth->execute( $itemnumber );
+ my $reserve = $sth->fetchrow_hashref();
+
+ ## Increment the priority of all other non-waiting
+ ## reserves for this bib record
+ $query = "
+ UPDATE reserves
+ SET
+ priority = priority + 1
+ WHERE
+ biblionumber = ?
+ AND
+ priority > 0
+ ";
+ $sth = $dbh->prepare( $query );
+ $sth->execute( $reserve->{'biblionumber'} );
+
+ ## Fix up the currently waiting reserve
+ $query = "
+ UPDATE reserves
+ SET
+ priority = 1,
+ found = NULL,
+ waitingdate = NULL
+ WHERE
+ reserve_id = ?
+ ";
+ $sth = $dbh->prepare( $query );
+ return $sth->execute( $reserve->{'reserve_id'} );
+}
+
+=head2 GetReserveId
+
+ $reserve_id = GetReserveId({ biblionumber => $biblionumber, borrowernumber => $borrowernumber [, itemnumber => $itemnumber ] });
+
+ Returnes the first reserve id that matches the given criteria
+
+=cut
+
+sub GetReserveId {
+ my ( $params ) = @_;
+
+ return unless ( ( $params->{'biblionumber'} || $params->{'itemnumber'} ) && $params->{'borrowernumber'} );
+
+ my $dbh = C4::Context->dbh();
+
+ my $sql = "SELECT reserve_id FROM reserves WHERE ";
+
+ my @params;
+ my @limits;
+ foreach my $key ( keys %$params ) {
+ if ( defined( $params->{$key} ) ) {
+ push( @limits, "$key = ?" );
+ push( @params, $params->{$key} );
+ }
+ }
+
+ $sql .= join( " AND ", @limits );
+
+ my $sth = $dbh->prepare( $sql );
+ $sth->execute( @params );
+ my $row = $sth->fetchrow_hashref();
+
+ return $row->{'reserve_id'};
+}
+