|
Lines 93-99
BEGIN {
Link Here
|
| 93 |
@ISA = qw(Exporter); |
93 |
@ISA = qw(Exporter); |
| 94 |
@EXPORT = qw( |
94 |
@EXPORT = qw( |
| 95 |
&AddReserve |
95 |
&AddReserve |
| 96 |
|
96 |
|
|
|
97 |
&GetReserve |
| 97 |
&GetReservesFromItemnumber |
98 |
&GetReservesFromItemnumber |
| 98 |
&GetReservesFromBiblionumber |
99 |
&GetReservesFromBiblionumber |
| 99 |
&GetReservesFromBorrowernumber |
100 |
&GetReservesFromBorrowernumber |
|
Lines 244-249
sub AddReserve {
Link Here
|
| 244 |
return; # FIXME: why not have a useful return value? |
245 |
return; # FIXME: why not have a useful return value? |
| 245 |
} |
246 |
} |
| 246 |
|
247 |
|
|
|
248 |
=head2 GetReserve |
| 249 |
|
| 250 |
$res = GetReserve( $reserve_id ); |
| 251 |
|
| 252 |
=cut |
| 253 |
|
| 254 |
sub GetReserve { |
| 255 |
my ($reserve_id) = @_; |
| 256 |
#warn "C4::Reserves::GetReserve( $reserve_id )"; |
| 257 |
|
| 258 |
my $dbh = C4::Context->dbh; |
| 259 |
my $query = "SELECT * FROM reserves WHERE reserve_id = ?"; |
| 260 |
my $sth = $dbh->prepare( $query ); |
| 261 |
$sth->execute( $reserve_id ); |
| 262 |
my $res = $sth->fetchrow_hashref(); |
| 263 |
return $res; |
| 264 |
} |
| 265 |
|
| 247 |
=head2 GetReservesFromBiblionumber |
266 |
=head2 GetReservesFromBiblionumber |
| 248 |
|
267 |
|
| 249 |
($count, $title_reserves) = &GetReserves($biblionumber); |
268 |
($count, $title_reserves) = &GetReserves($biblionumber); |
|
Lines 260-266
sub GetReservesFromBiblionumber {
Link Here
|
| 260 |
|
279 |
|
| 261 |
# Find the desired items in the reserves |
280 |
# Find the desired items in the reserves |
| 262 |
my $query = " |
281 |
my $query = " |
| 263 |
SELECT branchcode, |
282 |
SELECT reserve_id, |
|
|
283 |
branchcode, |
| 264 |
timestamp AS rtimestamp, |
284 |
timestamp AS rtimestamp, |
| 265 |
priority, |
285 |
priority, |
| 266 |
biblionumber, |
286 |
biblionumber, |
|
Lines 328-334
sub GetReservesFromBiblionumber {
Link Here
|
| 328 |
|
348 |
|
| 329 |
=head2 GetReservesFromItemnumber |
349 |
=head2 GetReservesFromItemnumber |
| 330 |
|
350 |
|
| 331 |
( $reservedate, $borrowernumber, $branchcode ) = GetReservesFromItemnumber($itemnumber); |
351 |
( $reservedate, $borrowernumber, $branchcode, $reserve_id ) = GetReservesFromItemnumber($itemnumber); |
| 332 |
|
352 |
|
| 333 |
TODO :: Description here |
353 |
TODO :: Description here |
| 334 |
|
354 |
|
|
Lines 338-344
sub GetReservesFromItemnumber {
Link Here
|
| 338 |
my ( $itemnumber, $all_dates ) = @_; |
358 |
my ( $itemnumber, $all_dates ) = @_; |
| 339 |
my $dbh = C4::Context->dbh; |
359 |
my $dbh = C4::Context->dbh; |
| 340 |
my $query = " |
360 |
my $query = " |
| 341 |
SELECT reservedate,borrowernumber,branchcode |
361 |
SELECT reservedate,borrowernumber,branchcode,reserve_id |
| 342 |
FROM reserves |
362 |
FROM reserves |
| 343 |
WHERE itemnumber=? |
363 |
WHERE itemnumber=? |
| 344 |
"; |
364 |
"; |
|
Lines 511-521
sub GetReserveCount {
Link Here
|
| 511 |
|
531 |
|
| 512 |
my $dbh = C4::Context->dbh; |
532 |
my $dbh = C4::Context->dbh; |
| 513 |
|
533 |
|
| 514 |
my $query = ' |
534 |
my $query = " |
| 515 |
SELECT COUNT(*) AS counter |
535 |
SELECT COUNT(*) AS counter |
| 516 |
FROM reserves |
536 |
FROM reserves |
| 517 |
WHERE borrowernumber = ? |
537 |
WHERE borrowernumber = ? |
| 518 |
'; |
538 |
"; |
| 519 |
my $sth = $dbh->prepare($query); |
539 |
my $sth = $dbh->prepare($query); |
| 520 |
$sth->execute($borrowernumber); |
540 |
$sth->execute($borrowernumber); |
| 521 |
my $row = $sth->fetchrow_hashref; |
541 |
my $row = $sth->fetchrow_hashref; |
|
Lines 687-693
sub GetReservesToBranch {
Link Here
|
| 687 |
my ( $frombranch ) = @_; |
707 |
my ( $frombranch ) = @_; |
| 688 |
my $dbh = C4::Context->dbh; |
708 |
my $dbh = C4::Context->dbh; |
| 689 |
my $sth = $dbh->prepare( |
709 |
my $sth = $dbh->prepare( |
| 690 |
"SELECT borrowernumber,reservedate,itemnumber,timestamp |
710 |
"SELECT reserve_id,borrowernumber,reservedate,itemnumber,timestamp |
| 691 |
FROM reserves |
711 |
FROM reserves |
| 692 |
WHERE priority='0' |
712 |
WHERE priority='0' |
| 693 |
AND branchcode=?" |
713 |
AND branchcode=?" |
|
Lines 710-731
sub GetReservesToBranch {
Link Here
|
| 710 |
|
730 |
|
| 711 |
sub GetReservesForBranch { |
731 |
sub GetReservesForBranch { |
| 712 |
my ($frombranch) = @_; |
732 |
my ($frombranch) = @_; |
| 713 |
my $dbh = C4::Context->dbh; |
733 |
my $dbh = C4::Context->dbh; |
| 714 |
my $query = "SELECT borrowernumber,reservedate,itemnumber,waitingdate |
734 |
|
|
|
735 |
my $query = " |
| 736 |
SELECT reserve_id,borrowernumber,reservedate,itemnumber,waitingdate |
| 715 |
FROM reserves |
737 |
FROM reserves |
| 716 |
WHERE priority='0' |
738 |
WHERE priority='0' |
| 717 |
AND found='W' "; |
739 |
AND found='W' |
| 718 |
if ($frombranch){ |
740 |
"; |
| 719 |
$query .= " AND branchcode=? "; |
741 |
$query .= " AND branchcode=? " if ( $frombranch ); |
| 720 |
} |
|
|
| 721 |
$query .= "ORDER BY waitingdate" ; |
742 |
$query .= "ORDER BY waitingdate" ; |
|
|
743 |
|
| 722 |
my $sth = $dbh->prepare($query); |
744 |
my $sth = $dbh->prepare($query); |
| 723 |
if ($frombranch){ |
745 |
if ($frombranch){ |
| 724 |
$sth->execute($frombranch); |
746 |
$sth->execute($frombranch); |
| 725 |
} |
747 |
} else { |
| 726 |
else { |
748 |
$sth->execute(); |
| 727 |
$sth->execute(); |
749 |
} |
| 728 |
} |
750 |
|
| 729 |
my @transreserv; |
751 |
my @transreserv; |
| 730 |
my $i = 0; |
752 |
my $i = 0; |
| 731 |
while ( my $data = $sth->fetchrow_hashref ) { |
753 |
while ( my $data = $sth->fetchrow_hashref ) { |
|
Lines 923-1031
sub AutoUnsuspendReserves {
Link Here
|
| 923 |
|
945 |
|
| 924 |
=head2 CancelReserve |
946 |
=head2 CancelReserve |
| 925 |
|
947 |
|
| 926 |
&CancelReserve($biblionumber, $itemnumber, $borrowernumber); |
948 |
&CancelReserve( $reserve_id ); |
| 927 |
|
949 |
|
| 928 |
Cancels a reserve. |
950 |
Cancels a reserve. |
| 929 |
|
951 |
|
| 930 |
Use either C<$biblionumber> or C<$itemnumber> to specify the item to |
|
|
| 931 |
cancel, but not both: if both are given, C<&CancelReserve> uses |
| 932 |
C<$itemnumber>. |
| 933 |
|
| 934 |
C<$borrowernumber> is the borrower number of the patron on whose |
| 935 |
behalf the book was reserved. |
| 936 |
|
| 937 |
If C<$biblionumber> was given, C<&CancelReserve> also adjusts the |
| 938 |
priorities of the other people who are waiting on the book. |
| 939 |
|
| 940 |
=cut |
952 |
=cut |
| 941 |
|
953 |
|
| 942 |
sub CancelReserve { |
954 |
sub CancelReserve { |
| 943 |
my ( $biblio, $item, $borr ) = @_; |
955 |
my ( $reserve_id ) = @_; |
| 944 |
my $dbh = C4::Context->dbh; |
956 |
my $dbh = C4::Context->dbh; |
| 945 |
if ( $item and $borr ) { |
|
|
| 946 |
# removing a waiting reserve record.... |
| 947 |
# update the database... |
| 948 |
my $query = " |
| 949 |
UPDATE reserves |
| 950 |
SET cancellationdate = now(), |
| 951 |
found = Null, |
| 952 |
priority = 0 |
| 953 |
WHERE itemnumber = ? |
| 954 |
AND borrowernumber = ? |
| 955 |
"; |
| 956 |
my $sth = $dbh->prepare($query); |
| 957 |
$sth->execute( $item, $borr ); |
| 958 |
$sth->finish; |
| 959 |
$query = " |
| 960 |
INSERT INTO old_reserves |
| 961 |
SELECT * FROM reserves |
| 962 |
WHERE itemnumber = ? |
| 963 |
AND borrowernumber = ? |
| 964 |
"; |
| 965 |
$sth = $dbh->prepare($query); |
| 966 |
$sth->execute( $item, $borr ); |
| 967 |
$query = " |
| 968 |
DELETE FROM reserves |
| 969 |
WHERE itemnumber = ? |
| 970 |
AND borrowernumber = ? |
| 971 |
"; |
| 972 |
$sth = $dbh->prepare($query); |
| 973 |
$sth->execute( $item, $borr ); |
| 974 |
} |
| 975 |
else { |
| 976 |
# removing a reserve record.... |
| 977 |
# get the prioritiy on this record.... |
| 978 |
my $priority; |
| 979 |
my $query = qq/ |
| 980 |
SELECT priority FROM reserves |
| 981 |
WHERE biblionumber = ? |
| 982 |
AND borrowernumber = ? |
| 983 |
AND cancellationdate IS NULL |
| 984 |
AND itemnumber IS NULL |
| 985 |
/; |
| 986 |
my $sth = $dbh->prepare($query); |
| 987 |
$sth->execute( $biblio, $borr ); |
| 988 |
($priority) = $sth->fetchrow_array; |
| 989 |
$sth->finish; |
| 990 |
$query = qq/ |
| 991 |
UPDATE reserves |
| 992 |
SET cancellationdate = now(), |
| 993 |
found = Null, |
| 994 |
priority = 0 |
| 995 |
WHERE biblionumber = ? |
| 996 |
AND borrowernumber = ? |
| 997 |
/; |
| 998 |
|
| 999 |
# update the database, removing the record... |
| 1000 |
$sth = $dbh->prepare($query); |
| 1001 |
$sth->execute( $biblio, $borr ); |
| 1002 |
$sth->finish; |
| 1003 |
|
957 |
|
| 1004 |
$query = qq/ |
958 |
my $query = " |
| 1005 |
INSERT INTO old_reserves |
959 |
UPDATE reserves |
| 1006 |
SELECT * FROM reserves |
960 |
SET cancellationdate = now(), |
| 1007 |
WHERE biblionumber = ? |
961 |
found = Null, |
| 1008 |
AND borrowernumber = ? |
962 |
priority = 0 |
| 1009 |
/; |
963 |
WHERE reserve_id = ? |
| 1010 |
$sth = $dbh->prepare($query); |
964 |
"; |
| 1011 |
$sth->execute( $biblio, $borr ); |
965 |
my $sth = $dbh->prepare($query); |
|
|
966 |
$sth->execute( $reserve_id ); |
| 967 |
$sth->finish; |
| 1012 |
|
968 |
|
| 1013 |
$query = qq/ |
969 |
$query = " |
| 1014 |
DELETE FROM reserves |
970 |
INSERT INTO old_reserves |
| 1015 |
WHERE biblionumber = ? |
971 |
SELECT * FROM reserves |
| 1016 |
AND borrowernumber = ? |
972 |
WHERE reserve_id = ? |
| 1017 |
/; |
973 |
"; |
| 1018 |
$sth = $dbh->prepare($query); |
974 |
$sth = $dbh->prepare($query); |
| 1019 |
$sth->execute( $biblio, $borr ); |
975 |
$sth->execute( $reserve_id ); |
| 1020 |
|
976 |
|
| 1021 |
# now fix the priority on the others.... |
977 |
$query = " |
| 1022 |
_FixPriority( $biblio, $borr ); |
978 |
DELETE FROM reserves |
| 1023 |
} |
979 |
WHERE reserve_id = ? |
|
|
980 |
"; |
| 981 |
$sth = $dbh->prepare($query); |
| 982 |
$sth->execute( $reserve_id ); |
| 983 |
|
| 984 |
# now fix the priority on the others.... |
| 985 |
_FixPriority( $reserve_id ); |
| 1024 |
} |
986 |
} |
| 1025 |
|
987 |
|
| 1026 |
=head2 ModReserve |
988 |
=head2 ModReserve |
| 1027 |
|
989 |
|
| 1028 |
ModReserve($rank, $biblio, $borrower, $branch[, $itemnumber]) |
990 |
ModReserve($rank, $reserve_id, $branch[, $itemnumber]) |
| 1029 |
|
991 |
|
| 1030 |
Change a hold request's priority or cancel it. |
992 |
Change a hold request's priority or cancel it. |
| 1031 |
|
993 |
|
|
Lines 1056-1101
itemnumber and supplying itemnumber.
Link Here
|
| 1056 |
|
1018 |
|
| 1057 |
sub ModReserve { |
1019 |
sub ModReserve { |
| 1058 |
#subroutine to update a reserve |
1020 |
#subroutine to update a reserve |
| 1059 |
my ( $rank, $biblio, $borrower, $branch , $itemnumber, $suspend_until) = @_; |
1021 |
my ( $rank, $reserve_id, $branch , $itemnumber, $suspend_until) = @_; |
| 1060 |
return if $rank eq "W"; |
1022 |
return if $rank eq "W"; |
| 1061 |
return if $rank eq "n"; |
1023 |
return if $rank eq "n"; |
| 1062 |
my $dbh = C4::Context->dbh; |
1024 |
my $dbh = C4::Context->dbh; |
| 1063 |
if ( $rank eq "del" ) { |
1025 |
if ( $rank eq "del" ) { |
| 1064 |
my $query = qq/ |
1026 |
my $query = " |
| 1065 |
UPDATE reserves |
1027 |
UPDATE reserves |
| 1066 |
SET cancellationdate=now() |
1028 |
SET cancellationdate=now() |
| 1067 |
WHERE biblionumber = ? |
1029 |
WHERE reserve_id = ? |
| 1068 |
AND borrowernumber = ? |
1030 |
"; |
| 1069 |
/; |
|
|
| 1070 |
my $sth = $dbh->prepare($query); |
1031 |
my $sth = $dbh->prepare($query); |
| 1071 |
$sth->execute( $biblio, $borrower ); |
1032 |
$sth->execute( $reserve_id ); |
| 1072 |
$sth->finish; |
1033 |
$sth->finish; |
| 1073 |
$query = qq/ |
1034 |
$query = " |
| 1074 |
INSERT INTO old_reserves |
1035 |
INSERT INTO old_reserves |
| 1075 |
SELECT * |
1036 |
SELECT * |
| 1076 |
FROM reserves |
1037 |
FROM reserves |
| 1077 |
WHERE biblionumber = ? |
1038 |
WHERE reserve_id = ? |
| 1078 |
AND borrowernumber = ? |
1039 |
"; |
| 1079 |
/; |
|
|
| 1080 |
$sth = $dbh->prepare($query); |
1040 |
$sth = $dbh->prepare($query); |
| 1081 |
$sth->execute( $biblio, $borrower ); |
1041 |
$sth->execute( $reserve_id ); |
| 1082 |
$query = qq/ |
1042 |
$query = " |
| 1083 |
DELETE FROM reserves |
1043 |
DELETE FROM reserves |
| 1084 |
WHERE biblionumber = ? |
1044 |
WHERE reserve_id = ? |
| 1085 |
AND borrowernumber = ? |
1045 |
"; |
| 1086 |
/; |
|
|
| 1087 |
$sth = $dbh->prepare($query); |
1046 |
$sth = $dbh->prepare($query); |
| 1088 |
$sth->execute( $biblio, $borrower ); |
1047 |
$sth->execute( $reserve_id ); |
| 1089 |
|
1048 |
|
| 1090 |
} |
1049 |
} |
| 1091 |
elsif ($rank =~ /^\d+/ and $rank > 0) { |
1050 |
elsif ($rank =~ /^\d+/ and $rank > 0) { |
| 1092 |
my $query = " |
1051 |
my $query = " |
| 1093 |
UPDATE reserves SET priority = ? ,branchcode = ?, itemnumber = ?, found = NULL, waitingdate = NULL |
1052 |
UPDATE reserves SET priority = ? ,branchcode = ?, itemnumber = ?, found = NULL, waitingdate = NULL |
| 1094 |
WHERE biblionumber = ? |
1053 |
WHERE reserve_id = ? |
| 1095 |
AND borrowernumber = ? |
|
|
| 1096 |
"; |
1054 |
"; |
| 1097 |
my $sth = $dbh->prepare($query); |
1055 |
my $sth = $dbh->prepare($query); |
| 1098 |
$sth->execute( $rank, $branch,$itemnumber, $biblio, $borrower); |
1056 |
$sth->execute( $rank, $branch, $itemnumber, $reserve_id ); |
| 1099 |
$sth->finish; |
1057 |
$sth->finish; |
| 1100 |
|
1058 |
|
| 1101 |
if ( defined( $suspend_until ) ) { |
1059 |
if ( defined( $suspend_until ) ) { |
|
Lines 1107-1113
sub ModReserve {
Link Here
|
| 1107 |
} |
1065 |
} |
| 1108 |
} |
1066 |
} |
| 1109 |
|
1067 |
|
| 1110 |
_FixPriority( $biblio, $borrower, $rank); |
1068 |
_FixPriority( $reserve_id, $rank ); |
| 1111 |
} |
1069 |
} |
| 1112 |
} |
1070 |
} |
| 1113 |
|
1071 |
|
|
Lines 1127-1132
sub ModReserveFill {
Link Here
|
| 1127 |
my ($res) = @_; |
1085 |
my ($res) = @_; |
| 1128 |
my $dbh = C4::Context->dbh; |
1086 |
my $dbh = C4::Context->dbh; |
| 1129 |
# fill in a reserve record.... |
1087 |
# fill in a reserve record.... |
|
|
1088 |
my $reserve_id = $res->{'reserve_id'}; |
| 1130 |
my $biblionumber = $res->{'biblionumber'}; |
1089 |
my $biblionumber = $res->{'biblionumber'}; |
| 1131 |
my $borrowernumber = $res->{'borrowernumber'}; |
1090 |
my $borrowernumber = $res->{'borrowernumber'}; |
| 1132 |
my $resdate = $res->{'reservedate'}; |
1091 |
my $resdate = $res->{'reservedate'}; |
|
Lines 1175-1181
sub ModReserveFill {
Link Here
|
| 1175 |
# now fix the priority on the others (if the priority wasn't |
1134 |
# now fix the priority on the others (if the priority wasn't |
| 1176 |
# already sorted!).... |
1135 |
# already sorted!).... |
| 1177 |
unless ( $priority == 0 ) { |
1136 |
unless ( $priority == 0 ) { |
| 1178 |
_FixPriority( $biblionumber, $borrowernumber ); |
1137 |
_FixPriority( $reserve_id ); |
| 1179 |
} |
1138 |
} |
| 1180 |
} |
1139 |
} |
| 1181 |
|
1140 |
|
|
Lines 1302-1321
Reduce the values of queuded list
Link Here
|
| 1302 |
=cut |
1261 |
=cut |
| 1303 |
|
1262 |
|
| 1304 |
sub ModReserveMinusPriority { |
1263 |
sub ModReserveMinusPriority { |
| 1305 |
my ( $itemnumber, $borrowernumber, $biblionumber ) = @_; |
1264 |
my ( $itemnumber, $reserve_id ) = @_; |
| 1306 |
|
1265 |
|
| 1307 |
#first step update the value of the first person on reserv |
1266 |
#first step update the value of the first person on reserv |
| 1308 |
my $dbh = C4::Context->dbh; |
1267 |
my $dbh = C4::Context->dbh; |
| 1309 |
my $query = " |
1268 |
my $query = " |
| 1310 |
UPDATE reserves |
1269 |
UPDATE reserves |
| 1311 |
SET priority = 0 , itemnumber = ? |
1270 |
SET priority = 0 , itemnumber = ? |
| 1312 |
WHERE borrowernumber=? |
1271 |
WHERE reserve_id = ? |
| 1313 |
AND biblionumber=? |
|
|
| 1314 |
"; |
1272 |
"; |
| 1315 |
my $sth_upd = $dbh->prepare($query); |
1273 |
my $sth_upd = $dbh->prepare($query); |
| 1316 |
$sth_upd->execute( $itemnumber, $borrowernumber, $biblionumber ); |
1274 |
$sth_upd->execute( $itemnumber, $reserve_id ); |
| 1317 |
# second step update all others reservs |
1275 |
# second step update all others reservs |
| 1318 |
_FixPriority($biblionumber, $borrowernumber, '0'); |
1276 |
_FixPriority( $reserve_id, '0'); |
| 1319 |
} |
1277 |
} |
| 1320 |
|
1278 |
|
| 1321 |
=head2 GetReserveInfo |
1279 |
=head2 GetReserveInfo |
|
Lines 1328-1334
Current implementation this query should have a single result.
Link Here
|
| 1328 |
=cut |
1286 |
=cut |
| 1329 |
|
1287 |
|
| 1330 |
sub GetReserveInfo { |
1288 |
sub GetReserveInfo { |
| 1331 |
my ( $borrowernumber, $biblionumber ) = @_; |
1289 |
my ( $reserve_id ) = @_; |
| 1332 |
my $dbh = C4::Context->dbh; |
1290 |
my $dbh = C4::Context->dbh; |
| 1333 |
my $strsth="SELECT |
1291 |
my $strsth="SELECT |
| 1334 |
reservedate, |
1292 |
reservedate, |
|
Lines 1362-1372
sub GetReserveInfo {
Link Here
|
| 1362 |
LEFT JOIN items USING(itemnumber) |
1320 |
LEFT JOIN items USING(itemnumber) |
| 1363 |
LEFT JOIN borrowers USING(borrowernumber) |
1321 |
LEFT JOIN borrowers USING(borrowernumber) |
| 1364 |
LEFT JOIN biblio ON (reserves.biblionumber=biblio.biblionumber) |
1322 |
LEFT JOIN biblio ON (reserves.biblionumber=biblio.biblionumber) |
| 1365 |
WHERE |
1323 |
WHERE reserves.reserve_id = ?"; |
| 1366 |
reserves.borrowernumber=? |
|
|
| 1367 |
AND reserves.biblionumber=?"; |
| 1368 |
my $sth = $dbh->prepare($strsth); |
1324 |
my $sth = $dbh->prepare($strsth); |
| 1369 |
$sth->execute($borrowernumber,$biblionumber); |
1325 |
$sth->execute($reserve_id); |
| 1370 |
|
1326 |
|
| 1371 |
my $data = $sth->fetchrow_hashref; |
1327 |
my $data = $sth->fetchrow_hashref; |
| 1372 |
return $data; |
1328 |
return $data; |
|
Lines 1455-1483
Input: $where is 'up', 'down', 'top' or 'bottom'. Biblionumber, Date reserve was
Link Here
|
| 1455 |
=cut |
1411 |
=cut |
| 1456 |
|
1412 |
|
| 1457 |
sub AlterPriority { |
1413 |
sub AlterPriority { |
| 1458 |
my ( $where, $borrowernumber, $biblionumber ) = @_; |
1414 |
my ( $where, $reserve_id ) = @_; |
| 1459 |
|
1415 |
#warn "C4::Reserves::AlterPriority( $where, $reserve_id )"; |
| 1460 |
my $dbh = C4::Context->dbh; |
1416 |
my $dbh = C4::Context->dbh; |
| 1461 |
|
1417 |
|
| 1462 |
## Find this reserve |
1418 |
my $reserve = GetReserve( $reserve_id ); |
| 1463 |
my $sth = $dbh->prepare('SELECT * FROM reserves WHERE biblionumber = ? AND borrowernumber = ? AND cancellationdate IS NULL'); |
|
|
| 1464 |
$sth->execute( $biblionumber, $borrowernumber ); |
| 1465 |
my $reserve = $sth->fetchrow_hashref(); |
| 1466 |
$sth->finish(); |
| 1467 |
|
1419 |
|
| 1468 |
if ( $where eq 'up' || $where eq 'down' ) { |
1420 |
if ( $where eq 'up' || $where eq 'down' ) { |
| 1469 |
|
1421 |
|
| 1470 |
my $priority = $reserve->{'priority'}; |
1422 |
my $priority = $reserve->{'priority'}; |
| 1471 |
$priority = $where eq 'up' ? $priority - 1 : $priority + 1; |
1423 |
$priority = $where eq 'up' ? $priority - 1 : $priority + 1; |
| 1472 |
_FixPriority( $biblionumber, $borrowernumber, $priority ) |
1424 |
_FixPriority( $reserve_id, $priority ) |
| 1473 |
|
1425 |
|
| 1474 |
} elsif ( $where eq 'top' ) { |
1426 |
} elsif ( $where eq 'top' ) { |
| 1475 |
|
1427 |
|
| 1476 |
_FixPriority( $biblionumber, $borrowernumber, '1' ) |
1428 |
_FixPriority( $reserve_id, '1' ) |
| 1477 |
|
1429 |
|
| 1478 |
} elsif ( $where eq 'bottom' ) { |
1430 |
} elsif ( $where eq 'bottom' ) { |
| 1479 |
|
1431 |
|
| 1480 |
_FixPriority( $biblionumber, $borrowernumber, '999999' ) |
1432 |
_FixPriority( $reserve_id, '999999' ) |
| 1481 |
|
1433 |
|
| 1482 |
} |
1434 |
} |
| 1483 |
} |
1435 |
} |
|
Lines 1491-1512
This function sets the lowestPriority field to true if is false, and false if it
Link Here
|
| 1491 |
=cut |
1443 |
=cut |
| 1492 |
|
1444 |
|
| 1493 |
sub ToggleLowestPriority { |
1445 |
sub ToggleLowestPriority { |
| 1494 |
my ( $borrowernumber, $biblionumber ) = @_; |
1446 |
my ( $reserve_id ) = @_; |
| 1495 |
|
1447 |
|
| 1496 |
my $dbh = C4::Context->dbh; |
1448 |
my $dbh = C4::Context->dbh; |
| 1497 |
|
1449 |
|
| 1498 |
my $sth = $dbh->prepare( |
1450 |
my $sth = $dbh->prepare( "UPDATE reserves SET lowestPriority = NOT lowestPriority WHERE reserve_id = ?"); |
| 1499 |
"UPDATE reserves SET lowestPriority = NOT lowestPriority |
1451 |
$sth->execute( $reserve_id ); |
| 1500 |
WHERE biblionumber = ? |
|
|
| 1501 |
AND borrowernumber = ?" |
| 1502 |
); |
| 1503 |
$sth->execute( |
| 1504 |
$biblionumber, |
| 1505 |
$borrowernumber, |
| 1506 |
); |
| 1507 |
$sth->finish; |
1452 |
$sth->finish; |
| 1508 |
|
1453 |
|
| 1509 |
_FixPriority( $biblionumber, $borrowernumber, '999999' ); |
1454 |
_FixPriority( $reserve_id, '999999' ); |
| 1510 |
} |
1455 |
} |
| 1511 |
|
1456 |
|
| 1512 |
=head2 ToggleSuspend |
1457 |
=head2 ToggleSuspend |
|
Lines 1603-1609
sub SuspendAll {
Link Here
|
| 1603 |
|
1548 |
|
| 1604 |
=head2 _FixPriority |
1549 |
=head2 _FixPriority |
| 1605 |
|
1550 |
|
| 1606 |
&_FixPriority($biblio,$borrowernumber,$rank,$ignoreSetLowestRank); |
1551 |
&_FixPriority( $reserve_id, $rank, $ignoreSetLowestRank); |
| 1607 |
|
1552 |
|
| 1608 |
Only used internally (so don't export it) |
1553 |
Only used internally (so don't export it) |
| 1609 |
Changed how this functions works # |
1554 |
Changed how this functions works # |
|
Lines 1615-1655
in new priority rank
Link Here
|
| 1615 |
=cut |
1560 |
=cut |
| 1616 |
|
1561 |
|
| 1617 |
sub _FixPriority { |
1562 |
sub _FixPriority { |
| 1618 |
my ( $biblio, $borrowernumber, $rank, $ignoreSetLowestRank ) = @_; |
1563 |
my ( $reserve_id, $rank, $ignoreSetLowestRank ) = @_; |
| 1619 |
my $dbh = C4::Context->dbh; |
1564 |
my $dbh = C4::Context->dbh; |
| 1620 |
if ( $rank eq "del" ) { |
1565 |
|
| 1621 |
CancelReserve( $biblio, undef, $borrowernumber ); |
1566 |
my $res = GetReserve( $reserve_id ); |
| 1622 |
} |
1567 |
|
| 1623 |
if ( $rank eq "W" || $rank eq "0" ) { |
1568 |
if ( $rank eq "del" ) { |
|
|
1569 |
CancelReserve( $reserve_id ); |
| 1570 |
} |
| 1571 |
elsif ( $rank eq "W" || $rank eq "0" ) { |
| 1624 |
|
1572 |
|
| 1625 |
# make sure priority for waiting or in-transit items is 0 |
1573 |
# make sure priority for waiting or in-transit items is 0 |
| 1626 |
my $query = qq/ |
1574 |
my $query = " |
| 1627 |
UPDATE reserves |
1575 |
UPDATE reserves |
| 1628 |
SET priority = 0 |
1576 |
SET priority = 0 |
| 1629 |
WHERE biblionumber = ? |
1577 |
WHERE reserve_id = ? |
| 1630 |
AND borrowernumber = ? |
1578 |
AND found IN ('W', 'T') |
| 1631 |
AND found IN ('W', 'T') |
1579 |
"; |
| 1632 |
/; |
|
|
| 1633 |
my $sth = $dbh->prepare($query); |
1580 |
my $sth = $dbh->prepare($query); |
| 1634 |
$sth->execute( $biblio, $borrowernumber ); |
1581 |
$sth->execute( $reserve_id ); |
| 1635 |
} |
1582 |
} |
| 1636 |
my @priority; |
1583 |
my @priority; |
| 1637 |
my @reservedates; |
1584 |
my @reservedates; |
| 1638 |
|
1585 |
|
| 1639 |
# get whats left |
1586 |
# get whats left |
| 1640 |
# FIXME adding a new security in returned elements for changing priority, |
1587 |
my $query = " |
| 1641 |
# now, we don't care anymore any reservations with itemnumber linked (suppose a waiting reserve) |
1588 |
SELECT reserve_id, borrowernumber, reservedate, constrainttype |
| 1642 |
# This is wrong a waiting reserve has W set |
|
|
| 1643 |
# The assumption that having an itemnumber set means waiting is wrong and should be corrected any place it occurs |
| 1644 |
my $query = qq/ |
| 1645 |
SELECT borrowernumber, reservedate, constrainttype |
| 1646 |
FROM reserves |
1589 |
FROM reserves |
| 1647 |
WHERE biblionumber = ? |
1590 |
WHERE biblionumber = ? |
| 1648 |
AND ((found <> 'W' AND found <> 'T') or found is NULL) |
1591 |
AND ((found <> 'W' AND found <> 'T') OR found IS NULL) |
| 1649 |
ORDER BY priority ASC |
1592 |
ORDER BY priority ASC |
| 1650 |
/; |
1593 |
"; |
| 1651 |
my $sth = $dbh->prepare($query); |
1594 |
my $sth = $dbh->prepare($query); |
| 1652 |
$sth->execute($biblio); |
1595 |
$sth->execute( $res->{'biblionumber'} ); |
| 1653 |
while ( my $line = $sth->fetchrow_hashref ) { |
1596 |
while ( my $line = $sth->fetchrow_hashref ) { |
| 1654 |
push( @reservedates, $line ); |
1597 |
push( @reservedates, $line ); |
| 1655 |
push( @priority, $line ); |
1598 |
push( @priority, $line ); |
|
Lines 1659-1665
sub _FixPriority {
Link Here
|
| 1659 |
my $i; |
1602 |
my $i; |
| 1660 |
my $key = -1; # to allow for 0 to be a valid result |
1603 |
my $key = -1; # to allow for 0 to be a valid result |
| 1661 |
for ( $i = 0 ; $i < @priority ; $i++ ) { |
1604 |
for ( $i = 0 ; $i < @priority ; $i++ ) { |
| 1662 |
if ( $borrowernumber == $priority[$i]->{'borrowernumber'} ) { |
1605 |
if ( $reserve_id == $priority[$i]->{'reserve_id'} ) { |
| 1663 |
$key = $i; # save the index |
1606 |
$key = $i; # save the index |
| 1664 |
last; |
1607 |
last; |
| 1665 |
} |
1608 |
} |
|
Lines 1675-1703
sub _FixPriority {
Link Here
|
| 1675 |
|
1618 |
|
| 1676 |
# now fix the priority on those that are left.... |
1619 |
# now fix the priority on those that are left.... |
| 1677 |
$query = " |
1620 |
$query = " |
| 1678 |
UPDATE reserves |
1621 |
UPDATE reserves |
| 1679 |
SET priority = ? |
1622 |
SET priority = ? |
| 1680 |
WHERE biblionumber = ? |
1623 |
WHERE reserve_id = ? |
| 1681 |
AND borrowernumber = ? |
|
|
| 1682 |
AND reservedate = ? |
| 1683 |
AND found IS NULL |
| 1684 |
"; |
1624 |
"; |
| 1685 |
$sth = $dbh->prepare($query); |
1625 |
$sth = $dbh->prepare($query); |
| 1686 |
for ( my $j = 0 ; $j < @priority ; $j++ ) { |
1626 |
for ( my $j = 0 ; $j < @priority ; $j++ ) { |
| 1687 |
$sth->execute( |
1627 |
$sth->execute( |
| 1688 |
$j + 1, $biblio, |
1628 |
$j + 1, |
| 1689 |
$priority[$j]->{'borrowernumber'}, |
1629 |
$priority[$j]->{'reserve_id'} |
| 1690 |
$priority[$j]->{'reservedate'} |
|
|
| 1691 |
); |
1630 |
); |
| 1692 |
$sth->finish; |
1631 |
$sth->finish; |
| 1693 |
} |
1632 |
} |
| 1694 |
|
1633 |
|
| 1695 |
$sth = $dbh->prepare( "SELECT borrowernumber FROM reserves WHERE lowestPriority = 1 ORDER BY priority" ); |
1634 |
$sth = $dbh->prepare( "SELECT reserve_id FROM reserves WHERE lowestPriority = 1 ORDER BY priority" ); |
| 1696 |
$sth->execute(); |
1635 |
$sth->execute(); |
| 1697 |
|
1636 |
|
| 1698 |
unless ( $ignoreSetLowestRank ) { |
1637 |
unless ( $ignoreSetLowestRank ) { |
| 1699 |
while ( my $res = $sth->fetchrow_hashref() ) { |
1638 |
while ( my $res = $sth->fetchrow_hashref() ) { |
| 1700 |
_FixPriority( $biblio, $res->{'borrowernumber'}, '999999', 1 ); |
1639 |
_FixPriority( $res->{'reserve_id'}, '999999', 1 ); |
| 1701 |
} |
1640 |
} |
| 1702 |
} |
1641 |
} |
| 1703 |
} |
1642 |
} |
|
Lines 1967-1973
sub _ShiftPriorityByDateAndPriority {
Link Here
|
| 1967 |
|
1906 |
|
| 1968 |
=head2 MoveReserve |
1907 |
=head2 MoveReserve |
| 1969 |
|
1908 |
|
| 1970 |
MoveReserve( $itemnumber, $borrowernumber, $cancelreserve ) |
1909 |
MoveReserve( $reserve_id, $cancelreserve ) |
| 1971 |
|
1910 |
|
| 1972 |
Use when checking out an item to handle reserves |
1911 |
Use when checking out an item to handle reserves |
| 1973 |
If $cancelreserve boolean is set to true, it will remove existing reserve |
1912 |
If $cancelreserve boolean is set to true, it will remove existing reserve |