View | Details | Raw Unified | Return to bug 14695
Collapse All | Expand All

(-)a/C4/Reserves.pm (-46 / +41 lines)
Lines 1324-1330 take care of the waiting status Link Here
1324
=cut
1324
=cut
1325
1325
1326
sub ModReserveAffect {
1326
sub ModReserveAffect {
1327
    my ( $itemnumber, $borrowernumber,$transferToDo ) = @_;
1327
    my ( $itemnumber, $borrowernumber, $transferToDo, $reserve_id ) = @_;
1328
    my $dbh = C4::Context->dbh;
1328
    my $dbh = C4::Context->dbh;
1329
1329
1330
    # we want to attach $itemnumber to $borrowernumber, find the biblionumber
1330
    # we want to attach $itemnumber to $borrowernumber, find the biblionumber
Lines 1335-1378 sub ModReserveAffect { Link Here
1335
1335
1336
    # get request - need to find out if item is already
1336
    # get request - need to find out if item is already
1337
    # waiting in order to not send duplicate hold filled notifications
1337
    # waiting in order to not send duplicate hold filled notifications
1338
    my $reserve_id = GetReserveId({
1338
1339
        borrowernumber => $borrowernumber,
1339
    my $hold;
1340
        biblionumber   => $biblionumber,
1340
    # Find hold by id if we have it
1341
    });
1341
    $hold = Koha::Holds->find( $reserve_id ) if $reserve_id;
1342
    return unless defined $reserve_id;
1342
    # Find item level hold for this item if there is one
1343
    my $request = GetReserveInfo($reserve_id);
1343
    $hold ||= Koha::Holds->search( { borrowernumber => $borrowernumber, itemnumber => $itemnumber } )->next();
1344
    my $already_on_shelf = ($request && $request->{found} eq 'W') ? 1 : 0;
1344
    # Find record level hold if there is no item level hold
1345
    $hold ||= Koha::Holds->search( { borrowernumber => $borrowernumber, biblionumber => $biblionumber } )->next();
1346
1347
    return unless $hold;
1348
1349
    $reserve_id = $hold->id();
1350
1351
    my $already_on_shelf = $hold->found && $hold->found eq 'W';
1345
1352
1346
    # If we affect a reserve that has to be transferred, don't set to Waiting
1353
    # If we affect a reserve that has to be transferred, don't set to Waiting
1347
    my $query;
1354
    my $query;
1348
    if ($transferToDo) {
1355
    if ($transferToDo) {
1349
    $query = "
1356
        $hold->set(
1350
        UPDATE reserves
1357
            {
1351
        SET    priority = 0,
1358
                priority   => 0,
1352
               itemnumber = ?,
1359
                itemnumber => $itemnumber,
1353
               found = 'T'
1360
                found      => 'T',
1354
        WHERE borrowernumber = ?
1361
            }
1355
          AND biblionumber = ?
1362
        );
1356
    ";
1357
    }
1363
    }
1358
    else {
1364
    else {
1359
    # affect the reserve to Waiting as well.
1365
        # affect the reserve to Waiting as well.
1360
        $query = "
1366
        $hold->set(
1361
            UPDATE reserves
1367
            {
1362
            SET     priority = 0,
1368
                priority    => 0,
1363
                    found = 'W',
1369
                itemnumber  => $itemnumber,
1364
                    waitingdate = NOW(),
1370
                found       => 'W',
1365
                    itemnumber = ?
1371
                waitingdate => dt_from_string(),
1366
            WHERE borrowernumber = ?
1372
            }
1367
              AND biblionumber = ?
1373
        );
1368
        ";
1369
    }
1374
    }
1370
    $sth = $dbh->prepare($query);
1375
    $hold->store();
1371
    $sth->execute( $itemnumber, $borrowernumber,$biblionumber);
1376
1372
    _koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber ) if ( !$transferToDo && !$already_on_shelf );
1377
    _koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber )
1378
      if ( !$transferToDo && !$already_on_shelf );
1379
1373
    _FixPriority( { biblionumber => $biblionumber } );
1380
    _FixPriority( { biblionumber => $biblionumber } );
1381
1374
    if ( C4::Context->preference("ReturnToShelvingCart") ) {
1382
    if ( C4::Context->preference("ReturnToShelvingCart") ) {
1375
      CartToShelf( $itemnumber );
1383
        CartToShelf($itemnumber);
1376
    }
1384
    }
1377
1385
1378
    return;
1386
    return;
Lines 2342-2367 sub GetReserveId { Link Here
2342
2350
2343
    return unless ( ( $params->{'biblionumber'} || $params->{'itemnumber'} ) && $params->{'borrowernumber'} );
2351
    return unless ( ( $params->{'biblionumber'} || $params->{'itemnumber'} ) && $params->{'borrowernumber'} );
2344
2352
2345
    my $dbh = C4::Context->dbh();
2346
2347
    my $sql = "SELECT reserve_id FROM reserves WHERE ";
2348
2349
    my @params;
2350
    my @limits;
2351
    foreach my $key ( keys %$params ) {
2353
    foreach my $key ( keys %$params ) {
2352
        if ( defined( $params->{$key} ) ) {
2354
        delete $params->{$key} unless defined( $params->{$key} );
2353
            push( @limits, "$key = ?" );
2354
            push( @params, $params->{$key} );
2355
        }
2356
    }
2355
    }
2357
2356
2358
    $sql .= join( " AND ", @limits );
2357
    my $hold = Koha::Holds->search( $params )->next();
2359
2360
    my $sth = $dbh->prepare( $sql );
2361
    $sth->execute( @params );
2362
    my $row = $sth->fetchrow_hashref();
2363
2358
2364
    return $row->{'reserve_id'};
2359
    return $hold->id();
2365
}
2360
}
2366
2361
2367
=head2 ReserveSlip
2362
=head2 ReserveSlip
(-)a/circ/returns.pl (-5 / +5 lines)
Lines 143-152 if ($query->param('WT-itemNumber')){ Link Here
143
	updateWrongTransfer ($query->param('WT-itemNumber'),$query->param('WT-waitingAt'),$query->param('WT-From'));
143
	updateWrongTransfer ($query->param('WT-itemNumber'),$query->param('WT-waitingAt'),$query->param('WT-From'));
144
}
144
}
145
145
146
if ( $query->param('resbarcode') ) {
146
if ( $query->param('reserve_id') ) {
147
    my $item           = $query->param('itemnumber');
147
    my $item           = $query->param('itemnumber');
148
    my $borrowernumber = $query->param('borrowernumber');
148
    my $borrowernumber = $query->param('borrowernumber');
149
    my $resbarcode     = $query->param('resbarcode');
149
    my $reserve_id     = $query->param('reserve_id');
150
    my $diffBranchReturned = $query->param('diffBranch');
150
    my $diffBranchReturned = $query->param('diffBranch');
151
    my $iteminfo   = GetBiblioFromItemNumber($item);
151
    my $iteminfo   = GetBiblioFromItemNumber($item);
152
    my $cancel_reserve = $query->param('cancel_reserve');
152
    my $cancel_reserve = $query->param('cancel_reserve');
Lines 154-165 if ( $query->param('resbarcode') ) { Link Here
154
    $iteminfo->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $iteminfo->{'itype'} : $iteminfo->{'itemtype'};
154
    $iteminfo->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $iteminfo->{'itype'} : $iteminfo->{'itemtype'};
155
155
156
    if ( $cancel_reserve ) {
156
    if ( $cancel_reserve ) {
157
        CancelReserve({ borrowernumber => $borrowernumber, itemnumber => $item, charge_cancel_fee => !$forgivemanualholdsexpire });
157
        CancelReserve({ reserve_id => $reserve_id, charge_cancel_fee => !$forgivemanualholdsexpire });
158
    } else {
158
    } else {
159
        my $diffBranchSend = ($userenv_branch ne $diffBranchReturned) ? $diffBranchReturned : undef;
159
        my $diffBranchSend = ($userenv_branch ne $diffBranchReturned) ? $diffBranchReturned : undef;
160
        # diffBranchSend tells ModReserveAffect whether document is expected in this library or not,
160
        # diffBranchSend tells ModReserveAffect whether document is expected in this library or not,
161
        # i.e., whether to apply waiting status
161
        # i.e., whether to apply waiting status
162
        ModReserveAffect( $item, $borrowernumber, $diffBranchSend);
162
        ModReserveAffect( $item, $borrowernumber, $diffBranchSend, $reserve_id );
163
    }
163
    }
164
#   check if we have other reserves for this document, if we have a return send the message of transfer
164
#   check if we have other reserves for this document, if we have a return send the message of transfer
165
    my ( $messages, $nextreservinfo ) = GetOtherReserves($item);
165
    my ( $messages, $nextreservinfo ) = GetOtherReserves($item);
Lines 440-446 if ( $messages->{'ResFound'}) { Link Here
440
            $template->param(
440
            $template->param(
441
                intransit    => ($userenv_branch eq $reserve->{'branchcode'} ? 0 : 1 ),
441
                intransit    => ($userenv_branch eq $reserve->{'branchcode'} ? 0 : 1 ),
442
                transfertodo => ($userenv_branch eq $reserve->{'branchcode'} ? 0 : 1 ),
442
                transfertodo => ($userenv_branch eq $reserve->{'branchcode'} ? 0 : 1 ),
443
                resbarcode   => $barcode,
443
                reserve_id   => $reserve->{reserve_id},
444
                reserved     => 1,
444
                reserved     => 1,
445
            );
445
            );
446
        }
446
        }
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt (-1 / +2 lines)
Lines 283-288 $(document).ready(function () { Link Here
283
                <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
283
                <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
284
                <input type="hidden" name="biblionumber" value="[% itembiblionumber %]" />
284
                <input type="hidden" name="biblionumber" value="[% itembiblionumber %]" />
285
                <input type="hidden" name="resbarcode" value="[% barcode | html %]" />
285
                <input type="hidden" name="resbarcode" value="[% barcode | html %]" />
286
                <input type="hidden" name="reserve_id" value="[% reserve_id %]" />
286
                <input type="hidden" name="diffBranch" value="[% destbranch %]" />
287
                <input type="hidden" name="diffBranch" value="[% destbranch %]" />
287
                <input type="hidden" name="exemptfine" value="[% exemptfine %]" />
288
                <input type="hidden" name="exemptfine" value="[% exemptfine %]" />
288
                <input type="hidden" name="dropboxmode" value="[% dropboxmode %]" />
289
                <input type="hidden" name="dropboxmode" value="[% dropboxmode %]" />
Lines 448-453 $(document).ready(function () { Link Here
448
            <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
449
            <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
449
            <input type="hidden" name="biblionumber" value="[% itembiblionumber %]" />
450
            <input type="hidden" name="biblionumber" value="[% itembiblionumber %]" />
450
            <input type="hidden" name="resbarcode" value="[% barcode | html %]" />
451
            <input type="hidden" name="resbarcode" value="[% barcode | html %]" />
452
            <input type="hidden" name="reserve_id" value="[% reserve_id %]" />
451
            <input type="hidden" name="diffBranch" value="[% destbranch %]" />
453
            <input type="hidden" name="diffBranch" value="[% destbranch %]" />
452
            <input type="hidden" name="exemptfine" value="[% exemptfine %]" />
454
            <input type="hidden" name="exemptfine" value="[% exemptfine %]" />
453
            <input type="hidden" name="dropboxmode" value="[% dropboxmode %]" />
455
            <input type="hidden" name="dropboxmode" value="[% dropboxmode %]" />
454
- 

Return to bug 14695