+=head2 ToggleSuspend
+
+ ToggleSuspend( $borrowernumber, $biblionumber );
+
+This function sets the suspend field to true if is false, and false if it is true.
+If the reserve is currently suspended with a suspend_until date, that date will
+be cleared when it is unsuspended.
+
+=cut
+
+sub ToggleSuspend {
+ my ( $borrowernumber, $biblionumber ) = @_;
+
+ my $dbh = C4::Context->dbh;
+
+ my $sth = $dbh->prepare(
+ "UPDATE reserves SET suspend = NOT suspend,
+ suspend_until = CASE WHEN suspend = 0 THEN NULL ELSE suspend_until END
+ WHERE biblionumber = ?
+ AND borrowernumber = ?
+ ");
+ $sth->execute(
+ $biblionumber,
+ $borrowernumber,
+ );
+ $sth->finish;
+}
+
+=head2 SuspendAll
+
+ SuspendAll(
+ borrowernumber => $borrowernumber,
+ [ biblionumber => $biblionumber, ]
+ [ suspend_until => $suspend_until, ]
+ [ suspend => $suspend ]
+ );
+
+ This function accepts a set of hash keys as its parameters.
+ It requires either borrowernumber or biblionumber, or both.
+
+ suspend_until is wholly optional.
+
+=cut
+
+sub SuspendAll {
+ my %params = @_;
+
+ my $borrowernumber = $params{'borrowernumber'} || undef;
+ my $biblionumber = $params{'biblionumber'} || undef;
+ my $suspend_until = $params{'suspend_until'} || undef;
+ my $suspend = defined( $params{'suspend'} ) ? $params{'suspend'} : 1;
+
+ warn "C4::Reserves::SuspendAll( borrowernumber => $borrowernumber, biblionumber => $biblionumber, suspend_until => $suspend_until, suspend => $suspend )";
+
+ $suspend_until = C4::Dates->new( $suspend_until )->output("iso") if ( defined( $suspend_until ) );
+
+ return unless ( $borrowernumber || $biblionumber );
+
+ my ( $query, $sth, $dbh, @query_params );
+
+ $query = "UPDATE reserves SET suspend = ? ";
+ push( @query_params, $suspend );
+ if ( !$suspend ) {
+ $query .= ", suspend_until = NULL ";
+ } elsif ( $suspend_until ) {
+ $query .= ", suspend_until = ? ";
+ push( @query_params, $suspend_until );
+ }
+ $query .= " WHERE ";
+ if ( $borrowernumber ) {
+ $query .= " borrowernumber = ? ";
+ push( @query_params, $borrowernumber );
+ }
+ $query .= " AND " if ( $borrowernumber && $biblionumber );
+ if ( $biblionumber ) {
+ $query .= " biblionumber = ? ";
+ push( @query_params, $biblionumber );
+ }
+ $query .= " AND found IS NULL ";
+
+ $dbh = C4::Context->dbh;
+ $sth = $dbh->prepare( $query );
+ $sth->execute( @query_params );
+ $sth->finish;
+}
+
+