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 417-424
This function return 1 if an item can be issued by this borrower.
Link Here
|
417 |
|
437 |
|
418 |
sub CanItemBeReserved{ |
438 |
sub CanItemBeReserved{ |
419 |
my ($borrowernumber, $itemnumber) = @_; |
439 |
my ($borrowernumber, $itemnumber) = @_; |
420 |
|
440 |
|
421 |
my $dbh = C4::Context->dbh; |
441 |
my $dbh = C4::Context->dbh; |
422 |
my $allowedreserves = 0; |
442 |
my $allowedreserves = 0; |
423 |
|
443 |
|
424 |
my $controlbranch = C4::Context->preference('ReservesControlBranch'); |
444 |
my $controlbranch = C4::Context->preference('ReservesControlBranch'); |
Lines 428-454
sub CanItemBeReserved{
Link Here
|
428 |
my $item = GetItem($itemnumber); |
448 |
my $item = GetItem($itemnumber); |
429 |
my $borrower = C4::Members::GetMember('borrowernumber'=>$borrowernumber); |
449 |
my $borrower = C4::Members::GetMember('borrowernumber'=>$borrowernumber); |
430 |
|
450 |
|
431 |
# we retrieve user rights on this itemtype and branchcode |
451 |
my $querycount = " |
432 |
my $sth = $dbh->prepare("SELECT categorycode, itemtype, branchcode, reservesallowed |
452 |
SELECT count(*) AS count |
433 |
FROM issuingrules |
453 |
FROM reserves |
434 |
WHERE (categorycode in (?,'*') ) |
454 |
LEFT JOIN items USING (itemnumber) |
435 |
AND (itemtype IN (?,'*')) |
455 |
LEFT JOIN biblioitems ON (reserves.biblionumber=biblioitems.biblionumber) |
436 |
AND (branchcode IN (?,'*')) |
456 |
LEFT JOIN borrowers USING (borrowernumber) |
437 |
ORDER BY |
457 |
WHERE borrowernumber = ? |
438 |
categorycode DESC, |
458 |
"; |
439 |
itemtype DESC, |
|
|
440 |
branchcode DESC;" |
441 |
); |
442 |
|
443 |
my $querycount ="SELECT |
444 |
count(*) as count |
445 |
FROM reserves |
446 |
LEFT JOIN items USING (itemnumber) |
447 |
LEFT JOIN biblioitems ON (reserves.biblionumber=biblioitems.biblionumber) |
448 |
LEFT JOIN borrowers USING (borrowernumber) |
449 |
WHERE borrowernumber = ? |
450 |
"; |
451 |
|
452 |
|
459 |
|
453 |
my $itemtype = $item->{$itype}; |
460 |
my $itemtype = $item->{$itype}; |
454 |
my $categorycode = $borrower->{categorycode}; |
461 |
my $categorycode = $borrower->{categorycode}; |
Lines 464-471
sub CanItemBeReserved{
Link Here
|
464 |
} |
471 |
} |
465 |
|
472 |
|
466 |
# we retrieve rights |
473 |
# we retrieve rights |
467 |
$sth->execute($categorycode, $itemtype, $branchcode); |
474 |
my $rights = C4::Circulation::GetIssuingRule( $categorycode, $itemtype, $branchcode ); |
468 |
if(my $rights = $sth->fetchrow_hashref()){ |
475 |
if ( defined $rights ) { |
469 |
$itemtype = $rights->{itemtype}; |
476 |
$itemtype = $rights->{itemtype}; |
470 |
$allowedreserves = $rights->{reservesallowed}; |
477 |
$allowedreserves = $rights->{reservesallowed}; |
471 |
}else{ |
478 |
}else{ |
Lines 489-500
sub CanItemBeReserved{
Link Here
|
489 |
if(my $rowcount = $sthcount->fetchrow_hashref()){ |
496 |
if(my $rowcount = $sthcount->fetchrow_hashref()){ |
490 |
$reservecount = $rowcount->{count}; |
497 |
$reservecount = $rowcount->{count}; |
491 |
} |
498 |
} |
492 |
|
|
|
493 |
# we check if it's ok or not |
499 |
# we check if it's ok or not |
494 |
if( $reservecount < $allowedreserves ){ |
500 |
if( $reservecount >= $allowedreserves ){ ## too many reserves |
495 |
return 1; |
|
|
496 |
}else{ |
497 |
return 0; |
501 |
return 0; |
|
|
502 |
}else{ |
503 |
return 1; |
498 |
} |
504 |
} |
499 |
} |
505 |
} |
500 |
#-------------------------------------------------------------------------------- |
506 |
#-------------------------------------------------------------------------------- |
Lines 511-521
sub GetReserveCount {
Link Here
|
511 |
|
517 |
|
512 |
my $dbh = C4::Context->dbh; |
518 |
my $dbh = C4::Context->dbh; |
513 |
|
519 |
|
514 |
my $query = ' |
520 |
my $query = " |
515 |
SELECT COUNT(*) AS counter |
521 |
SELECT COUNT(*) AS counter |
516 |
FROM reserves |
522 |
FROM reserves |
517 |
WHERE borrowernumber = ? |
523 |
WHERE borrowernumber = ? |
518 |
'; |
524 |
"; |
519 |
my $sth = $dbh->prepare($query); |
525 |
my $sth = $dbh->prepare($query); |
520 |
$sth->execute($borrowernumber); |
526 |
$sth->execute($borrowernumber); |
521 |
my $row = $sth->fetchrow_hashref; |
527 |
my $row = $sth->fetchrow_hashref; |
Lines 542-549
sub GetOtherReserves {
Link Here
|
542 |
#minus priorities of others reservs |
548 |
#minus priorities of others reservs |
543 |
ModReserveMinusPriority( |
549 |
ModReserveMinusPriority( |
544 |
$itemnumber, |
550 |
$itemnumber, |
545 |
$checkreserves->{'borrowernumber'}, |
551 |
$checkreserves->{'reserve_id'}, |
546 |
$iteminfo->{'biblionumber'} |
|
|
547 |
); |
552 |
); |
548 |
|
553 |
|
549 |
#launch the subroutine dotransfer |
554 |
#launch the subroutine dotransfer |
Lines 560-567
sub GetOtherReserves {
Link Here
|
560 |
$messages->{'waiting'} = 1; |
565 |
$messages->{'waiting'} = 1; |
561 |
ModReserveMinusPriority( |
566 |
ModReserveMinusPriority( |
562 |
$itemnumber, |
567 |
$itemnumber, |
563 |
$checkreserves->{'borrowernumber'}, |
568 |
$checkreserves->{'reserve_id'}, |
564 |
$iteminfo->{'biblionumber'} |
|
|
565 |
); |
569 |
); |
566 |
ModReserveStatus($itemnumber,'W'); |
570 |
ModReserveStatus($itemnumber,'W'); |
567 |
} |
571 |
} |
Lines 687-693
sub GetReservesToBranch {
Link Here
|
687 |
my ( $frombranch ) = @_; |
691 |
my ( $frombranch ) = @_; |
688 |
my $dbh = C4::Context->dbh; |
692 |
my $dbh = C4::Context->dbh; |
689 |
my $sth = $dbh->prepare( |
693 |
my $sth = $dbh->prepare( |
690 |
"SELECT borrowernumber,reservedate,itemnumber,timestamp |
694 |
"SELECT reserve_id,borrowernumber,reservedate,itemnumber,timestamp |
691 |
FROM reserves |
695 |
FROM reserves |
692 |
WHERE priority='0' |
696 |
WHERE priority='0' |
693 |
AND branchcode=?" |
697 |
AND branchcode=?" |
Lines 710-731
sub GetReservesToBranch {
Link Here
|
710 |
|
714 |
|
711 |
sub GetReservesForBranch { |
715 |
sub GetReservesForBranch { |
712 |
my ($frombranch) = @_; |
716 |
my ($frombranch) = @_; |
713 |
my $dbh = C4::Context->dbh; |
717 |
my $dbh = C4::Context->dbh; |
714 |
my $query = "SELECT borrowernumber,reservedate,itemnumber,waitingdate |
718 |
|
|
|
719 |
my $query = " |
720 |
SELECT reserve_id,borrowernumber,reservedate,itemnumber,waitingdate |
715 |
FROM reserves |
721 |
FROM reserves |
716 |
WHERE priority='0' |
722 |
WHERE priority='0' |
717 |
AND found='W' "; |
723 |
AND found='W' |
718 |
if ($frombranch){ |
724 |
"; |
719 |
$query .= " AND branchcode=? "; |
725 |
$query .= " AND branchcode=? " if ( $frombranch ); |
720 |
} |
|
|
721 |
$query .= "ORDER BY waitingdate" ; |
726 |
$query .= "ORDER BY waitingdate" ; |
|
|
727 |
|
722 |
my $sth = $dbh->prepare($query); |
728 |
my $sth = $dbh->prepare($query); |
723 |
if ($frombranch){ |
729 |
if ($frombranch){ |
724 |
$sth->execute($frombranch); |
730 |
$sth->execute($frombranch); |
725 |
} |
731 |
} else { |
726 |
else { |
732 |
$sth->execute(); |
727 |
$sth->execute(); |
733 |
} |
728 |
} |
734 |
|
729 |
my @transreserv; |
735 |
my @transreserv; |
730 |
my $i = 0; |
736 |
my $i = 0; |
731 |
while ( my $data = $sth->fetchrow_hashref ) { |
737 |
while ( my $data = $sth->fetchrow_hashref ) { |
Lines 880-886
sub CancelExpiredReserves {
Link Here
|
880 |
$sth->execute(); |
886 |
$sth->execute(); |
881 |
|
887 |
|
882 |
while ( my $res = $sth->fetchrow_hashref() ) { |
888 |
while ( my $res = $sth->fetchrow_hashref() ) { |
883 |
CancelReserve( $res->{'biblionumber'}, '', $res->{'borrowernumber'} ); |
889 |
CancelReserve({ reserve_id => $res->{'reserve_id'} }); |
884 |
} |
890 |
} |
885 |
|
891 |
|
886 |
# Cancel reserves that have been waiting too long |
892 |
# Cancel reserves that have been waiting too long |
Lines 897-903
sub CancelExpiredReserves {
Link Here
|
897 |
manualinvoice($res->{'borrowernumber'}, $res->{'itemnumber'}, 'Hold waiting too long', 'F', $charge); |
903 |
manualinvoice($res->{'borrowernumber'}, $res->{'itemnumber'}, 'Hold waiting too long', 'F', $charge); |
898 |
} |
904 |
} |
899 |
|
905 |
|
900 |
CancelReserve( $res->{'biblionumber'}, '', $res->{'borrowernumber'} ); |
906 |
CancelReserve({ reserve_id => $res->{'reserve_id'} }); |
901 |
} |
907 |
} |
902 |
} |
908 |
} |
903 |
|
909 |
|
Lines 923-1031
sub AutoUnsuspendReserves {
Link Here
|
923 |
|
929 |
|
924 |
=head2 CancelReserve |
930 |
=head2 CancelReserve |
925 |
|
931 |
|
926 |
&CancelReserve($biblionumber, $itemnumber, $borrowernumber); |
932 |
CancelReserve({ reserve_id => $reserve_id, [ biblionumber => $biblionumber, borrowernumber => $borrrowernumber, itemnumber => $itemnumber ] }); |
927 |
|
933 |
|
928 |
Cancels a reserve. |
934 |
Cancels a reserve. |
929 |
|
935 |
|
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 |
936 |
=cut |
941 |
|
937 |
|
942 |
sub CancelReserve { |
938 |
sub CancelReserve { |
943 |
my ( $biblio, $item, $borr ) = @_; |
939 |
my ( $params ) = @_; |
|
|
940 |
|
941 |
my $reserve_id = $params->{'reserve_id'}; |
942 |
$reserve_id = GetReserveId( $params ) unless ( $reserve_id ); |
943 |
|
944 |
return unless ( $reserve_id ); |
945 |
|
944 |
my $dbh = C4::Context->dbh; |
946 |
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 |
|
947 |
|
1004 |
$query = qq/ |
948 |
my $query = " |
1005 |
INSERT INTO old_reserves |
949 |
UPDATE reserves |
1006 |
SELECT * FROM reserves |
950 |
SET cancellationdate = now(), |
1007 |
WHERE biblionumber = ? |
951 |
found = Null, |
1008 |
AND borrowernumber = ? |
952 |
priority = 0 |
1009 |
/; |
953 |
WHERE reserve_id = ? |
1010 |
$sth = $dbh->prepare($query); |
954 |
"; |
1011 |
$sth->execute( $biblio, $borr ); |
955 |
my $sth = $dbh->prepare($query); |
|
|
956 |
$sth->execute( $reserve_id ); |
957 |
$sth->finish; |
1012 |
|
958 |
|
1013 |
$query = qq/ |
959 |
$query = " |
1014 |
DELETE FROM reserves |
960 |
INSERT INTO old_reserves |
1015 |
WHERE biblionumber = ? |
961 |
SELECT * FROM reserves |
1016 |
AND borrowernumber = ? |
962 |
WHERE reserve_id = ? |
1017 |
/; |
963 |
"; |
1018 |
$sth = $dbh->prepare($query); |
964 |
$sth = $dbh->prepare($query); |
1019 |
$sth->execute( $biblio, $borr ); |
965 |
$sth->execute( $reserve_id ); |
1020 |
|
966 |
|
1021 |
# now fix the priority on the others.... |
967 |
$query = " |
1022 |
_FixPriority( $biblio, $borr ); |
968 |
DELETE FROM reserves |
1023 |
} |
969 |
WHERE reserve_id = ? |
|
|
970 |
"; |
971 |
$sth = $dbh->prepare($query); |
972 |
$sth->execute( $reserve_id ); |
973 |
|
974 |
# now fix the priority on the others.... |
975 |
_FixPriority( $reserve_id ); |
1024 |
} |
976 |
} |
1025 |
|
977 |
|
1026 |
=head2 ModReserve |
978 |
=head2 ModReserve |
1027 |
|
979 |
|
1028 |
ModReserve($rank, $biblio, $borrower, $branch[, $itemnumber]) |
980 |
ModReserve({ rank => $rank, |
|
|
981 |
reserve_id => $reserve_id, |
982 |
branchcode => $branchcode |
983 |
[, itemnumber => $itemnumber ] |
984 |
[, biblionumber => $biblionumber, $borrowernumber => $borrowernumber ] |
985 |
}); |
1029 |
|
986 |
|
1030 |
Change a hold request's priority or cancel it. |
987 |
Change a hold request's priority or cancel it. |
1031 |
|
988 |
|
Lines 1055-1113
itemnumber and supplying itemnumber.
Link Here
|
1055 |
=cut |
1012 |
=cut |
1056 |
|
1013 |
|
1057 |
sub ModReserve { |
1014 |
sub ModReserve { |
1058 |
#subroutine to update a reserve |
1015 |
my ( $params ) = @_; |
1059 |
my ( $rank, $biblio, $borrower, $branch , $itemnumber, $suspend_until) = @_; |
1016 |
|
1060 |
return if $rank eq "W"; |
1017 |
my $rank = $params->{'rank'}; |
1061 |
return if $rank eq "n"; |
1018 |
my $reserve_id = $params->{'reserve_id'}; |
|
|
1019 |
my $branchcode = $params->{'branchcode'}; |
1020 |
my $itemnumber = $params->{'itemnumber'}; |
1021 |
my $suspend_until = $params->{'suspend_until'}; |
1022 |
my $borrowernumber = $params->{'borrowernumber'}; |
1023 |
my $biblionumber = $params->{'biblionumber'}; |
1024 |
|
1025 |
return if $rank eq "W"; |
1026 |
return if $rank eq "n"; |
1027 |
|
1028 |
return unless ( $reserve_id || ( $borrowernumber && ( $biblionumber || $itemnumber ) ) ); |
1029 |
$reserve_id = GetReserveId({ biblionumber => $biblionumber, borrowernumber => $borrowernumber, itemnumber => $itemnumber }) unless ( $reserve_id ); |
1030 |
|
1062 |
my $dbh = C4::Context->dbh; |
1031 |
my $dbh = C4::Context->dbh; |
1063 |
if ( $rank eq "del" ) { |
1032 |
if ( $rank eq "del" ) { |
1064 |
my $query = qq/ |
1033 |
my $query = " |
1065 |
UPDATE reserves |
1034 |
UPDATE reserves |
1066 |
SET cancellationdate=now() |
1035 |
SET cancellationdate=now() |
1067 |
WHERE biblionumber = ? |
1036 |
WHERE reserve_id = ? |
1068 |
AND borrowernumber = ? |
1037 |
"; |
1069 |
/; |
|
|
1070 |
my $sth = $dbh->prepare($query); |
1038 |
my $sth = $dbh->prepare($query); |
1071 |
$sth->execute( $biblio, $borrower ); |
1039 |
$sth->execute( $reserve_id ); |
1072 |
$sth->finish; |
1040 |
$sth->finish; |
1073 |
$query = qq/ |
1041 |
$query = " |
1074 |
INSERT INTO old_reserves |
1042 |
INSERT INTO old_reserves |
1075 |
SELECT * |
1043 |
SELECT * |
1076 |
FROM reserves |
1044 |
FROM reserves |
1077 |
WHERE biblionumber = ? |
1045 |
WHERE reserve_id = ? |
1078 |
AND borrowernumber = ? |
1046 |
"; |
1079 |
/; |
|
|
1080 |
$sth = $dbh->prepare($query); |
1047 |
$sth = $dbh->prepare($query); |
1081 |
$sth->execute( $biblio, $borrower ); |
1048 |
$sth->execute( $reserve_id ); |
1082 |
$query = qq/ |
1049 |
$query = " |
1083 |
DELETE FROM reserves |
1050 |
DELETE FROM reserves |
1084 |
WHERE biblionumber = ? |
1051 |
WHERE reserve_id = ? |
1085 |
AND borrowernumber = ? |
1052 |
"; |
1086 |
/; |
|
|
1087 |
$sth = $dbh->prepare($query); |
1053 |
$sth = $dbh->prepare($query); |
1088 |
$sth->execute( $biblio, $borrower ); |
1054 |
$sth->execute( $reserve_id ); |
1089 |
|
1055 |
|
1090 |
} |
1056 |
} |
1091 |
elsif ($rank =~ /^\d+/ and $rank > 0) { |
1057 |
elsif ($rank =~ /^\d+/ and $rank > 0) { |
1092 |
my $query = " |
1058 |
my $query = " |
1093 |
UPDATE reserves SET priority = ? ,branchcode = ?, itemnumber = ?, found = NULL, waitingdate = NULL |
1059 |
UPDATE reserves SET priority = ? ,branchcode = ?, itemnumber = ?, found = NULL, waitingdate = NULL |
1094 |
WHERE biblionumber = ? |
1060 |
WHERE reserve_id = ? |
1095 |
AND borrowernumber = ? |
|
|
1096 |
"; |
1061 |
"; |
1097 |
my $sth = $dbh->prepare($query); |
1062 |
my $sth = $dbh->prepare($query); |
1098 |
$sth->execute( $rank, $branch,$itemnumber, $biblio, $borrower); |
1063 |
$sth->execute( $rank, $branchcode, $itemnumber, $reserve_id ); |
1099 |
$sth->finish; |
1064 |
$sth->finish; |
1100 |
|
1065 |
|
1101 |
if ( defined( $suspend_until ) ) { |
1066 |
if ( defined( $suspend_until ) ) { |
1102 |
if ( $suspend_until ) { |
1067 |
if ( $suspend_until ) { |
1103 |
$suspend_until = C4::Dates->new( $suspend_until )->output("iso"); |
1068 |
$suspend_until = C4::Dates->new( $suspend_until )->output("iso"); |
1104 |
$dbh->do("UPDATE reserves SET suspend = 1, suspend_until = ? WHERE biblionumber = ? AND borrowernumber = ?", undef, ( $suspend_until, $biblio, $borrower ) ); |
1069 |
$dbh->do("UPDATE reserves SET suspend = 1, suspend_until = ? WHERE reserve_id = ?", undef, ( $suspend_until, $reserve_id ) ); |
1105 |
} else { |
1070 |
} else { |
1106 |
$dbh->do("UPDATE reserves SET suspend_until = NULL WHERE biblionumber = ? AND borrowernumber = ?", undef, ( $biblio, $borrower ) ); |
1071 |
$dbh->do("UPDATE reserves SET suspend_until = NULL WHERE reserve_id = ?", undef, ( $reserve_id ) ); |
1107 |
} |
1072 |
} |
1108 |
} |
1073 |
} |
1109 |
|
1074 |
|
1110 |
_FixPriority( $biblio, $borrower, $rank); |
1075 |
_FixPriority( $reserve_id, $rank ); |
1111 |
} |
1076 |
} |
1112 |
} |
1077 |
} |
1113 |
|
1078 |
|
Lines 1127-1132
sub ModReserveFill {
Link Here
|
1127 |
my ($res) = @_; |
1092 |
my ($res) = @_; |
1128 |
my $dbh = C4::Context->dbh; |
1093 |
my $dbh = C4::Context->dbh; |
1129 |
# fill in a reserve record.... |
1094 |
# fill in a reserve record.... |
|
|
1095 |
my $reserve_id = $res->{'reserve_id'}; |
1130 |
my $biblionumber = $res->{'biblionumber'}; |
1096 |
my $biblionumber = $res->{'biblionumber'}; |
1131 |
my $borrowernumber = $res->{'borrowernumber'}; |
1097 |
my $borrowernumber = $res->{'borrowernumber'}; |
1132 |
my $resdate = $res->{'reservedate'}; |
1098 |
my $resdate = $res->{'reservedate'}; |
Lines 1175-1181
sub ModReserveFill {
Link Here
|
1175 |
# now fix the priority on the others (if the priority wasn't |
1141 |
# now fix the priority on the others (if the priority wasn't |
1176 |
# already sorted!).... |
1142 |
# already sorted!).... |
1177 |
unless ( $priority == 0 ) { |
1143 |
unless ( $priority == 0 ) { |
1178 |
_FixPriority( $biblionumber, $borrowernumber ); |
1144 |
_FixPriority( $reserve_id ); |
1179 |
} |
1145 |
} |
1180 |
} |
1146 |
} |
1181 |
|
1147 |
|
Lines 1285-1291
sub ModReserveCancelAll {
Link Here
|
1285 |
my ( $itemnumber, $borrowernumber ) = @_; |
1251 |
my ( $itemnumber, $borrowernumber ) = @_; |
1286 |
|
1252 |
|
1287 |
#step 1 : cancel the reservation |
1253 |
#step 1 : cancel the reservation |
1288 |
my $CancelReserve = CancelReserve( undef, $itemnumber, $borrowernumber ); |
1254 |
my $CancelReserve = CancelReserve({ itemnumber => $itemnumber, borrowernumber => $borrowernumber }); |
1289 |
|
1255 |
|
1290 |
#step 2 launch the subroutine of the others reserves |
1256 |
#step 2 launch the subroutine of the others reserves |
1291 |
( $messages, $nextreservinfo ) = GetOtherReserves($itemnumber); |
1257 |
( $messages, $nextreservinfo ) = GetOtherReserves($itemnumber); |
Lines 1297-1321
sub ModReserveCancelAll {
Link Here
|
1297 |
|
1263 |
|
1298 |
&ModReserveMinusPriority($itemnumber,$borrowernumber,$biblionumber) |
1264 |
&ModReserveMinusPriority($itemnumber,$borrowernumber,$biblionumber) |
1299 |
|
1265 |
|
1300 |
Reduce the values of queuded list |
1266 |
Reduce the values of queued list |
1301 |
|
1267 |
|
1302 |
=cut |
1268 |
=cut |
1303 |
|
1269 |
|
1304 |
sub ModReserveMinusPriority { |
1270 |
sub ModReserveMinusPriority { |
1305 |
my ( $itemnumber, $borrowernumber, $biblionumber ) = @_; |
1271 |
my ( $itemnumber, $reserve_id ) = @_; |
1306 |
|
1272 |
|
1307 |
#first step update the value of the first person on reserv |
1273 |
#first step update the value of the first person on reserv |
1308 |
my $dbh = C4::Context->dbh; |
1274 |
my $dbh = C4::Context->dbh; |
1309 |
my $query = " |
1275 |
my $query = " |
1310 |
UPDATE reserves |
1276 |
UPDATE reserves |
1311 |
SET priority = 0 , itemnumber = ? |
1277 |
SET priority = 0 , itemnumber = ? |
1312 |
WHERE borrowernumber=? |
1278 |
WHERE reserve_id = ? |
1313 |
AND biblionumber=? |
|
|
1314 |
"; |
1279 |
"; |
1315 |
my $sth_upd = $dbh->prepare($query); |
1280 |
my $sth_upd = $dbh->prepare($query); |
1316 |
$sth_upd->execute( $itemnumber, $borrowernumber, $biblionumber ); |
1281 |
$sth_upd->execute( $itemnumber, $reserve_id ); |
1317 |
# second step update all others reservs |
1282 |
# second step update all others reservs |
1318 |
_FixPriority($biblionumber, $borrowernumber, '0'); |
1283 |
_FixPriority( $reserve_id, '0'); |
1319 |
} |
1284 |
} |
1320 |
|
1285 |
|
1321 |
=head2 GetReserveInfo |
1286 |
=head2 GetReserveInfo |
Lines 1328-1336
Current implementation this query should have a single result.
Link Here
|
1328 |
=cut |
1293 |
=cut |
1329 |
|
1294 |
|
1330 |
sub GetReserveInfo { |
1295 |
sub GetReserveInfo { |
1331 |
my ( $borrowernumber, $biblionumber ) = @_; |
1296 |
my ( $reserve_id ) = @_; |
1332 |
my $dbh = C4::Context->dbh; |
1297 |
my $dbh = C4::Context->dbh; |
1333 |
my $strsth="SELECT |
1298 |
my $strsth="SELECT |
1334 |
reservedate, |
1299 |
reservedate, |
1335 |
reservenotes, |
1300 |
reservenotes, |
1336 |
reserves.borrowernumber, |
1301 |
reserves.borrowernumber, |
Lines 1360-1376
sub GetReserveInfo {
Link Here
|
1360 |
notes |
1325 |
notes |
1361 |
FROM reserves |
1326 |
FROM reserves |
1362 |
LEFT JOIN items USING(itemnumber) |
1327 |
LEFT JOIN items USING(itemnumber) |
1363 |
LEFT JOIN borrowers USING(borrowernumber) |
1328 |
LEFT JOIN borrowers USING(borrowernumber) |
1364 |
LEFT JOIN biblio ON (reserves.biblionumber=biblio.biblionumber) |
1329 |
LEFT JOIN biblio ON (reserves.biblionumber=biblio.biblionumber) |
1365 |
WHERE |
1330 |
WHERE reserves.reserve_id = ?"; |
1366 |
reserves.borrowernumber=? |
1331 |
my $sth = $dbh->prepare($strsth); |
1367 |
AND reserves.biblionumber=?"; |
1332 |
$sth->execute($reserve_id); |
1368 |
my $sth = $dbh->prepare($strsth); |
|
|
1369 |
$sth->execute($borrowernumber,$biblionumber); |
1370 |
|
1371 |
my $data = $sth->fetchrow_hashref; |
1372 |
return $data; |
1373 |
|
1333 |
|
|
|
1334 |
my $data = $sth->fetchrow_hashref; |
1335 |
return $data; |
1374 |
} |
1336 |
} |
1375 |
|
1337 |
|
1376 |
=head2 IsAvailableForItemLevelRequest |
1338 |
=head2 IsAvailableForItemLevelRequest |
Lines 1455-1483
Input: $where is 'up', 'down', 'top' or 'bottom'. Biblionumber, Date reserve was
Link Here
|
1455 |
=cut |
1417 |
=cut |
1456 |
|
1418 |
|
1457 |
sub AlterPriority { |
1419 |
sub AlterPriority { |
1458 |
my ( $where, $borrowernumber, $biblionumber ) = @_; |
1420 |
my ( $where, $reserve_id ) = @_; |
1459 |
|
1421 |
#warn "C4::Reserves::AlterPriority( $where, $reserve_id )"; |
1460 |
my $dbh = C4::Context->dbh; |
1422 |
my $dbh = C4::Context->dbh; |
1461 |
|
1423 |
|
1462 |
## Find this reserve |
1424 |
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 |
|
1425 |
|
1468 |
if ( $where eq 'up' || $where eq 'down' ) { |
1426 |
if ( $where eq 'up' || $where eq 'down' ) { |
1469 |
|
1427 |
|
1470 |
my $priority = $reserve->{'priority'}; |
1428 |
my $priority = $reserve->{'priority'}; |
1471 |
$priority = $where eq 'up' ? $priority - 1 : $priority + 1; |
1429 |
$priority = $where eq 'up' ? $priority - 1 : $priority + 1; |
1472 |
_FixPriority( $biblionumber, $borrowernumber, $priority ) |
1430 |
_FixPriority( $reserve_id, $priority ) |
1473 |
|
1431 |
|
1474 |
} elsif ( $where eq 'top' ) { |
1432 |
} elsif ( $where eq 'top' ) { |
1475 |
|
1433 |
|
1476 |
_FixPriority( $biblionumber, $borrowernumber, '1' ) |
1434 |
_FixPriority( $reserve_id, '1' ) |
1477 |
|
1435 |
|
1478 |
} elsif ( $where eq 'bottom' ) { |
1436 |
} elsif ( $where eq 'bottom' ) { |
1479 |
|
1437 |
|
1480 |
_FixPriority( $biblionumber, $borrowernumber, '999999' ) |
1438 |
_FixPriority( $reserve_id, '999999' ) |
1481 |
|
1439 |
|
1482 |
} |
1440 |
} |
1483 |
} |
1441 |
} |
Lines 1491-1517
This function sets the lowestPriority field to true if is false, and false if it
Link Here
|
1491 |
=cut |
1449 |
=cut |
1492 |
|
1450 |
|
1493 |
sub ToggleLowestPriority { |
1451 |
sub ToggleLowestPriority { |
1494 |
my ( $borrowernumber, $biblionumber ) = @_; |
1452 |
my ( $reserve_id ) = @_; |
1495 |
|
1453 |
|
1496 |
my $dbh = C4::Context->dbh; |
1454 |
my $dbh = C4::Context->dbh; |
1497 |
|
1455 |
|
1498 |
my $sth = $dbh->prepare( |
1456 |
my $sth = $dbh->prepare( "UPDATE reserves SET lowestPriority = NOT lowestPriority WHERE reserve_id = ?"); |
1499 |
"UPDATE reserves SET lowestPriority = NOT lowestPriority |
1457 |
$sth->execute( $reserve_id ); |
1500 |
WHERE biblionumber = ? |
|
|
1501 |
AND borrowernumber = ?" |
1502 |
); |
1503 |
$sth->execute( |
1504 |
$biblionumber, |
1505 |
$borrowernumber, |
1506 |
); |
1507 |
$sth->finish; |
1458 |
$sth->finish; |
1508 |
|
1459 |
|
1509 |
_FixPriority( $biblionumber, $borrowernumber, '999999' ); |
1460 |
_FixPriority( $reserve_id, '999999' ); |
1510 |
} |
1461 |
} |
1511 |
|
1462 |
|
1512 |
=head2 ToggleSuspend |
1463 |
=head2 ToggleSuspend |
1513 |
|
1464 |
|
1514 |
ToggleSuspend( $borrowernumber, $biblionumber ); |
1465 |
ToggleSuspend( $reserve_id ); |
1515 |
|
1466 |
|
1516 |
This function sets the suspend field to true if is false, and false if it is true. |
1467 |
This function sets the suspend field to true if is false, and false if it is true. |
1517 |
If the reserve is currently suspended with a suspend_until date, that date will |
1468 |
If the reserve is currently suspended with a suspend_until date, that date will |
Lines 1520-1526
be cleared when it is unsuspended.
Link Here
|
1520 |
=cut |
1471 |
=cut |
1521 |
|
1472 |
|
1522 |
sub ToggleSuspend { |
1473 |
sub ToggleSuspend { |
1523 |
my ( $borrowernumber, $biblionumber, $suspend_until ) = @_; |
1474 |
my ( $reserve_id, $suspend_until ) = @_; |
1524 |
|
1475 |
|
1525 |
$suspend_until = output_pref( dt_from_string( $suspend_until ), 'iso' ) if ( $suspend_until ); |
1476 |
$suspend_until = output_pref( dt_from_string( $suspend_until ), 'iso' ) if ( $suspend_until ); |
1526 |
|
1477 |
|
Lines 1531-1544
sub ToggleSuspend {
Link Here
|
1531 |
my $sth = $dbh->prepare( |
1482 |
my $sth = $dbh->prepare( |
1532 |
"UPDATE reserves SET suspend = NOT suspend, |
1483 |
"UPDATE reserves SET suspend = NOT suspend, |
1533 |
suspend_until = CASE WHEN suspend = 0 THEN NULL ELSE $do_until END |
1484 |
suspend_until = CASE WHEN suspend = 0 THEN NULL ELSE $do_until END |
1534 |
WHERE biblionumber = ? |
1485 |
WHERE reserve_id = ? |
1535 |
AND borrowernumber = ? |
|
|
1536 |
"); |
1486 |
"); |
1537 |
|
1487 |
|
1538 |
my @params; |
1488 |
my @params; |
1539 |
push( @params, $suspend_until ) if ( $suspend_until ); |
1489 |
push( @params, $suspend_until ) if ( $suspend_until ); |
1540 |
push( @params, $biblionumber ); |
1490 |
push( @params, $reserve_id ); |
1541 |
push( @params, $borrowernumber ); |
|
|
1542 |
|
1491 |
|
1543 |
$sth->execute( @params ); |
1492 |
$sth->execute( @params ); |
1544 |
$sth->finish; |
1493 |
$sth->finish; |
Lines 1603-1609
sub SuspendAll {
Link Here
|
1603 |
|
1552 |
|
1604 |
=head2 _FixPriority |
1553 |
=head2 _FixPriority |
1605 |
|
1554 |
|
1606 |
&_FixPriority($biblio,$borrowernumber,$rank,$ignoreSetLowestRank); |
1555 |
&_FixPriority( $reserve_id, $rank, $ignoreSetLowestRank); |
1607 |
|
1556 |
|
1608 |
Only used internally (so don't export it) |
1557 |
Only used internally (so don't export it) |
1609 |
Changed how this functions works # |
1558 |
Changed how this functions works # |
Lines 1615-1655
in new priority rank
Link Here
|
1615 |
=cut |
1564 |
=cut |
1616 |
|
1565 |
|
1617 |
sub _FixPriority { |
1566 |
sub _FixPriority { |
1618 |
my ( $biblio, $borrowernumber, $rank, $ignoreSetLowestRank ) = @_; |
1567 |
my ( $reserve_id, $rank, $ignoreSetLowestRank ) = @_; |
1619 |
my $dbh = C4::Context->dbh; |
1568 |
my $dbh = C4::Context->dbh; |
1620 |
if ( $rank eq "del" ) { |
1569 |
|
1621 |
CancelReserve( $biblio, undef, $borrowernumber ); |
1570 |
my $res = GetReserve( $reserve_id ); |
1622 |
} |
1571 |
|
1623 |
if ( $rank eq "W" || $rank eq "0" ) { |
1572 |
if ( $rank eq "del" ) { |
|
|
1573 |
CancelReserve({ reserve_id => $reserve_id }); |
1574 |
} |
1575 |
elsif ( $rank eq "W" || $rank eq "0" ) { |
1624 |
|
1576 |
|
1625 |
# make sure priority for waiting or in-transit items is 0 |
1577 |
# make sure priority for waiting or in-transit items is 0 |
1626 |
my $query = qq/ |
1578 |
my $query = " |
1627 |
UPDATE reserves |
1579 |
UPDATE reserves |
1628 |
SET priority = 0 |
1580 |
SET priority = 0 |
1629 |
WHERE biblionumber = ? |
1581 |
WHERE reserve_id = ? |
1630 |
AND borrowernumber = ? |
1582 |
AND found IN ('W', 'T') |
1631 |
AND found IN ('W', 'T') |
1583 |
"; |
1632 |
/; |
|
|
1633 |
my $sth = $dbh->prepare($query); |
1584 |
my $sth = $dbh->prepare($query); |
1634 |
$sth->execute( $biblio, $borrowernumber ); |
1585 |
$sth->execute( $reserve_id ); |
1635 |
} |
1586 |
} |
1636 |
my @priority; |
1587 |
my @priority; |
1637 |
my @reservedates; |
1588 |
my @reservedates; |
1638 |
|
1589 |
|
1639 |
# get whats left |
1590 |
# get whats left |
1640 |
# FIXME adding a new security in returned elements for changing priority, |
1591 |
my $query = " |
1641 |
# now, we don't care anymore any reservations with itemnumber linked (suppose a waiting reserve) |
1592 |
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 |
1593 |
FROM reserves |
1647 |
WHERE biblionumber = ? |
1594 |
WHERE biblionumber = ? |
1648 |
AND ((found <> 'W' AND found <> 'T') or found is NULL) |
1595 |
AND ((found <> 'W' AND found <> 'T') OR found IS NULL) |
1649 |
ORDER BY priority ASC |
1596 |
ORDER BY priority ASC |
1650 |
/; |
1597 |
"; |
1651 |
my $sth = $dbh->prepare($query); |
1598 |
my $sth = $dbh->prepare($query); |
1652 |
$sth->execute($biblio); |
1599 |
$sth->execute( $res->{'biblionumber'} ); |
1653 |
while ( my $line = $sth->fetchrow_hashref ) { |
1600 |
while ( my $line = $sth->fetchrow_hashref ) { |
1654 |
push( @reservedates, $line ); |
1601 |
push( @reservedates, $line ); |
1655 |
push( @priority, $line ); |
1602 |
push( @priority, $line ); |
Lines 1659-1665
sub _FixPriority {
Link Here
|
1659 |
my $i; |
1606 |
my $i; |
1660 |
my $key = -1; # to allow for 0 to be a valid result |
1607 |
my $key = -1; # to allow for 0 to be a valid result |
1661 |
for ( $i = 0 ; $i < @priority ; $i++ ) { |
1608 |
for ( $i = 0 ; $i < @priority ; $i++ ) { |
1662 |
if ( $borrowernumber == $priority[$i]->{'borrowernumber'} ) { |
1609 |
if ( $reserve_id == $priority[$i]->{'reserve_id'} ) { |
1663 |
$key = $i; # save the index |
1610 |
$key = $i; # save the index |
1664 |
last; |
1611 |
last; |
1665 |
} |
1612 |
} |
Lines 1675-1703
sub _FixPriority {
Link Here
|
1675 |
|
1622 |
|
1676 |
# now fix the priority on those that are left.... |
1623 |
# now fix the priority on those that are left.... |
1677 |
$query = " |
1624 |
$query = " |
1678 |
UPDATE reserves |
1625 |
UPDATE reserves |
1679 |
SET priority = ? |
1626 |
SET priority = ? |
1680 |
WHERE biblionumber = ? |
1627 |
WHERE reserve_id = ? |
1681 |
AND borrowernumber = ? |
|
|
1682 |
AND reservedate = ? |
1683 |
AND found IS NULL |
1684 |
"; |
1628 |
"; |
1685 |
$sth = $dbh->prepare($query); |
1629 |
$sth = $dbh->prepare($query); |
1686 |
for ( my $j = 0 ; $j < @priority ; $j++ ) { |
1630 |
for ( my $j = 0 ; $j < @priority ; $j++ ) { |
1687 |
$sth->execute( |
1631 |
$sth->execute( |
1688 |
$j + 1, $biblio, |
1632 |
$j + 1, |
1689 |
$priority[$j]->{'borrowernumber'}, |
1633 |
$priority[$j]->{'reserve_id'} |
1690 |
$priority[$j]->{'reservedate'} |
|
|
1691 |
); |
1634 |
); |
1692 |
$sth->finish; |
1635 |
$sth->finish; |
1693 |
} |
1636 |
} |
1694 |
|
1637 |
|
1695 |
$sth = $dbh->prepare( "SELECT borrowernumber FROM reserves WHERE lowestPriority = 1 ORDER BY priority" ); |
1638 |
$sth = $dbh->prepare( "SELECT reserve_id FROM reserves WHERE lowestPriority = 1 ORDER BY priority" ); |
1696 |
$sth->execute(); |
1639 |
$sth->execute(); |
1697 |
|
1640 |
|
1698 |
unless ( $ignoreSetLowestRank ) { |
1641 |
unless ( $ignoreSetLowestRank ) { |
1699 |
while ( my $res = $sth->fetchrow_hashref() ) { |
1642 |
while ( my $res = $sth->fetchrow_hashref() ) { |
1700 |
_FixPriority( $biblio, $res->{'borrowernumber'}, '999999', 1 ); |
1643 |
_FixPriority( $res->{'reserve_id'}, '999999', 1 ); |
1701 |
} |
1644 |
} |
1702 |
} |
1645 |
} |
1703 |
} |
1646 |
} |
Lines 1736-1742
sub _Findgroupreserve {
Link Here
|
1736 |
reserves.priority AS priority, |
1679 |
reserves.priority AS priority, |
1737 |
reserves.timestamp AS timestamp, |
1680 |
reserves.timestamp AS timestamp, |
1738 |
biblioitems.biblioitemnumber AS biblioitemnumber, |
1681 |
biblioitems.biblioitemnumber AS biblioitemnumber, |
1739 |
reserves.itemnumber AS itemnumber |
1682 |
reserves.itemnumber AS itemnumber, |
|
|
1683 |
reserves.reserve_id AS reserve_id, |
1740 |
FROM reserves |
1684 |
FROM reserves |
1741 |
JOIN biblioitems USING (biblionumber) |
1685 |
JOIN biblioitems USING (biblionumber) |
1742 |
JOIN hold_fill_targets USING (biblionumber, borrowernumber, itemnumber) |
1686 |
JOIN hold_fill_targets USING (biblionumber, borrowernumber, itemnumber) |
Lines 1969-1975
sub _ShiftPriorityByDateAndPriority {
Link Here
|
1969 |
|
1913 |
|
1970 |
=head2 MoveReserve |
1914 |
=head2 MoveReserve |
1971 |
|
1915 |
|
1972 |
MoveReserve( $itemnumber, $borrowernumber, $cancelreserve ) |
1916 |
MoveReserve( $reserve_id, $cancelreserve ) |
1973 |
|
1917 |
|
1974 |
Use when checking out an item to handle reserves |
1918 |
Use when checking out an item to handle reserves |
1975 |
If $cancelreserve boolean is set to true, it will remove existing reserve |
1919 |
If $cancelreserve boolean is set to true, it will remove existing reserve |
Lines 2011-2018
sub MoveReserve {
Link Here
|
2011 |
RevertWaitingStatus({ itemnumber => $itemnumber }); |
1955 |
RevertWaitingStatus({ itemnumber => $itemnumber }); |
2012 |
} |
1956 |
} |
2013 |
elsif ( $cancelreserve eq 'cancel' || $cancelreserve ) { # cancel reserves on this item |
1957 |
elsif ( $cancelreserve eq 'cancel' || $cancelreserve ) { # cancel reserves on this item |
2014 |
CancelReserve(0, $res->{'itemnumber'}, $res->{'borrowernumber'}); |
1958 |
CancelReserve({ |
2015 |
CancelReserve($res->{'biblionumber'}, 0, $res->{'borrowernumber'}); |
1959 |
biblionumber => $res->{'biblionumber'}, |
|
|
1960 |
itemnumber => $res->{'itemnumber'}, |
1961 |
borrowernumber => $res->{'borrowernumber'} |
1962 |
}); |
2016 |
} |
1963 |
} |
2017 |
} |
1964 |
} |
2018 |
} |
1965 |
} |
Lines 2028-2034
This shifts the holds from C<$from_biblio> to C<$to_biblio> and reorders them by
Link Here
|
2028 |
sub MergeHolds { |
1975 |
sub MergeHolds { |
2029 |
my ( $dbh, $to_biblio, $from_biblio ) = @_; |
1976 |
my ( $dbh, $to_biblio, $from_biblio ) = @_; |
2030 |
my $sth = $dbh->prepare( |
1977 |
my $sth = $dbh->prepare( |
2031 |
"SELECT count(*) as reservenumber FROM reserves WHERE biblionumber = ?" |
1978 |
"SELECT count(*) as reserve_id FROM reserves WHERE biblionumber = ?" |
2032 |
); |
1979 |
); |
2033 |
$sth->execute($from_biblio); |
1980 |
$sth->execute($from_biblio); |
2034 |
if ( my $data = $sth->fetchrow_hashref() ) { |
1981 |
if ( my $data = $sth->fetchrow_hashref() ) { |
Lines 2121-2126
sub RevertWaitingStatus {
Link Here
|
2121 |
return $sth->execute( $reserve->{'reserve_id'} ); |
2068 |
return $sth->execute( $reserve->{'reserve_id'} ); |
2122 |
} |
2069 |
} |
2123 |
|
2070 |
|
|
|
2071 |
=head2 GetReserveId |
2072 |
|
2073 |
$reserve_id = GetReserveId({ biblionumber => $biblionumber, borrowernumber => $borrowernumber [, itemnumber => $itemnumber ] }); |
2074 |
|
2075 |
Returnes the first reserve id that matches the given criteria |
2076 |
|
2077 |
=cut |
2078 |
|
2079 |
sub GetReserveId { |
2080 |
my ( $params ) = @_; |
2081 |
|
2082 |
return unless ( ( $params->{'biblionumber'} || $params->{'itemnumber'} ) && $params->{'borrowernumber'} ); |
2083 |
|
2084 |
my $dbh = C4::Context->dbh(); |
2085 |
|
2086 |
my $sql = "SELECT reserve_id FROM reserves WHERE biblionumber "; |
2087 |
|
2088 |
my @params; |
2089 |
my @limits; |
2090 |
foreach my $key ( keys %$params ) { |
2091 |
if ( defined( $params->{$key} ) ) { |
2092 |
push( @limits, "$key = ?" ); |
2093 |
push( @params, $params->{$key} ); |
2094 |
} |
2095 |
} |
2096 |
|
2097 |
$sql .= join( " AND ", @limits ); |
2098 |
|
2099 |
my $sth = $dbh->prepare( $sql ); |
2100 |
$sth->execute( @params ); |
2101 |
my $row = $sth->fetchrow_hashref(); |
2102 |
|
2103 |
return $row->{'reserve_id'}; |
2104 |
} |
2105 |
|
2124 |
=head2 ReserveSlip |
2106 |
=head2 ReserveSlip |
2125 |
|
2107 |
|
2126 |
ReserveSlip($branchcode, $borrowernumber, $biblionumber) |
2108 |
ReserveSlip($branchcode, $borrowernumber, $biblionumber) |