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 CanBookBeReserved CanItemBeReserved);
29
use C4::Reserves qw(AddReserve GetReservesFromBiblionumber GetReservesFromBorrowernumber CanBookBeReserved CanItemBeReserved);
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 727-735 Cancels an active reserve request for the borrower. Link Here
727
Parameters:
727
Parameters:
728
728
729
  - patron_id (Required)
729
  - patron_id (Required)
730
	a borrowernumber
730
        a borrowernumber
731
  - item_id (Required)
731
  - item_id (Required)
732
	an itemnumber 
732
        a reserve_id
733
733
734
=cut
734
=cut
735
735
Lines 741-765 sub CancelHold { Link Here
741
    my $borrower = GetMemberDetails( $borrowernumber );
741
    my $borrower = GetMemberDetails( $borrowernumber );
742
    return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
742
    return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
743
743
744
    # Get the item or return an error code
744
    # Get the reserve or return an error code
745
    my $itemnumber = $cgi->param('item_id');
745
    my $reserve_id = $cgi->param('item_id');
746
    my $item = GetItem( $itemnumber );
746
    my $reserve = C4::Reserves::GetReserve($reserve_id);
747
    return { code => 'RecordNotFound' } unless $$item{itemnumber};
747
    return { code => 'RecordNotFound' } unless $reserve;
748
748
    return { code => 'RecordNotFound' } unless ($reserve->{borrowernumber} == $borrowernumber);
749
    # Get borrower's reserves
750
    my @reserves = GetReservesFromBorrowernumber( $borrowernumber, undef );
751
    my @reserveditems;
752
753
    # ...and loop over it to build an array of reserved itemnumbers
754
    foreach my $reserve (@reserves) {
755
        push @reserveditems, $reserve->{'itemnumber'};
756
    }
757
758
    # if the item was not reserved by the borrower, returns an error code
759
    return { code => 'NotCanceled' } unless any { $itemnumber eq $_ } @reserveditems;
760
749
761
    # Cancel the reserve
750
    C4::Reserves::CancelReserveFromId($reserve_id);
762
    CancelReserve({ itemnumber => $itemnumber, borrowernumber => $borrowernumber });
763
751
764
    return { code => 'Canceled' };
752
    return { code => 'Canceled' };
765
}
753
}
(-)a/C4/Reserves.pm (-1 / +80 lines)
Lines 104-109 BEGIN { Link Here
104
        &GetReserveFee
104
        &GetReserveFee
105
        &GetReserveInfo
105
        &GetReserveInfo
106
        &GetReserveStatus
106
        &GetReserveStatus
107
        &GetReserve
107
        
108
        
108
        &GetOtherReserves
109
        &GetOtherReserves
109
        
110
        
Lines 119-124 BEGIN { Link Here
119
        &CanBookBeReserved
120
        &CanBookBeReserved
120
	&CanItemBeReserved
121
	&CanItemBeReserved
121
        &CancelReserve
122
        &CancelReserve
123
        &CancelReserveFromId
122
        &CancelExpiredReserves
124
        &CancelExpiredReserves
123
125
124
        &AutoUnsuspendReserves
126
        &AutoUnsuspendReserves
Lines 808-813 sub GetReserveStatus { Link Here
808
    #empty string here will remove need for checking undef, or less log lines
810
    #empty string here will remove need for checking undef, or less log lines
809
}
811
}
810
812
813
=head2 GetReserve
814
815
    my $reserve = C4::Reserves::GetReserve($reserve_id);
816
817
Take a reserve_id and returns a hashref containing reserve informations.
818
Return undef if reserve_id doesn't exist.
819
820
=cut
821
822
sub GetReserve {
823
    my ($reserve_id) = @_;
824
825
    return unless $reserve_id;
826
827
    my $dbh = C4::Context->dbh;
828
    my $query = qq{
829
        SELECT *
830
        FROM reserves
831
        WHERE reserve_id = ?
832
    };
833
    my $sth = $dbh->prepare($query);
834
835
    $sth->execute($reserve_id);
836
    my $reserve = $sth->fetchrow_hashref;
837
838
    return $reserve;
839
}
840
811
=head2 CheckReserves
841
=head2 CheckReserves
812
842
813
  ($status, $reserve, $all_reserves) = &CheckReserves($itemnumber);
843
  ($status, $reserve, $all_reserves) = &CheckReserves($itemnumber);
Lines 1030-1035 sub CancelReserve { Link Here
1030
    _FixPriority( $reserve_id );
1060
    _FixPriority( $reserve_id );
1031
}
1061
}
1032
1062
1063
=head2 CancelReserveFromId
1064
1065
    C4::Reserves::CancelReserveFromId($reserve_id);
1066
1067
Cancel a reserve, given its reserve_id
1068
1069
=cut
1070
1071
sub CancelReserveFromId {
1072
    my ($reserve_id) = @_;
1073
1074
    my $reserve = GetReserve($reserve_id);
1075
    if ($reserve) {
1076
        my $dbh = C4::Context->dbh;
1077
1078
        # update the database, removing the record...
1079
        my $query = qq{
1080
            UPDATE reserves
1081
            SET cancellationdate = NOW(),
1082
                found = NULL,
1083
                priority = 0
1084
            WHERE reserve_id = ?
1085
        };
1086
        my $sth = $dbh->prepare($query);
1087
        $sth->execute($reserve_id);
1088
        $sth->finish;
1089
1090
        $query = qq{
1091
            INSERT INTO old_reserves
1092
            SELECT * FROM reserves
1093
            WHERE reserve_id = ?
1094
        };
1095
        $sth = $dbh->prepare($query);
1096
        $sth->execute($reserve_id);
1097
1098
        $query = qq{
1099
            DELETE FROM reserves
1100
            WHERE reserve_id = ?
1101
        };
1102
        $sth = $dbh->prepare($query);
1103
        $sth->execute($reserve_id);
1104
1105
        # now fix the priority on the others...
1106
        _FixPriority( $reserve->{biblionumber}, $reserve->{borrowernumber} );
1107
    }
1108
1109
    return $reserve;
1110
}
1111
1112
1033
=head2 ModReserve
1113
=head2 ModReserve
1034
1114
1035
  ModReserve({ rank => $rank,
1115
  ModReserve({ rank => $rank,
1036
- 

Return to bug 8868