Lines 187-193
sub AddReserve {
Link Here
|
187 |
"Reserve Charge - $title", $fee ); |
187 |
"Reserve Charge - $title", $fee ); |
188 |
} |
188 |
} |
189 |
|
189 |
|
190 |
#if ($const eq 'a'){ |
|
|
191 |
my $query = qq/ |
190 |
my $query = qq/ |
192 |
INSERT INTO reserves |
191 |
INSERT INTO reserves |
193 |
(borrowernumber,biblionumber,reservedate,branchcode,constrainttype, |
192 |
(borrowernumber,biblionumber,reservedate,branchcode,constrainttype, |
Lines 232-250
sub AddReserve {
Link Here
|
232 |
} |
231 |
} |
233 |
} |
232 |
} |
234 |
|
233 |
|
235 |
#} |
|
|
236 |
($const eq "o" || $const eq "e") or return; # FIXME: why not have a useful return value? |
237 |
$query = qq/ |
238 |
INSERT INTO reserveconstraints |
239 |
(borrowernumber,biblionumber,reservedate,biblioitemnumber) |
240 |
VALUES |
241 |
(?,?,?,?) |
242 |
/; |
243 |
$sth = $dbh->prepare($query); # keep prepare outside the loop! |
244 |
foreach (@$bibitems) { |
245 |
$sth->execute($borrowernumber, $biblionumber, $resdate, $_); |
246 |
} |
247 |
|
248 |
return; # FIXME: why not have a useful return value? |
234 |
return; # FIXME: why not have a useful return value? |
249 |
} |
235 |
} |
250 |
|
236 |
|
Lines 325-372
sub GetReservesFromBiblionumber {
Link Here
|
325 |
$query .= "ORDER BY priority"; |
311 |
$query .= "ORDER BY priority"; |
326 |
my $sth = $dbh->prepare($query); |
312 |
my $sth = $dbh->prepare($query); |
327 |
$sth->execute( @params ); |
313 |
$sth->execute( @params ); |
328 |
my @results; |
314 |
my $results = $sth->fetchall_arrayref({}); |
329 |
my $i = 0; |
315 |
return $results; |
330 |
while ( my $data = $sth->fetchrow_hashref ) { |
|
|
331 |
|
332 |
# FIXME - What is this doing? How do constraints work? |
333 |
if ($data->{constrainttype} eq 'o') { |
334 |
$query = ' |
335 |
SELECT biblioitemnumber |
336 |
FROM reserveconstraints |
337 |
WHERE biblionumber = ? |
338 |
AND borrowernumber = ? |
339 |
AND reservedate = ? |
340 |
'; |
341 |
my $csth = $dbh->prepare($query); |
342 |
$csth->execute($data->{biblionumber}, $data->{borrowernumber}, $data->{reservedate}); |
343 |
my @bibitemno; |
344 |
while ( my $bibitemnos = $csth->fetchrow_array ) { |
345 |
push( @bibitemno, $bibitemnos ); # FIXME: inefficient: use fetchall_arrayref |
346 |
} |
347 |
my $count = scalar @bibitemno; |
348 |
|
349 |
# if we have two or more different specific itemtypes |
350 |
# reserved by same person on same day |
351 |
my $bdata; |
352 |
if ( $count > 1 ) { |
353 |
$bdata = GetBiblioItemData( $bibitemno[$i] ); # FIXME: This doesn't make sense. |
354 |
$i++; # $i can increase each pass, but the next @bibitemno might be smaller? |
355 |
} |
356 |
else { |
357 |
# Look up the book we just found. |
358 |
$bdata = GetBiblioItemData( $bibitemno[0] ); |
359 |
} |
360 |
# Add the results of this latest search to the current |
361 |
# results. |
362 |
# FIXME - An 'each' would probably be more efficient. |
363 |
foreach my $key ( keys %$bdata ) { |
364 |
$data->{$key} = $bdata->{$key}; |
365 |
} |
366 |
} |
367 |
push @results, $data; |
368 |
} |
369 |
return \@results; |
370 |
} |
316 |
} |
371 |
|
317 |
|
372 |
=head2 GetReservesFromItemnumber |
318 |
=head2 GetReservesFromItemnumber |
Lines 1161-1205
sub ModReserveFill {
Link Here
|
1161 |
my $borrowernumber = $res->{'borrowernumber'}; |
1107 |
my $borrowernumber = $res->{'borrowernumber'}; |
1162 |
my $resdate = $res->{'reservedate'}; |
1108 |
my $resdate = $res->{'reservedate'}; |
1163 |
|
1109 |
|
|
|
1110 |
$reserve_id = GetReserveId({biblionumber => $biblionumber, |
1111 |
borrowernumber => $borrowernumber, |
1112 |
reservedate => $resdate}) if (!$reserve_id); |
1113 |
return if (!$reserve_id); |
1114 |
|
1164 |
# get the priority on this record.... |
1115 |
# get the priority on this record.... |
1165 |
my $priority; |
1116 |
my $priority; |
1166 |
my $query = "SELECT priority |
1117 |
my $query = "SELECT priority |
1167 |
FROM reserves |
1118 |
FROM reserves |
1168 |
WHERE biblionumber = ? |
1119 |
WHERE reserve_id = ?"; |
1169 |
AND borrowernumber = ? |
|
|
1170 |
AND reservedate = ?"; |
1171 |
my $sth = $dbh->prepare($query); |
1120 |
my $sth = $dbh->prepare($query); |
1172 |
$sth->execute( $biblionumber, $borrowernumber, $resdate ); |
1121 |
$sth->execute( $reserve_id ); |
1173 |
($priority) = $sth->fetchrow_array; |
1122 |
($priority) = $sth->fetchrow_array; |
1174 |
|
1123 |
|
1175 |
# update the database... |
1124 |
# update the database... |
1176 |
$query = "UPDATE reserves |
1125 |
$query = "UPDATE reserves |
1177 |
SET found = 'F', |
1126 |
SET found = 'F', |
1178 |
priority = 0 |
1127 |
priority = 0 |
1179 |
WHERE biblionumber = ? |
1128 |
WHERE reserve_id = ?"; |
1180 |
AND reservedate = ? |
|
|
1181 |
AND borrowernumber = ? |
1182 |
"; |
1183 |
$sth = $dbh->prepare($query); |
1129 |
$sth = $dbh->prepare($query); |
1184 |
$sth->execute( $biblionumber, $resdate, $borrowernumber ); |
1130 |
$sth->execute( $reserve_id ); |
1185 |
|
1131 |
|
1186 |
# move to old_reserves |
1132 |
# move to old_reserves |
1187 |
$query = "INSERT INTO old_reserves |
1133 |
$query = "INSERT INTO old_reserves |
1188 |
SELECT * FROM reserves |
1134 |
SELECT * FROM reserves |
1189 |
WHERE biblionumber = ? |
1135 |
WHERE reserve_id = ?"; |
1190 |
AND reservedate = ? |
|
|
1191 |
AND borrowernumber = ? |
1192 |
"; |
1193 |
$sth = $dbh->prepare($query); |
1136 |
$sth = $dbh->prepare($query); |
1194 |
$sth->execute( $biblionumber, $resdate, $borrowernumber ); |
1137 |
$sth->execute( $reserve_id ); |
1195 |
$query = "DELETE FROM reserves |
1138 |
$query = "DELETE FROM reserves |
1196 |
WHERE biblionumber = ? |
1139 |
WHERE reserve_id = ?"; |
1197 |
AND reservedate = ? |
|
|
1198 |
AND borrowernumber = ? |
1199 |
"; |
1200 |
$sth = $dbh->prepare($query); |
1140 |
$sth = $dbh->prepare($query); |
1201 |
$sth->execute( $biblionumber, $resdate, $borrowernumber ); |
1141 |
$sth->execute( $reserve_id ); |
1202 |
|
1142 |
|
1203 |
# now fix the priority on the others (if the priority wasn't |
1143 |
# now fix the priority on the others (if the priority wasn't |
1204 |
# already sorted!).... |
1144 |
# already sorted!).... |
1205 |
unless ( $priority == 0 ) { |
1145 |
unless ( $priority == 0 ) { |
Lines 1259-1273
sub ModReserveAffect {
Link Here
|
1259 |
$sth->execute($itemnumber); |
1199 |
$sth->execute($itemnumber); |
1260 |
my ($biblionumber) = $sth->fetchrow; |
1200 |
my ($biblionumber) = $sth->fetchrow; |
1261 |
|
1201 |
|
1262 |
# get request - need to find out if item is already |
1202 |
my $reserve_id = GetReserveNextEligible({ |
1263 |
# waiting in order to not send duplicate hold filled notifications |
1203 |
borrowernumber => $borrowernumber, |
1264 |
my $reserve_id = GetReserveId({ |
1204 |
biblionumber => $biblionumber, |
1265 |
borrowernumber => $borrowernumber, |
1205 |
itemnumber => $itemnumber |
1266 |
biblionumber => $biblionumber, |
1206 |
}); |
1267 |
}); |
1207 |
|
1268 |
return unless defined $reserve_id; |
1208 |
return unless defined $reserve_id; |
1269 |
my $request = GetReserveInfo($reserve_id); |
1209 |
my $request = GetReserveInfo($reserve_id); |
1270 |
my $already_on_shelf = ($request && $request->{found} eq 'W') ? 1 : 0; |
|
|
1271 |
|
1210 |
|
1272 |
# If we affect a reserve that has to be transfered, don't set to Waiting |
1211 |
# If we affect a reserve that has to be transfered, don't set to Waiting |
1273 |
my $query; |
1212 |
my $query; |
Lines 1277-1284
sub ModReserveAffect {
Link Here
|
1277 |
SET priority = 0, |
1216 |
SET priority = 0, |
1278 |
itemnumber = ?, |
1217 |
itemnumber = ?, |
1279 |
found = 'T' |
1218 |
found = 'T' |
1280 |
WHERE borrowernumber = ? |
1219 |
WHERE reserve_id = ? |
1281 |
AND biblionumber = ? |
|
|
1282 |
"; |
1220 |
"; |
1283 |
} |
1221 |
} |
1284 |
else { |
1222 |
else { |
Lines 1289-1301
sub ModReserveAffect {
Link Here
|
1289 |
found = 'W', |
1227 |
found = 'W', |
1290 |
waitingdate = NOW(), |
1228 |
waitingdate = NOW(), |
1291 |
itemnumber = ? |
1229 |
itemnumber = ? |
1292 |
WHERE borrowernumber = ? |
1230 |
WHERE reserve_id = ? |
1293 |
AND biblionumber = ? |
|
|
1294 |
"; |
1231 |
"; |
1295 |
} |
1232 |
} |
1296 |
$sth = $dbh->prepare($query); |
1233 |
$sth = $dbh->prepare($query); |
1297 |
$sth->execute( $itemnumber, $borrowernumber,$biblionumber); |
1234 |
$sth->execute( $itemnumber, $reserve_id ); |
1298 |
_koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber ) if ( !$transferToDo && !$already_on_shelf ); |
1235 |
_koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber, $reserve_id ) if ( !$transferToDo ); |
|
|
1236 |
|
1237 |
if ( $request && $request->{priority} != 0 ) { |
1238 |
_FixPriority({ reserve_id => $reserve_id }); |
1239 |
} |
1299 |
|
1240 |
|
1300 |
if ( C4::Context->preference("ReturnToShelvingCart") ) { |
1241 |
if ( C4::Context->preference("ReturnToShelvingCart") ) { |
1301 |
CartToShelf( $itemnumber ); |
1242 |
CartToShelf( $itemnumber ); |
Lines 1515-1521
sub AlterPriority {
Link Here
|
1515 |
|
1456 |
|
1516 |
=head2 ToggleLowestPriority |
1457 |
=head2 ToggleLowestPriority |
1517 |
|
1458 |
|
1518 |
ToggleLowestPriority( $borrowernumber, $biblionumber ); |
1459 |
ToggleLowestPriority( $reserve_id ); |
1519 |
|
1460 |
|
1520 |
This function sets the lowestPriority field to true if is false, and false if it is true. |
1461 |
This function sets the lowestPriority field to true if is false, and false if it is true. |
1521 |
|
1462 |
|
Lines 1819-1825
sub _Findgroupreserve {
Link Here
|
1819 |
reserves.priority AS priority, |
1760 |
reserves.priority AS priority, |
1820 |
reserves.timestamp AS timestamp, |
1761 |
reserves.timestamp AS timestamp, |
1821 |
biblioitems.biblioitemnumber AS biblioitemnumber, |
1762 |
biblioitems.biblioitemnumber AS biblioitemnumber, |
1822 |
reserves.itemnumber AS itemnumber |
1763 |
reserves.itemnumber AS itemnumber, |
|
|
1764 |
reserves.reserve_id AS reserve_id |
1823 |
FROM reserves |
1765 |
FROM reserves |
1824 |
JOIN biblioitems USING (biblionumber) |
1766 |
JOIN biblioitems USING (biblionumber) |
1825 |
JOIN hold_fill_targets USING (biblionumber, borrowernumber) |
1767 |
JOIN hold_fill_targets USING (biblionumber, borrowernumber) |
Lines 1849-1869
sub _Findgroupreserve {
Link Here
|
1849 |
reserves.reservenotes AS reservenotes, |
1791 |
reserves.reservenotes AS reservenotes, |
1850 |
reserves.priority AS priority, |
1792 |
reserves.priority AS priority, |
1851 |
reserves.timestamp AS timestamp, |
1793 |
reserves.timestamp AS timestamp, |
1852 |
reserveconstraints.biblioitemnumber AS biblioitemnumber, |
1794 |
biblioitems.biblioitemnumber AS biblioitemnumber, |
1853 |
reserves.itemnumber AS itemnumber |
1795 |
reserves.itemnumber AS itemnumber |
1854 |
FROM reserves |
1796 |
FROM reserves |
1855 |
LEFT JOIN reserveconstraints ON reserves.biblionumber = reserveconstraints.biblionumber |
1797 |
JOIN biblioitems USING (biblionumber) |
1856 |
WHERE reserves.biblionumber = ? |
1798 |
WHERE reserves.biblionumber = ? |
1857 |
AND ( ( reserveconstraints.biblioitemnumber = ? |
1799 |
AND (reserves.constrainttype='a') |
1858 |
AND reserves.borrowernumber = reserveconstraints.borrowernumber |
|
|
1859 |
AND reserves.reservedate = reserveconstraints.reservedate ) |
1860 |
OR reserves.constrainttype='a' ) |
1861 |
AND (reserves.itemnumber IS NULL OR reserves.itemnumber = ?) |
1800 |
AND (reserves.itemnumber IS NULL OR reserves.itemnumber = ?) |
1862 |
AND reserves.reservedate <= DATE_ADD(NOW(),INTERVAL ? DAY) |
1801 |
AND reserves.reservedate <= DATE_ADD(NOW(),INTERVAL ? DAY) |
1863 |
AND suspend = 0 |
1802 |
AND suspend = 0 |
1864 |
/; |
1803 |
/; |
1865 |
$sth = $dbh->prepare($query); |
1804 |
$sth = $dbh->prepare($query); |
1866 |
$sth->execute( $biblio, $bibitem, $itemnumber, $lookahead||0); |
1805 |
$sth->execute( $biblio, $itemnumber, $lookahead||0); |
1867 |
@results = (); |
1806 |
@results = (); |
1868 |
while ( my $data = $sth->fetchrow_hashref ) { |
1807 |
while ( my $data = $sth->fetchrow_hashref ) { |
1869 |
push( @results, $data ); |
1808 |
push( @results, $data ); |
Lines 1873-1879
sub _Findgroupreserve {
Link Here
|
1873 |
|
1812 |
|
1874 |
=head2 _koha_notify_reserve |
1813 |
=head2 _koha_notify_reserve |
1875 |
|
1814 |
|
1876 |
_koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber ); |
1815 |
_koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber, $reserve_id ); |
1877 |
|
1816 |
|
1878 |
Sends a notification to the patron that their hold has been filled (through |
1817 |
Sends a notification to the patron that their hold has been filled (through |
1879 |
ModReserveAffect, _not_ ModReserveFill) |
1818 |
ModReserveAffect, _not_ ModReserveFill) |
Lines 1881-1887
ModReserveAffect, _not_ ModReserveFill)
Link Here
|
1881 |
=cut |
1820 |
=cut |
1882 |
|
1821 |
|
1883 |
sub _koha_notify_reserve { |
1822 |
sub _koha_notify_reserve { |
1884 |
my ($itemnumber, $borrowernumber, $biblionumber) = @_; |
1823 |
my ($itemnumber, $borrowernumber, $biblionumber, $reserve_id) = @_; |
1885 |
|
1824 |
|
1886 |
my $dbh = C4::Context->dbh; |
1825 |
my $dbh = C4::Context->dbh; |
1887 |
my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber); |
1826 |
my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber); |
Lines 1903-1910
sub _koha_notify_reserve {
Link Here
|
1903 |
FROM reserves |
1842 |
FROM reserves |
1904 |
WHERE borrowernumber = ? |
1843 |
WHERE borrowernumber = ? |
1905 |
AND biblionumber = ? |
1844 |
AND biblionumber = ? |
|
|
1845 |
AND reserve_id = ? |
1906 |
"); |
1846 |
"); |
1907 |
$sth->execute( $borrowernumber, $biblionumber ); |
1847 |
$sth->execute( $borrowernumber, $biblionumber, $reserve_id ); |
1908 |
my $reserve = $sth->fetchrow_hashref; |
1848 |
my $reserve = $sth->fetchrow_hashref; |
1909 |
my $branch_details = GetBranchDetail( $reserve->{'branchcode'} ); |
1849 |
my $branch_details = GetBranchDetail( $reserve->{'branchcode'} ); |
1910 |
|
1850 |
|
Lines 1995-2012
sub _ShiftPriorityByDateAndPriority {
Link Here
|
1995 |
# Shift the priority up by one; works in conjunction with the next SQL statement |
1935 |
# Shift the priority up by one; works in conjunction with the next SQL statement |
1996 |
$query = "UPDATE reserves |
1936 |
$query = "UPDATE reserves |
1997 |
SET priority = priority+1 |
1937 |
SET priority = priority+1 |
1998 |
WHERE biblionumber = ? |
1938 |
WHERE reserve_id = ? |
1999 |
AND borrowernumber = ? |
|
|
2000 |
AND reservedate = ? |
2001 |
AND found IS NULL"; |
1939 |
AND found IS NULL"; |
2002 |
my $sth_update = $dbh->prepare( $query ); |
1940 |
my $sth_update = $dbh->prepare( $query ); |
2003 |
|
1941 |
|
2004 |
# Select all reserves for the biblio with priority greater than $new_priority, and order greatest to least |
1942 |
# Select all reserves for the biblio with priority greater than $new_priority, and order greatest to least |
2005 |
$query = "SELECT borrowernumber, reservedate FROM reserves WHERE priority >= ? AND biblionumber = ? ORDER BY priority DESC"; |
1943 |
$query = "SELECT reserve_id FROM reserves WHERE priority >= ? AND biblionumber = ? ORDER BY priority DESC"; |
2006 |
$sth = $dbh->prepare( $query ); |
1944 |
$sth = $dbh->prepare( $query ); |
2007 |
$sth->execute( $new_priority, $biblio ); |
1945 |
$sth->execute( $new_priority, $biblio ); |
2008 |
while ( my $row = $sth->fetchrow_hashref ) { |
1946 |
while ( my $row = $sth->fetchrow_hashref ) { |
2009 |
$sth_update->execute( $biblio, $row->{borrowernumber}, $row->{reservedate} ); |
1947 |
$sth_update->execute( $row->{reserve_id} ); |
2010 |
} |
1948 |
} |
2011 |
|
1949 |
|
2012 |
return $new_priority; # so the caller knows what priority they wind up receiving |
1950 |
return $new_priority; # so the caller knows what priority they wind up receiving |
Lines 2056-2066
sub MoveReserve {
Link Here
|
2056 |
RevertWaitingStatus({ itemnumber => $itemnumber }); |
1994 |
RevertWaitingStatus({ itemnumber => $itemnumber }); |
2057 |
} |
1995 |
} |
2058 |
elsif ( $cancelreserve eq 'cancel' || $cancelreserve ) { # cancel reserves on this item |
1996 |
elsif ( $cancelreserve eq 'cancel' || $cancelreserve ) { # cancel reserves on this item |
2059 |
CancelReserve({ |
1997 |
CancelReserve({ reserve_id => $res->{'reserve_id'} }); |
2060 |
biblionumber => $res->{'biblionumber'}, |
|
|
2061 |
itemnumber => $res->{'itemnumber'}, |
2062 |
borrowernumber => $res->{'borrowernumber'} |
2063 |
}); |
2064 |
} |
1998 |
} |
2065 |
} |
1999 |
} |
2066 |
} |
2000 |
} |
Lines 2136-2141
sub RevertWaitingStatus {
Link Here
|
2136 |
SELECT * FROM reserves |
2070 |
SELECT * FROM reserves |
2137 |
WHERE itemnumber = ? |
2071 |
WHERE itemnumber = ? |
2138 |
AND found IS NOT NULL |
2072 |
AND found IS NOT NULL |
|
|
2073 |
ORDER BY priority |
2139 |
"; |
2074 |
"; |
2140 |
my $sth = $dbh->prepare( $query ); |
2075 |
my $sth = $dbh->prepare( $query ); |
2141 |
$sth->execute( $itemnumber ); |
2076 |
$sth->execute( $itemnumber ); |
Lines 2171-2177
sub RevertWaitingStatus {
Link Here
|
2171 |
|
2106 |
|
2172 |
=head2 GetReserveId |
2107 |
=head2 GetReserveId |
2173 |
|
2108 |
|
2174 |
$reserve_id = GetReserveId({ biblionumber => $biblionumber, borrowernumber => $borrowernumber [, itemnumber => $itemnumber ] }); |
2109 |
$reserve_id = GetReserveId({ biblionumber => $biblionumber, borrowernumber => $borrowernumber [, itemnumber => $itemnumber ] } ); |
2175 |
|
2110 |
|
2176 |
Returnes the first reserve id that matches the given criteria |
2111 |
Returnes the first reserve id that matches the given criteria |
2177 |
|
2112 |
|
Lines 2197-2202
sub GetReserveId {
Link Here
|
2197 |
|
2132 |
|
2198 |
$sql .= join( " AND ", @limits ); |
2133 |
$sql .= join( " AND ", @limits ); |
2199 |
|
2134 |
|
|
|
2135 |
$sql .= " ORDER BY priority"; |
2136 |
|
2200 |
my $sth = $dbh->prepare( $sql ); |
2137 |
my $sth = $dbh->prepare( $sql ); |
2201 |
$sth->execute( @params ); |
2138 |
$sth->execute( @params ); |
2202 |
my $row = $sth->fetchrow_hashref(); |
2139 |
my $row = $sth->fetchrow_hashref(); |
Lines 2204-2209
sub GetReserveId {
Link Here
|
2204 |
return $row->{'reserve_id'}; |
2141 |
return $row->{'reserve_id'}; |
2205 |
} |
2142 |
} |
2206 |
|
2143 |
|
|
|
2144 |
=head2 GetReserveNextEligible |
2145 |
|
2146 |
GetReserveNextEligible({ biblionumber => $bibnum, borrowernumber => $bornum |
2147 |
[, itemnumber => $itemnum ] |
2148 |
}) |
2149 |
|
2150 |
Returns the next eligible reserve id, or undef. |
2151 |
|
2152 |
If reserve is for a certain item, it is eligible only if it matches the itemnumber. |
2153 |
If a matching reserve is already waiting, return undef. |
2154 |
|
2155 |
=cut |
2156 |
|
2157 |
sub GetReserveNextEligible { |
2158 |
my ( $params ) = @_; |
2159 |
|
2160 |
return unless ( $params->{'biblionumber'} && $params->{'borrowernumber'} ); |
2161 |
|
2162 |
my $dbh = C4::Context->dbh(); |
2163 |
|
2164 |
my $sql = "SELECT reserve_id, found, itemnumber |
2165 |
FROM reserves |
2166 |
WHERE biblionumber=? |
2167 |
AND borrowernumber=? |
2168 |
ORDER BY priority"; |
2169 |
|
2170 |
my $sth = $dbh->prepare( $sql ); |
2171 |
$sth->execute( $params->{'biblionumber'}, $params->{'borrowernumber'} ); |
2172 |
|
2173 |
while ( my $row = $sth->fetchrow_hashref() ) { |
2174 |
next if ($row->{'itemnumber'} && ($row->{'itemnumber'} ne $params->{'itemnumber'})); |
2175 |
return if ($row->{'found'} =~ /[WF]/); # Waiting or Found(?) are never eligible |
2176 |
return $row->{'reserve_id'}; |
2177 |
} |
2178 |
|
2179 |
return; |
2180 |
} |
2181 |
|
2207 |
=head2 ReserveSlip |
2182 |
=head2 ReserveSlip |
2208 |
|
2183 |
|
2209 |
ReserveSlip($branchcode, $borrowernumber, $biblionumber) |
2184 |
ReserveSlip($branchcode, $borrowernumber, $biblionumber) |