|
Lines 1311-1317
take care of the waiting status
Link Here
|
| 1311 |
=cut |
1311 |
=cut |
| 1312 |
|
1312 |
|
| 1313 |
sub ModReserveAffect { |
1313 |
sub ModReserveAffect { |
| 1314 |
my ( $itemnumber, $borrowernumber,$transferToDo ) = @_; |
1314 |
my ( $itemnumber, $borrowernumber, $transferToDo, $reserve_id ) = @_; |
| 1315 |
my $dbh = C4::Context->dbh; |
1315 |
my $dbh = C4::Context->dbh; |
| 1316 |
|
1316 |
|
| 1317 |
# we want to attach $itemnumber to $borrowernumber, find the biblionumber |
1317 |
# we want to attach $itemnumber to $borrowernumber, find the biblionumber |
|
Lines 1322-1365
sub ModReserveAffect {
Link Here
|
| 1322 |
|
1322 |
|
| 1323 |
# get request - need to find out if item is already |
1323 |
# get request - need to find out if item is already |
| 1324 |
# waiting in order to not send duplicate hold filled notifications |
1324 |
# waiting in order to not send duplicate hold filled notifications |
| 1325 |
my $reserve_id = GetReserveId({ |
1325 |
|
| 1326 |
borrowernumber => $borrowernumber, |
1326 |
my $hold; |
| 1327 |
biblionumber => $biblionumber, |
1327 |
# Find hold by id if we have it |
| 1328 |
}); |
1328 |
$hold = Koha::Holds->find( $reserve_id ) if $reserve_id; |
| 1329 |
return unless defined $reserve_id; |
1329 |
# Find item level hold for this item if there is one |
| 1330 |
my $request = GetReserveInfo($reserve_id); |
1330 |
$hold ||= Koha::Holds->search( { borrowernumber => $borrowernumber, itemnumber => $itemnumber } )->next(); |
| 1331 |
my $already_on_shelf = ($request && $request->{found} eq 'W') ? 1 : 0; |
1331 |
# Find record level hold if there is no item level hold |
|
|
1332 |
$hold ||= Koha::Holds->search( { borrowernumber => $borrowernumber, biblionumber => $biblionumber } )->next(); |
| 1333 |
|
| 1334 |
return unless $hold; |
| 1335 |
|
| 1336 |
$reserve_id = $hold->id(); |
| 1337 |
|
| 1338 |
my $already_on_shelf = $hold->found && $hold->found eq 'W'; |
| 1332 |
|
1339 |
|
| 1333 |
# If we affect a reserve that has to be transferred, don't set to Waiting |
1340 |
# If we affect a reserve that has to be transferred, don't set to Waiting |
| 1334 |
my $query; |
1341 |
my $query; |
| 1335 |
if ($transferToDo) { |
1342 |
if ($transferToDo) { |
| 1336 |
$query = " |
1343 |
$hold->set( |
| 1337 |
UPDATE reserves |
1344 |
{ |
| 1338 |
SET priority = 0, |
1345 |
priority => 0, |
| 1339 |
itemnumber = ?, |
1346 |
itemnumber => $itemnumber, |
| 1340 |
found = 'T' |
1347 |
found => 'T', |
| 1341 |
WHERE borrowernumber = ? |
1348 |
} |
| 1342 |
AND biblionumber = ? |
1349 |
); |
| 1343 |
"; |
|
|
| 1344 |
} |
1350 |
} |
| 1345 |
else { |
1351 |
else { |
| 1346 |
# affect the reserve to Waiting as well. |
1352 |
# affect the reserve to Waiting as well. |
| 1347 |
$query = " |
1353 |
$hold->set( |
| 1348 |
UPDATE reserves |
1354 |
{ |
| 1349 |
SET priority = 0, |
1355 |
priority => 0, |
| 1350 |
found = 'W', |
1356 |
itemnumber => $itemnumber, |
| 1351 |
waitingdate = NOW(), |
1357 |
found => 'W', |
| 1352 |
itemnumber = ? |
1358 |
waitingdate => dt_from_string(), |
| 1353 |
WHERE borrowernumber = ? |
1359 |
} |
| 1354 |
AND biblionumber = ? |
1360 |
); |
| 1355 |
"; |
|
|
| 1356 |
} |
1361 |
} |
| 1357 |
$sth = $dbh->prepare($query); |
1362 |
$hold->store(); |
| 1358 |
$sth->execute( $itemnumber, $borrowernumber,$biblionumber); |
1363 |
|
| 1359 |
_koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber ) if ( !$transferToDo && !$already_on_shelf ); |
1364 |
_koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber ) |
|
|
1365 |
if ( !$transferToDo && !$already_on_shelf ); |
| 1366 |
|
| 1360 |
_FixPriority( { biblionumber => $biblionumber } ); |
1367 |
_FixPriority( { biblionumber => $biblionumber } ); |
|
|
1368 |
|
| 1361 |
if ( C4::Context->preference("ReturnToShelvingCart") ) { |
1369 |
if ( C4::Context->preference("ReturnToShelvingCart") ) { |
| 1362 |
CartToShelf( $itemnumber ); |
1370 |
CartToShelf($itemnumber); |
| 1363 |
} |
1371 |
} |
| 1364 |
|
1372 |
|
| 1365 |
return; |
1373 |
return; |
|
Lines 2329-2354
sub GetReserveId {
Link Here
|
| 2329 |
|
2337 |
|
| 2330 |
return unless ( ( $params->{'biblionumber'} || $params->{'itemnumber'} ) && $params->{'borrowernumber'} ); |
2338 |
return unless ( ( $params->{'biblionumber'} || $params->{'itemnumber'} ) && $params->{'borrowernumber'} ); |
| 2331 |
|
2339 |
|
| 2332 |
my $dbh = C4::Context->dbh(); |
|
|
| 2333 |
|
| 2334 |
my $sql = "SELECT reserve_id FROM reserves WHERE "; |
| 2335 |
|
| 2336 |
my @params; |
| 2337 |
my @limits; |
| 2338 |
foreach my $key ( keys %$params ) { |
2340 |
foreach my $key ( keys %$params ) { |
| 2339 |
if ( defined( $params->{$key} ) ) { |
2341 |
delete $params->{$key} unless defined( $params->{$key} ); |
| 2340 |
push( @limits, "$key = ?" ); |
|
|
| 2341 |
push( @params, $params->{$key} ); |
| 2342 |
} |
| 2343 |
} |
2342 |
} |
| 2344 |
|
2343 |
|
| 2345 |
$sql .= join( " AND ", @limits ); |
2344 |
my $hold = Koha::Holds->search( $params )->next(); |
| 2346 |
|
|
|
| 2347 |
my $sth = $dbh->prepare( $sql ); |
| 2348 |
$sth->execute( @params ); |
| 2349 |
my $row = $sth->fetchrow_hashref(); |
| 2350 |
|
2345 |
|
| 2351 |
return $row->{'reserve_id'}; |
2346 |
return $hold->id(); |
| 2352 |
} |
2347 |
} |
| 2353 |
|
2348 |
|
| 2354 |
=head2 ReserveSlip |
2349 |
=head2 ReserveSlip |