View | Details | Raw Unified | Return to bug 8868
Collapse All | Expand All

(-)a/C4/ILSDI/Services.pm (-21 / +9 lines)
Lines 26-32 use C4::Circulation; Link Here
26
use C4::Branch;
26
use C4::Branch;
27
use C4::Accounts;
27
use C4::Accounts;
28
use C4::Biblio;
28
use C4::Biblio;
29
use C4::Reserves qw(AddReserve CancelReserve GetReservesFromBiblionumber GetReservesFromBorrowernumber);
29
use C4::Reserves qw(AddReserve GetReservesFromBiblionumber GetReservesFromBorrowernumber);
30
use C4::Context;
30
use C4::Context;
31
use C4::AuthoritiesMarc;
31
use C4::AuthoritiesMarc;
32
use C4::ILSDI::Utility;
32
use C4::ILSDI::Utility;
Lines 724-732 Cancels an active reserve request for the borrower. Link Here
724
Parameters:
724
Parameters:
725
725
726
  - patron_id (Required)
726
  - patron_id (Required)
727
	a borrowernumber
727
        a borrowernumber
728
  - item_id (Required)
728
  - item_id (Required)
729
	an itemnumber 
729
        a reserve_id
730
730
731
=cut
731
=cut
732
732
Lines 738-762 sub CancelHold { Link Here
738
    my $borrower = GetMemberDetails( $borrowernumber );
738
    my $borrower = GetMemberDetails( $borrowernumber );
739
    return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
739
    return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
740
740
741
    # Get the item or return an error code
741
    # Get the reserve or return an error code
742
    my $itemnumber = $cgi->param('item_id');
742
    my $reserve_id = $cgi->param('item_id');
743
    my $item = GetItem( $itemnumber );
743
    my $reserve = C4::Reserves::GetReserve($reserve_id);
744
    return { code => 'RecordNotFound' } unless $$item{itemnumber};
744
    return { code => 'RecordNotFound' } unless $reserve;
745
745
    return { code => 'RecordNotFound' } unless ($reserve->{borrowernumber} == $borrowernumber);
746
    # Get borrower's reserves
747
    my @reserves = GetReservesFromBorrowernumber( $borrowernumber, undef );
748
    my @reserveditems;
749
750
    # ...and loop over it to build an array of reserved itemnumbers
751
    foreach my $reserve (@reserves) {
752
        push @reserveditems, $reserve->{'itemnumber'};
753
    }
754
755
    # if the item was not reserved by the borrower, returns an error code
756
    return { code => 'NotCanceled' } unless any { $itemnumber eq $_ } @reserveditems;
757
746
758
    # Cancel the reserve
747
    C4::Reserves::CancelReserveFromId($reserve_id);
759
    CancelReserve( $itemnumber, undef, $borrowernumber );
760
748
761
    return { code => 'Canceled' };
749
    return { code => 'Canceled' };
762
}
750
}
(-)a/C4/Reserves.pm (-2 / +82 lines)
Lines 103-108 BEGIN { Link Here
103
        &GetReserveFee
103
        &GetReserveFee
104
        &GetReserveInfo
104
        &GetReserveInfo
105
        &GetReserveStatus
105
        &GetReserveStatus
106
        &GetReserve
106
        
107
        
107
        &GetOtherReserves
108
        &GetOtherReserves
108
        
109
        
Lines 118-123 BEGIN { Link Here
118
        &CanBookBeReserved
119
        &CanBookBeReserved
119
	&CanItemBeReserved
120
	&CanItemBeReserved
120
        &CancelReserve
121
        &CancelReserve
122
        &CancelReserveFromId
121
        &CancelExpiredReserves
123
        &CancelExpiredReserves
122
124
123
        &AutoUnsuspendReserves
125
        &AutoUnsuspendReserves
Lines 260-266 sub GetReservesFromBiblionumber { Link Here
260
262
261
    # Find the desired items in the reserves
263
    # Find the desired items in the reserves
262
    my $query = "
264
    my $query = "
263
        SELECT  branchcode,
265
        SELECT  reserve_id,
266
                branchcode,
264
                timestamp AS rtimestamp,
267
                timestamp AS rtimestamp,
265
                priority,
268
                priority,
266
                biblionumber,
269
                biblionumber,
Lines 747-752 sub GetReserveStatus { Link Here
747
    return $found;
750
    return $found;
748
}
751
}
749
752
753
=head2 GetReserve
754
755
    my $reserve = C4::Reserves::GetReserve($reserve_id);
756
757
Take a reserve_id and returns a hashref containing reserve informations.
758
Return undef if reserve_id doesn't exist.
759
760
=cut
761
762
sub GetReserve {
763
    my ($reserve_id) = @_;
764
765
    return unless $reserve_id;
766
767
    my $dbh = C4::Context->dbh;
768
    my $query = qq{
769
        SELECT *
770
        FROM reserves
771
        WHERE reserve_id = ?
772
    };
773
    my $sth = $dbh->prepare($query);
774
775
    $sth->execute($reserve_id);
776
    my $reserve = $sth->fetchrow_hashref;
777
778
    return $reserve;
779
}
780
750
=head2 CheckReserves
781
=head2 CheckReserves
751
782
752
  ($status, $reserve, $all_reserves) = &CheckReserves($itemnumber);
783
  ($status, $reserve, $all_reserves) = &CheckReserves($itemnumber);
Lines 1023-1028 sub CancelReserve { Link Here
1023
    }
1054
    }
1024
}
1055
}
1025
1056
1057
=head2 CancelReserveFromId
1058
1059
    C4::Reserves::CancelReserveFromId($reserve_id);
1060
1061
Cancel a reserve, given its reserve_id
1062
1063
=cut
1064
1065
sub CancelReserveFromId {
1066
    my ($reserve_id) = @_;
1067
1068
    my $reserve = GetReserve($reserve_id);
1069
    if ($reserve) {
1070
        my $dbh = C4::Context->dbh;
1071
1072
        # update the database, removing the record...
1073
        my $query = qq{
1074
            UPDATE reserves
1075
            SET cancellationdate = NOW(),
1076
                found = NULL,
1077
                priority = 0
1078
            WHERE reserve_id = ?
1079
        };
1080
        my $sth = $dbh->prepare($query);
1081
        $sth->execute($reserve_id);
1082
        $sth->finish;
1083
1084
        $query = qq{
1085
            INSERT INTO old_reserves
1086
            SELECT * FROM reserves
1087
            WHERE reserve_id = ?
1088
        };
1089
        $sth = $dbh->prepare($query);
1090
        $sth->execute($reserve_id);
1091
1092
        $query = qq{
1093
            DELETE FROM reserves
1094
            WHERE reserve_id = ?
1095
        };
1096
        $sth = $dbh->prepare($query);
1097
        $sth->execute($reserve_id);
1098
1099
        # now fix the priority on the others...
1100
        _FixPriority( $reserve->{biblionumber}, $reserve->{borrowernumber} );
1101
    }
1102
1103
    return $reserve;
1104
}
1105
1106
1026
=head2 ModReserve
1107
=head2 ModReserve
1027
1108
1028
  ModReserve($rank, $biblio, $borrower, $branch[, $itemnumber])
1109
  ModReserve($rank, $biblio, $borrower, $branch[, $itemnumber])
1029
- 

Return to bug 8868