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

(-)a/C4/Reserves.pm (-46 / +41 lines)
Lines 1305-1311 take care of the waiting status Link Here
1305
=cut
1305
=cut
1306
1306
1307
sub ModReserveAffect {
1307
sub ModReserveAffect {
1308
    my ( $itemnumber, $borrowernumber,$transferToDo ) = @_;
1308
    my ( $itemnumber, $borrowernumber, $transferToDo, $reserve_id ) = @_;
1309
    my $dbh = C4::Context->dbh;
1309
    my $dbh = C4::Context->dbh;
1310
1310
1311
    # we want to attach $itemnumber to $borrowernumber, find the biblionumber
1311
    # we want to attach $itemnumber to $borrowernumber, find the biblionumber
Lines 1316-1359 sub ModReserveAffect { Link Here
1316
1316
1317
    # get request - need to find out if item is already
1317
    # get request - need to find out if item is already
1318
    # waiting in order to not send duplicate hold filled notifications
1318
    # waiting in order to not send duplicate hold filled notifications
1319
    my $reserve_id = GetReserveId({
1319
1320
        borrowernumber => $borrowernumber,
1320
    my $hold;
1321
        biblionumber   => $biblionumber,
1321
    # Find hold by id if we have it
1322
    });
1322
    $hold = Koha::Holds->find( $reserve_id ) if $reserve_id;
1323
    return unless defined $reserve_id;
1323
    # Find item level hold for this item if there is one
1324
    my $request = GetReserveInfo($reserve_id);
1324
    $hold ||= Koha::Holds->search( { borrowernumber => $borrowernumber, itemnumber => $itemnumber } )->next();
1325
    my $already_on_shelf = ($request && $request->{found} eq 'W') ? 1 : 0;
1325
    # Find record level hold if there is no item level hold
1326
    $hold ||= Koha::Holds->search( { borrowernumber => $borrowernumber, biblionumber => $biblionumber } )->next();
1327
1328
    return unless $hold;
1329
1330
    $reserve_id = $hold->id();
1331
1332
    my $already_on_shelf = $hold->found && $hold->found eq 'W';
1326
1333
1327
    # If we affect a reserve that has to be transferred, don't set to Waiting
1334
    # If we affect a reserve that has to be transferred, don't set to Waiting
1328
    my $query;
1335
    my $query;
1329
    if ($transferToDo) {
1336
    if ($transferToDo) {
1330
    $query = "
1337
        $hold->set(
1331
        UPDATE reserves
1338
            {
1332
        SET    priority = 0,
1339
                priority   => 0,
1333
               itemnumber = ?,
1340
                itemnumber => $itemnumber,
1334
               found = 'T'
1341
                found      => 'T',
1335
        WHERE borrowernumber = ?
1342
            }
1336
          AND biblionumber = ?
1343
        );
1337
    ";
1338
    }
1344
    }
1339
    else {
1345
    else {
1340
    # affect the reserve to Waiting as well.
1346
        # affect the reserve to Waiting as well.
1341
        $query = "
1347
        $hold->set(
1342
            UPDATE reserves
1348
            {
1343
            SET     priority = 0,
1349
                priority    => 0,
1344
                    found = 'W',
1350
                itemnumber  => $itemnumber,
1345
                    waitingdate = NOW(),
1351
                found       => 'W',
1346
                    itemnumber = ?
1352
                waitingdate => dt_from_string(),
1347
            WHERE borrowernumber = ?
1353
            }
1348
              AND biblionumber = ?
1354
        );
1349
        ";
1350
    }
1355
    }
1351
    $sth = $dbh->prepare($query);
1356
    $hold->store();
1352
    $sth->execute( $itemnumber, $borrowernumber,$biblionumber);
1357
1353
    _koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber ) if ( !$transferToDo && !$already_on_shelf );
1358
    _koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber )
1359
      if ( !$transferToDo && !$already_on_shelf );
1360
1354
    _FixPriority( { biblionumber => $biblionumber } );
1361
    _FixPriority( { biblionumber => $biblionumber } );
1362
1355
    if ( C4::Context->preference("ReturnToShelvingCart") ) {
1363
    if ( C4::Context->preference("ReturnToShelvingCart") ) {
1356
      CartToShelf( $itemnumber );
1364
        CartToShelf($itemnumber);
1357
    }
1365
    }
1358
1366
1359
    return;
1367
    return;
Lines 2298-2323 sub GetReserveId { Link Here
2298
2306
2299
    return unless ( ( $params->{'biblionumber'} || $params->{'itemnumber'} ) && $params->{'borrowernumber'} );
2307
    return unless ( ( $params->{'biblionumber'} || $params->{'itemnumber'} ) && $params->{'borrowernumber'} );
2300
2308
2301
    my $dbh = C4::Context->dbh();
2302
2303
    my $sql = "SELECT reserve_id FROM reserves WHERE ";
2304
2305
    my @params;
2306
    my @limits;
2307
    foreach my $key ( keys %$params ) {
2309
    foreach my $key ( keys %$params ) {
2308
        if ( defined( $params->{$key} ) ) {
2310
        delete $params->{$key} unless defined( $params->{$key} );
2309
            push( @limits, "$key = ?" );
2310
            push( @params, $params->{$key} );
2311
        }
2312
    }
2311
    }
2313
2312
2314
    $sql .= join( " AND ", @limits );
2313
    my $hold = Koha::Holds->search( $params )->next();
2315
2316
    my $sth = $dbh->prepare( $sql );
2317
    $sth->execute( @params );
2318
    my $row = $sth->fetchrow_hashref();
2319
2314
2320
    return $row->{'reserve_id'};
2315
    return $hold->id();
2321
}
2316
}
2322
2317
2323
=head2 ReserveSlip
2318
=head2 ReserveSlip
(-)a/circ/returns.pl (-5 / +5 lines)
Lines 142-151 if ($query->param('WT-itemNumber')){ Link Here
142
	updateWrongTransfer ($query->param('WT-itemNumber'),$query->param('WT-waitingAt'),$query->param('WT-From'));
142
	updateWrongTransfer ($query->param('WT-itemNumber'),$query->param('WT-waitingAt'),$query->param('WT-From'));
143
}
143
}
144
144
145
if ( $query->param('resbarcode') ) {
145
if ( $query->param('reserve_id') ) {
146
    my $item           = $query->param('itemnumber');
146
    my $item           = $query->param('itemnumber');
147
    my $borrowernumber = $query->param('borrowernumber');
147
    my $borrowernumber = $query->param('borrowernumber');
148
    my $resbarcode     = $query->param('resbarcode');
148
    my $reserve_id     = $query->param('reserve_id');
149
    my $diffBranchReturned = $query->param('diffBranch');
149
    my $diffBranchReturned = $query->param('diffBranch');
150
    my $iteminfo   = GetBiblioFromItemNumber($item);
150
    my $iteminfo   = GetBiblioFromItemNumber($item);
151
    my $cancel_reserve = $query->param('cancel_reserve');
151
    my $cancel_reserve = $query->param('cancel_reserve');
Lines 153-164 if ( $query->param('resbarcode') ) { Link Here
153
    $iteminfo->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $iteminfo->{'itype'} : $iteminfo->{'itemtype'};
153
    $iteminfo->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $iteminfo->{'itype'} : $iteminfo->{'itemtype'};
154
154
155
    if ( $cancel_reserve ) {
155
    if ( $cancel_reserve ) {
156
        CancelReserve({ borrowernumber => $borrowernumber, itemnumber => $item, charge_cancel_fee => !$forgivemanualholdsexpire });
156
        CancelReserve({ reserve_id => $reserve_id, charge_cancel_fee => !$forgivemanualholdsexpire });
157
    } else {
157
    } else {
158
        my $diffBranchSend = ($userenv_branch ne $diffBranchReturned) ? $diffBranchReturned : undef;
158
        my $diffBranchSend = ($userenv_branch ne $diffBranchReturned) ? $diffBranchReturned : undef;
159
        # diffBranchSend tells ModReserveAffect whether document is expected in this library or not,
159
        # diffBranchSend tells ModReserveAffect whether document is expected in this library or not,
160
        # i.e., whether to apply waiting status
160
        # i.e., whether to apply waiting status
161
        ModReserveAffect( $item, $borrowernumber, $diffBranchSend);
161
        ModReserveAffect( $item, $borrowernumber, $diffBranchSend, $reserve_id );
162
    }
162
    }
163
#   check if we have other reserves for this document, if we have a return send the message of transfer
163
#   check if we have other reserves for this document, if we have a return send the message of transfer
164
    my ( $messages, $nextreservinfo ) = GetOtherReserves($item);
164
    my ( $messages, $nextreservinfo ) = GetOtherReserves($item);
Lines 432-438 if ( $messages->{'ResFound'}) { Link Here
432
            $template->param(
432
            $template->param(
433
                intransit    => ($userenv_branch eq $reserve->{'branchcode'} ? 0 : 1 ),
433
                intransit    => ($userenv_branch eq $reserve->{'branchcode'} ? 0 : 1 ),
434
                transfertodo => ($userenv_branch eq $reserve->{'branchcode'} ? 0 : 1 ),
434
                transfertodo => ($userenv_branch eq $reserve->{'branchcode'} ? 0 : 1 ),
435
                resbarcode   => $barcode,
435
                reserve_id   => $reserve->{reserve_id},
436
                reserved     => 1,
436
                reserved     => 1,
437
            );
437
            );
438
        }
438
        }
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt (-3 / +2 lines)
Lines 260-266 $(document).ready(function () { Link Here
260
                <input type="hidden" name="itemnumber" value="[% itemnumber %]" />
260
                <input type="hidden" name="itemnumber" value="[% itemnumber %]" />
261
                <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
261
                <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
262
                <input type="hidden" name="biblionumber" value="[% itembiblionumber %]" />
262
                <input type="hidden" name="biblionumber" value="[% itembiblionumber %]" />
263
                <input type="hidden" name="resbarcode" value="[% barcode %]" />
263
                <input type="hidden" name="reserve_id" value="[% reserve_id %]" />
264
                <input type="hidden" name="diffBranch" value="[% destbranch %]" />
264
                <input type="hidden" name="diffBranch" value="[% destbranch %]" />
265
                <input type="hidden" name="exemptfine" value="[% exemptfine %]" />
265
                <input type="hidden" name="exemptfine" value="[% exemptfine %]" />
266
                <input type="hidden" name="dropboxmode" value="[% dropboxmode %]" />
266
                <input type="hidden" name="dropboxmode" value="[% dropboxmode %]" />
Lines 422-428 $(document).ready(function () { Link Here
422
            <input type="hidden" name="itemnumber" value="[% itemnumber %]" />
422
            <input type="hidden" name="itemnumber" value="[% itemnumber %]" />
423
            <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
423
            <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
424
            <input type="hidden" name="biblionumber" value="[% itembiblionumber %]" />
424
            <input type="hidden" name="biblionumber" value="[% itembiblionumber %]" />
425
            <input type="hidden" name="resbarcode" value="[% barcode %]" />
425
            <input type="hidden" name="reserve_id" value="[% reserve_id %]" />
426
            <input type="hidden" name="diffBranch" value="[% destbranch %]" />
426
            <input type="hidden" name="diffBranch" value="[% destbranch %]" />
427
            <input type="hidden" name="exemptfine" value="[% exemptfine %]" />
427
            <input type="hidden" name="exemptfine" value="[% exemptfine %]" />
428
            <input type="hidden" name="dropboxmode" value="[% dropboxmode %]" />
428
            <input type="hidden" name="dropboxmode" value="[% dropboxmode %]" />
429
- 

Return to bug 14695