|
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) |