Lines 188-194
sub AddReserve {
Link Here
|
188 |
"Reserve Charge - $title", $fee ); |
188 |
"Reserve Charge - $title", $fee ); |
189 |
} |
189 |
} |
190 |
|
190 |
|
191 |
#if ($const eq 'a'){ |
|
|
192 |
my $query = qq/ |
191 |
my $query = qq/ |
193 |
INSERT INTO reserves |
192 |
INSERT INTO reserves |
194 |
(borrowernumber,biblionumber,reservedate,branchcode,constrainttype, |
193 |
(borrowernumber,biblionumber,reservedate,branchcode,constrainttype, |
Lines 233-251
sub AddReserve {
Link Here
|
233 |
} |
232 |
} |
234 |
} |
233 |
} |
235 |
|
234 |
|
236 |
#} |
|
|
237 |
($const eq "o" || $const eq "e") or return; # FIXME: why not have a useful return value? |
238 |
$query = qq/ |
239 |
INSERT INTO reserveconstraints |
240 |
(borrowernumber,biblionumber,reservedate,biblioitemnumber) |
241 |
VALUES |
242 |
(?,?,?,?) |
243 |
/; |
244 |
$sth = $dbh->prepare($query); # keep prepare outside the loop! |
245 |
foreach (@$bibitems) { |
246 |
$sth->execute($borrowernumber, $biblionumber, $resdate, $_); |
247 |
} |
248 |
|
249 |
return; # FIXME: why not have a useful return value? |
235 |
return; # FIXME: why not have a useful return value? |
250 |
} |
236 |
} |
251 |
|
237 |
|
Lines 326-373
sub GetReservesFromBiblionumber {
Link Here
|
326 |
$query .= "ORDER BY priority"; |
312 |
$query .= "ORDER BY priority"; |
327 |
my $sth = $dbh->prepare($query); |
313 |
my $sth = $dbh->prepare($query); |
328 |
$sth->execute( @params ); |
314 |
$sth->execute( @params ); |
329 |
my @results; |
315 |
my $results = $sth->fetchall_arrayref({}); |
330 |
my $i = 0; |
316 |
return $results; |
331 |
while ( my $data = $sth->fetchrow_hashref ) { |
|
|
332 |
|
333 |
# FIXME - What is this doing? How do constraints work? |
334 |
if ($data->{constrainttype} eq 'o') { |
335 |
$query = ' |
336 |
SELECT biblioitemnumber |
337 |
FROM reserveconstraints |
338 |
WHERE biblionumber = ? |
339 |
AND borrowernumber = ? |
340 |
AND reservedate = ? |
341 |
'; |
342 |
my $csth = $dbh->prepare($query); |
343 |
$csth->execute($data->{biblionumber}, $data->{borrowernumber}, $data->{reservedate}); |
344 |
my @bibitemno; |
345 |
while ( my $bibitemnos = $csth->fetchrow_array ) { |
346 |
push( @bibitemno, $bibitemnos ); # FIXME: inefficient: use fetchall_arrayref |
347 |
} |
348 |
my $count = scalar @bibitemno; |
349 |
|
350 |
# if we have two or more different specific itemtypes |
351 |
# reserved by same person on same day |
352 |
my $bdata; |
353 |
if ( $count > 1 ) { |
354 |
$bdata = GetBiblioItemData( $bibitemno[$i] ); # FIXME: This doesn't make sense. |
355 |
$i++; # $i can increase each pass, but the next @bibitemno might be smaller? |
356 |
} |
357 |
else { |
358 |
# Look up the book we just found. |
359 |
$bdata = GetBiblioItemData( $bibitemno[0] ); |
360 |
} |
361 |
# Add the results of this latest search to the current |
362 |
# results. |
363 |
# FIXME - An 'each' would probably be more efficient. |
364 |
foreach my $key ( keys %$bdata ) { |
365 |
$data->{$key} = $bdata->{$key}; |
366 |
} |
367 |
} |
368 |
push @results, $data; |
369 |
} |
370 |
return \@results; |
371 |
} |
317 |
} |
372 |
|
318 |
|
373 |
=head2 GetReservesFromItemnumber |
319 |
=head2 GetReservesFromItemnumber |
Lines 1186-1230
sub ModReserveFill {
Link Here
|
1186 |
my $borrowernumber = $res->{'borrowernumber'}; |
1132 |
my $borrowernumber = $res->{'borrowernumber'}; |
1187 |
my $resdate = $res->{'reservedate'}; |
1133 |
my $resdate = $res->{'reservedate'}; |
1188 |
|
1134 |
|
|
|
1135 |
$reserve_id = GetReserveId({biblionumber => $biblionumber, |
1136 |
borrowernumber => $borrowernumber, |
1137 |
reservedate => $resdate}) if (!$reserve_id); |
1138 |
return if (!$reserve_id); |
1139 |
|
1189 |
# get the priority on this record.... |
1140 |
# get the priority on this record.... |
1190 |
my $priority; |
1141 |
my $priority; |
1191 |
my $query = "SELECT priority |
1142 |
my $query = "SELECT priority |
1192 |
FROM reserves |
1143 |
FROM reserves |
1193 |
WHERE biblionumber = ? |
1144 |
WHERE reserve_id = ?"; |
1194 |
AND borrowernumber = ? |
|
|
1195 |
AND reservedate = ?"; |
1196 |
my $sth = $dbh->prepare($query); |
1145 |
my $sth = $dbh->prepare($query); |
1197 |
$sth->execute( $biblionumber, $borrowernumber, $resdate ); |
1146 |
$sth->execute( $reserve_id ); |
1198 |
($priority) = $sth->fetchrow_array; |
1147 |
($priority) = $sth->fetchrow_array; |
1199 |
|
1148 |
|
1200 |
# update the database... |
1149 |
# update the database... |
1201 |
$query = "UPDATE reserves |
1150 |
$query = "UPDATE reserves |
1202 |
SET found = 'F', |
1151 |
SET found = 'F', |
1203 |
priority = 0 |
1152 |
priority = 0 |
1204 |
WHERE biblionumber = ? |
1153 |
WHERE reserve_id = ?"; |
1205 |
AND reservedate = ? |
|
|
1206 |
AND borrowernumber = ? |
1207 |
"; |
1208 |
$sth = $dbh->prepare($query); |
1154 |
$sth = $dbh->prepare($query); |
1209 |
$sth->execute( $biblionumber, $resdate, $borrowernumber ); |
1155 |
$sth->execute( $reserve_id ); |
1210 |
|
1156 |
|
1211 |
# move to old_reserves |
1157 |
# move to old_reserves |
1212 |
$query = "INSERT INTO old_reserves |
1158 |
$query = "INSERT INTO old_reserves |
1213 |
SELECT * FROM reserves |
1159 |
SELECT * FROM reserves |
1214 |
WHERE biblionumber = ? |
1160 |
WHERE reserve_id = ?"; |
1215 |
AND reservedate = ? |
|
|
1216 |
AND borrowernumber = ? |
1217 |
"; |
1218 |
$sth = $dbh->prepare($query); |
1161 |
$sth = $dbh->prepare($query); |
1219 |
$sth->execute( $biblionumber, $resdate, $borrowernumber ); |
1162 |
$sth->execute( $reserve_id ); |
1220 |
$query = "DELETE FROM reserves |
1163 |
$query = "DELETE FROM reserves |
1221 |
WHERE biblionumber = ? |
1164 |
WHERE reserve_id = ?"; |
1222 |
AND reservedate = ? |
|
|
1223 |
AND borrowernumber = ? |
1224 |
"; |
1225 |
$sth = $dbh->prepare($query); |
1165 |
$sth = $dbh->prepare($query); |
1226 |
$sth->execute( $biblionumber, $resdate, $borrowernumber ); |
1166 |
$sth->execute( $reserve_id ); |
1227 |
|
1167 |
|
1228 |
# now fix the priority on the others (if the priority wasn't |
1168 |
# now fix the priority on the others (if the priority wasn't |
1229 |
# already sorted!).... |
1169 |
# already sorted!).... |
1230 |
unless ( $priority == 0 ) { |
1170 |
unless ( $priority == 0 ) { |
Lines 1284-1298
sub ModReserveAffect {
Link Here
|
1284 |
$sth->execute($itemnumber); |
1224 |
$sth->execute($itemnumber); |
1285 |
my ($biblionumber) = $sth->fetchrow; |
1225 |
my ($biblionumber) = $sth->fetchrow; |
1286 |
|
1226 |
|
1287 |
# get request - need to find out if item is already |
1227 |
my $reserve_id = GetReserveNextEligible({ |
1288 |
# waiting in order to not send duplicate hold filled notifications |
1228 |
borrowernumber => $borrowernumber, |
1289 |
my $reserve_id = GetReserveId({ |
1229 |
biblionumber => $biblionumber, |
1290 |
borrowernumber => $borrowernumber, |
1230 |
itemnumber => $itemnumber |
1291 |
biblionumber => $biblionumber, |
1231 |
}); |
1292 |
}); |
1232 |
|
1293 |
return unless defined $reserve_id; |
1233 |
return unless defined $reserve_id; |
1294 |
my $request = GetReserveInfo($reserve_id); |
1234 |
my $request = GetReserveInfo($reserve_id); |
1295 |
my $already_on_shelf = ($request && $request->{found} eq 'W') ? 1 : 0; |
|
|
1296 |
|
1235 |
|
1297 |
# If we affect a reserve that has to be transfered, don't set to Waiting |
1236 |
# If we affect a reserve that has to be transfered, don't set to Waiting |
1298 |
my $query; |
1237 |
my $query; |
Lines 1302-1309
sub ModReserveAffect {
Link Here
|
1302 |
SET priority = 0, |
1241 |
SET priority = 0, |
1303 |
itemnumber = ?, |
1242 |
itemnumber = ?, |
1304 |
found = 'T' |
1243 |
found = 'T' |
1305 |
WHERE borrowernumber = ? |
1244 |
WHERE reserve_id = ? |
1306 |
AND biblionumber = ? |
|
|
1307 |
"; |
1245 |
"; |
1308 |
} |
1246 |
} |
1309 |
else { |
1247 |
else { |
Lines 1314-1327
sub ModReserveAffect {
Link Here
|
1314 |
found = 'W', |
1252 |
found = 'W', |
1315 |
waitingdate = NOW(), |
1253 |
waitingdate = NOW(), |
1316 |
itemnumber = ? |
1254 |
itemnumber = ? |
1317 |
WHERE borrowernumber = ? |
1255 |
WHERE reserve_id = ? |
1318 |
AND biblionumber = ? |
|
|
1319 |
"; |
1256 |
"; |
1320 |
} |
1257 |
} |
1321 |
$sth = $dbh->prepare($query); |
1258 |
$sth = $dbh->prepare($query); |
1322 |
$sth->execute( $itemnumber, $borrowernumber,$biblionumber); |
1259 |
$sth->execute( $itemnumber, $reserve_id ); |
1323 |
_koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber ) if ( !$transferToDo && !$already_on_shelf ); |
1260 |
_koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber, $reserve_id ) if ( !$transferToDo ); |
1324 |
_FixPriority( { biblionumber => $biblionumber } ); |
1261 |
|
|
|
1262 |
if ( $request && $request->{priority} != 0 ) { |
1263 |
_FixPriority({ reserve_id => $reserve_id }); |
1264 |
} |
1265 |
|
1325 |
if ( C4::Context->preference("ReturnToShelvingCart") ) { |
1266 |
if ( C4::Context->preference("ReturnToShelvingCart") ) { |
1326 |
CartToShelf( $itemnumber ); |
1267 |
CartToShelf( $itemnumber ); |
1327 |
} |
1268 |
} |
Lines 1540-1546
sub AlterPriority {
Link Here
|
1540 |
|
1481 |
|
1541 |
=head2 ToggleLowestPriority |
1482 |
=head2 ToggleLowestPriority |
1542 |
|
1483 |
|
1543 |
ToggleLowestPriority( $borrowernumber, $biblionumber ); |
1484 |
ToggleLowestPriority( $reserve_id ); |
1544 |
|
1485 |
|
1545 |
This function sets the lowestPriority field to true if is false, and false if it is true. |
1486 |
This function sets the lowestPriority field to true if is false, and false if it is true. |
1546 |
|
1487 |
|
Lines 1804-1809
sub _Findgroupreserve {
Link Here
|
1804 |
my $item_level_target_query = qq/ |
1745 |
my $item_level_target_query = qq/ |
1805 |
SELECT reserves.biblionumber AS biblionumber, |
1746 |
SELECT reserves.biblionumber AS biblionumber, |
1806 |
reserves.borrowernumber AS borrowernumber, |
1747 |
reserves.borrowernumber AS borrowernumber, |
|
|
1748 |
reserves.reserve_id AS reserve_id, |
1807 |
reserves.reservedate AS reservedate, |
1749 |
reserves.reservedate AS reservedate, |
1808 |
reserves.branchcode AS branchcode, |
1750 |
reserves.branchcode AS branchcode, |
1809 |
reserves.cancellationdate AS cancellationdate, |
1751 |
reserves.cancellationdate AS cancellationdate, |
Lines 1836-1841
sub _Findgroupreserve {
Link Here
|
1836 |
my $title_level_target_query = qq/ |
1778 |
my $title_level_target_query = qq/ |
1837 |
SELECT reserves.biblionumber AS biblionumber, |
1779 |
SELECT reserves.biblionumber AS biblionumber, |
1838 |
reserves.borrowernumber AS borrowernumber, |
1780 |
reserves.borrowernumber AS borrowernumber, |
|
|
1781 |
reserves.reserve_id AS reserve_id, |
1839 |
reserves.reservedate AS reservedate, |
1782 |
reserves.reservedate AS reservedate, |
1840 |
reserves.branchcode AS branchcode, |
1783 |
reserves.branchcode AS branchcode, |
1841 |
reserves.cancellationdate AS cancellationdate, |
1784 |
reserves.cancellationdate AS cancellationdate, |
Lines 1867-1872
sub _Findgroupreserve {
Link Here
|
1867 |
my $query = qq/ |
1810 |
my $query = qq/ |
1868 |
SELECT reserves.biblionumber AS biblionumber, |
1811 |
SELECT reserves.biblionumber AS biblionumber, |
1869 |
reserves.borrowernumber AS borrowernumber, |
1812 |
reserves.borrowernumber AS borrowernumber, |
|
|
1813 |
reserves.reserve_id AS reserve_id, |
1870 |
reserves.reservedate AS reservedate, |
1814 |
reserves.reservedate AS reservedate, |
1871 |
reserves.waitingdate AS waitingdate, |
1815 |
reserves.waitingdate AS waitingdate, |
1872 |
reserves.branchcode AS branchcode, |
1816 |
reserves.branchcode AS branchcode, |
Lines 1875-1896
sub _Findgroupreserve {
Link Here
|
1875 |
reserves.reservenotes AS reservenotes, |
1819 |
reserves.reservenotes AS reservenotes, |
1876 |
reserves.priority AS priority, |
1820 |
reserves.priority AS priority, |
1877 |
reserves.timestamp AS timestamp, |
1821 |
reserves.timestamp AS timestamp, |
1878 |
reserveconstraints.biblioitemnumber AS biblioitemnumber, |
1822 |
biblioitems.biblioitemnumber AS biblioitemnumber, |
1879 |
reserves.itemnumber AS itemnumber, |
1823 |
reserves.itemnumber AS itemnumber |
1880 |
reserves.reserve_id AS reserve_id |
|
|
1881 |
FROM reserves |
1824 |
FROM reserves |
1882 |
LEFT JOIN reserveconstraints ON reserves.biblionumber = reserveconstraints.biblionumber |
1825 |
JOIN biblioitems USING (biblionumber) |
1883 |
WHERE reserves.biblionumber = ? |
1826 |
WHERE reserves.biblionumber = ? |
1884 |
AND ( ( reserveconstraints.biblioitemnumber = ? |
1827 |
AND (reserves.constrainttype='a') |
1885 |
AND reserves.borrowernumber = reserveconstraints.borrowernumber |
|
|
1886 |
AND reserves.reservedate = reserveconstraints.reservedate ) |
1887 |
OR reserves.constrainttype='a' ) |
1888 |
AND (reserves.itemnumber IS NULL OR reserves.itemnumber = ?) |
1828 |
AND (reserves.itemnumber IS NULL OR reserves.itemnumber = ?) |
1889 |
AND reserves.reservedate <= DATE_ADD(NOW(),INTERVAL ? DAY) |
1829 |
AND reserves.reservedate <= DATE_ADD(NOW(),INTERVAL ? DAY) |
1890 |
AND suspend = 0 |
1830 |
AND suspend = 0 |
1891 |
/; |
1831 |
/; |
1892 |
$sth = $dbh->prepare($query); |
1832 |
$sth = $dbh->prepare($query); |
1893 |
$sth->execute( $biblio, $bibitem, $itemnumber, $lookahead||0); |
1833 |
$sth->execute( $biblio, $itemnumber, $lookahead||0); |
1894 |
@results = (); |
1834 |
@results = (); |
1895 |
while ( my $data = $sth->fetchrow_hashref ) { |
1835 |
while ( my $data = $sth->fetchrow_hashref ) { |
1896 |
push( @results, $data ); |
1836 |
push( @results, $data ); |
Lines 1900-1906
sub _Findgroupreserve {
Link Here
|
1900 |
|
1840 |
|
1901 |
=head2 _koha_notify_reserve |
1841 |
=head2 _koha_notify_reserve |
1902 |
|
1842 |
|
1903 |
_koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber ); |
1843 |
_koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber, $reserve_id ); |
1904 |
|
1844 |
|
1905 |
Sends a notification to the patron that their hold has been filled (through |
1845 |
Sends a notification to the patron that their hold has been filled (through |
1906 |
ModReserveAffect, _not_ ModReserveFill) |
1846 |
ModReserveAffect, _not_ ModReserveFill) |
Lines 1908-1914
ModReserveAffect, _not_ ModReserveFill)
Link Here
|
1908 |
=cut |
1848 |
=cut |
1909 |
|
1849 |
|
1910 |
sub _koha_notify_reserve { |
1850 |
sub _koha_notify_reserve { |
1911 |
my ($itemnumber, $borrowernumber, $biblionumber) = @_; |
1851 |
my ($itemnumber, $borrowernumber, $biblionumber, $reserve_id) = @_; |
1912 |
|
1852 |
|
1913 |
my $dbh = C4::Context->dbh; |
1853 |
my $dbh = C4::Context->dbh; |
1914 |
my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber); |
1854 |
my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber); |
Lines 1926-1933
sub _koha_notify_reserve {
Link Here
|
1926 |
FROM reserves |
1866 |
FROM reserves |
1927 |
WHERE borrowernumber = ? |
1867 |
WHERE borrowernumber = ? |
1928 |
AND biblionumber = ? |
1868 |
AND biblionumber = ? |
|
|
1869 |
AND reserve_id = ? |
1929 |
"); |
1870 |
"); |
1930 |
$sth->execute( $borrowernumber, $biblionumber ); |
1871 |
$sth->execute( $borrowernumber, $biblionumber, $reserve_id ); |
1931 |
my $reserve = $sth->fetchrow_hashref; |
1872 |
my $reserve = $sth->fetchrow_hashref; |
1932 |
my $branch_details = GetBranchDetail( $reserve->{'branchcode'} ); |
1873 |
my $branch_details = GetBranchDetail( $reserve->{'branchcode'} ); |
1933 |
|
1874 |
|
Lines 2013-2030
sub _ShiftPriorityByDateAndPriority {
Link Here
|
2013 |
# Shift the priority up by one; works in conjunction with the next SQL statement |
1954 |
# Shift the priority up by one; works in conjunction with the next SQL statement |
2014 |
$query = "UPDATE reserves |
1955 |
$query = "UPDATE reserves |
2015 |
SET priority = priority+1 |
1956 |
SET priority = priority+1 |
2016 |
WHERE biblionumber = ? |
1957 |
WHERE reserve_id = ? |
2017 |
AND borrowernumber = ? |
|
|
2018 |
AND reservedate = ? |
2019 |
AND found IS NULL"; |
1958 |
AND found IS NULL"; |
2020 |
my $sth_update = $dbh->prepare( $query ); |
1959 |
my $sth_update = $dbh->prepare( $query ); |
2021 |
|
1960 |
|
2022 |
# Select all reserves for the biblio with priority greater than $new_priority, and order greatest to least |
1961 |
# Select all reserves for the biblio with priority greater than $new_priority, and order greatest to least |
2023 |
$query = "SELECT borrowernumber, reservedate FROM reserves WHERE priority >= ? AND biblionumber = ? ORDER BY priority DESC"; |
1962 |
$query = "SELECT reserve_id FROM reserves WHERE priority >= ? AND biblionumber = ? ORDER BY priority DESC"; |
2024 |
$sth = $dbh->prepare( $query ); |
1963 |
$sth = $dbh->prepare( $query ); |
2025 |
$sth->execute( $new_priority, $biblio ); |
1964 |
$sth->execute( $new_priority, $biblio ); |
2026 |
while ( my $row = $sth->fetchrow_hashref ) { |
1965 |
while ( my $row = $sth->fetchrow_hashref ) { |
2027 |
$sth_update->execute( $biblio, $row->{borrowernumber}, $row->{reservedate} ); |
1966 |
$sth_update->execute( $row->{reserve_id} ); |
2028 |
} |
1967 |
} |
2029 |
|
1968 |
|
2030 |
return $new_priority; # so the caller knows what priority they wind up receiving |
1969 |
return $new_priority; # so the caller knows what priority they wind up receiving |
Lines 2074-2084
sub MoveReserve {
Link Here
|
2074 |
RevertWaitingStatus({ itemnumber => $itemnumber }); |
2013 |
RevertWaitingStatus({ itemnumber => $itemnumber }); |
2075 |
} |
2014 |
} |
2076 |
elsif ( $cancelreserve eq 'cancel' || $cancelreserve ) { # cancel reserves on this item |
2015 |
elsif ( $cancelreserve eq 'cancel' || $cancelreserve ) { # cancel reserves on this item |
2077 |
CancelReserve({ |
2016 |
CancelReserve({ reserve_id => $res->{'reserve_id'} }); |
2078 |
biblionumber => $res->{'biblionumber'}, |
|
|
2079 |
itemnumber => $res->{'itemnumber'}, |
2080 |
borrowernumber => $res->{'borrowernumber'} |
2081 |
}); |
2082 |
} |
2017 |
} |
2083 |
} |
2018 |
} |
2084 |
} |
2019 |
} |
Lines 2154-2159
sub RevertWaitingStatus {
Link Here
|
2154 |
SELECT * FROM reserves |
2089 |
SELECT * FROM reserves |
2155 |
WHERE itemnumber = ? |
2090 |
WHERE itemnumber = ? |
2156 |
AND found IS NOT NULL |
2091 |
AND found IS NOT NULL |
|
|
2092 |
ORDER BY priority |
2157 |
"; |
2093 |
"; |
2158 |
my $sth = $dbh->prepare( $query ); |
2094 |
my $sth = $dbh->prepare( $query ); |
2159 |
$sth->execute( $itemnumber ); |
2095 |
$sth->execute( $itemnumber ); |
Lines 2190-2196
sub RevertWaitingStatus {
Link Here
|
2190 |
|
2126 |
|
2191 |
=head2 GetReserveId |
2127 |
=head2 GetReserveId |
2192 |
|
2128 |
|
2193 |
$reserve_id = GetReserveId({ biblionumber => $biblionumber, borrowernumber => $borrowernumber [, itemnumber => $itemnumber ] }); |
2129 |
$reserve_id = GetReserveId({ biblionumber => $biblionumber, borrowernumber => $borrowernumber [, itemnumber => $itemnumber ] } ); |
2194 |
|
2130 |
|
2195 |
Returnes the first reserve id that matches the given criteria |
2131 |
Returnes the first reserve id that matches the given criteria |
2196 |
|
2132 |
|
Lines 2216-2221
sub GetReserveId {
Link Here
|
2216 |
|
2152 |
|
2217 |
$sql .= join( " AND ", @limits ); |
2153 |
$sql .= join( " AND ", @limits ); |
2218 |
|
2154 |
|
|
|
2155 |
$sql .= " ORDER BY priority"; |
2156 |
|
2219 |
my $sth = $dbh->prepare( $sql ); |
2157 |
my $sth = $dbh->prepare( $sql ); |
2220 |
$sth->execute( @params ); |
2158 |
$sth->execute( @params ); |
2221 |
my $row = $sth->fetchrow_hashref(); |
2159 |
my $row = $sth->fetchrow_hashref(); |
Lines 2223-2228
sub GetReserveId {
Link Here
|
2223 |
return $row->{'reserve_id'}; |
2161 |
return $row->{'reserve_id'}; |
2224 |
} |
2162 |
} |
2225 |
|
2163 |
|
|
|
2164 |
=head2 GetReserveNextEligible |
2165 |
|
2166 |
GetReserveNextEligible({ biblionumber => $bibnum, borrowernumber => $bornum |
2167 |
[, itemnumber => $itemnum ] |
2168 |
}) |
2169 |
|
2170 |
Returns the next eligible reserve id, or undef. |
2171 |
|
2172 |
If reserve is for a certain item, it is eligible only if it matches the itemnumber. |
2173 |
If a matching reserve is already waiting, return undef. |
2174 |
|
2175 |
=cut |
2176 |
|
2177 |
sub GetReserveNextEligible { |
2178 |
my ( $params ) = @_; |
2179 |
|
2180 |
return unless ( $params->{'biblionumber'} && $params->{'borrowernumber'} ); |
2181 |
|
2182 |
my $dbh = C4::Context->dbh(); |
2183 |
|
2184 |
my $sql = "SELECT reserve_id, found, itemnumber |
2185 |
FROM reserves |
2186 |
WHERE biblionumber=? |
2187 |
AND borrowernumber=? |
2188 |
ORDER BY priority"; |
2189 |
|
2190 |
my $sth = $dbh->prepare( $sql ); |
2191 |
$sth->execute( $params->{'biblionumber'}, $params->{'borrowernumber'} ); |
2192 |
|
2193 |
while ( my $row = $sth->fetchrow_hashref() ) { |
2194 |
next if ($row->{'itemnumber'} && ($row->{'itemnumber'} ne $params->{'itemnumber'})); |
2195 |
return if ($row->{'found'} =~ /[WF]/); # Waiting or Found(?) are never eligible |
2196 |
return $row->{'reserve_id'}; |
2197 |
} |
2198 |
|
2199 |
return; |
2200 |
} |
2201 |
|
2226 |
=head2 ReserveSlip |
2202 |
=head2 ReserveSlip |
2227 |
|
2203 |
|
2228 |
ReserveSlip($branchcode, $borrowernumber, $biblionumber) |
2204 |
ReserveSlip($branchcode, $borrowernumber, $biblionumber) |