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

(-)a/C4/Reserves.pm (-46 / +41 lines)
Lines 1303-1309 take care of the waiting status Link Here
1303
=cut
1303
=cut
1304
1304
1305
sub ModReserveAffect {
1305
sub ModReserveAffect {
1306
    my ( $itemnumber, $borrowernumber,$transferToDo ) = @_;
1306
    my ( $itemnumber, $borrowernumber, $transferToDo, $reserve_id ) = @_;
1307
    my $dbh = C4::Context->dbh;
1307
    my $dbh = C4::Context->dbh;
1308
1308
1309
    # we want to attach $itemnumber to $borrowernumber, find the biblionumber
1309
    # we want to attach $itemnumber to $borrowernumber, find the biblionumber
Lines 1314-1357 sub ModReserveAffect { Link Here
1314
1314
1315
    # get request - need to find out if item is already
1315
    # get request - need to find out if item is already
1316
    # waiting in order to not send duplicate hold filled notifications
1316
    # waiting in order to not send duplicate hold filled notifications
1317
    my $reserve_id = GetReserveId({
1317
1318
        borrowernumber => $borrowernumber,
1318
    my $hold;
1319
        biblionumber   => $biblionumber,
1319
    # Find hold by id if we have it
1320
    });
1320
    $hold = Koha::Holds->find( $reserve_id ) if $reserve_id;
1321
    return unless defined $reserve_id;
1321
    # Find item level hold for this item if there is one
1322
    my $request = GetReserveInfo($reserve_id);
1322
    $hold ||= Koha::Holds->search( { borrowernumber => $borrowernumber, itemnumber => $itemnumber } )->next();
1323
    my $already_on_shelf = ($request && $request->{found} eq 'W') ? 1 : 0;
1323
    # Find record level hold if there is no item level hold
1324
    $hold ||= Koha::Holds->search( { borrowernumber => $borrowernumber, biblionumber => $biblionumber } )->next();
1325
1326
    return unless $hold;
1327
1328
    $reserve_id = $hold->id();
1329
1330
    my $already_on_shelf = $hold->found && $hold->found eq 'W';
1324
1331
1325
    # If we affect a reserve that has to be transferred, don't set to Waiting
1332
    # If we affect a reserve that has to be transferred, don't set to Waiting
1326
    my $query;
1333
    my $query;
1327
    if ($transferToDo) {
1334
    if ($transferToDo) {
1328
    $query = "
1335
        $hold->set(
1329
        UPDATE reserves
1336
            {
1330
        SET    priority = 0,
1337
                priority   => 0,
1331
               itemnumber = ?,
1338
                itemnumber => $itemnumber,
1332
               found = 'T'
1339
                found      => 'T',
1333
        WHERE borrowernumber = ?
1340
            }
1334
          AND biblionumber = ?
1341
        );
1335
    ";
1336
    }
1342
    }
1337
    else {
1343
    else {
1338
    # affect the reserve to Waiting as well.
1344
        # affect the reserve to Waiting as well.
1339
        $query = "
1345
        $hold->set(
1340
            UPDATE reserves
1346
            {
1341
            SET     priority = 0,
1347
                priority    => 0,
1342
                    found = 'W',
1348
                itemnumber  => $itemnumber,
1343
                    waitingdate = NOW(),
1349
                found       => 'W',
1344
                    itemnumber = ?
1350
                waitingdate => dt_from_string(),
1345
            WHERE borrowernumber = ?
1351
            }
1346
              AND biblionumber = ?
1352
        );
1347
        ";
1348
    }
1353
    }
1349
    $sth = $dbh->prepare($query);
1354
    $hold->store();
1350
    $sth->execute( $itemnumber, $borrowernumber,$biblionumber);
1355
1351
    _koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber ) if ( !$transferToDo && !$already_on_shelf );
1356
    _koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber )
1357
      if ( !$transferToDo && !$already_on_shelf );
1358
1352
    _FixPriority( { biblionumber => $biblionumber } );
1359
    _FixPriority( { biblionumber => $biblionumber } );
1360
1353
    if ( C4::Context->preference("ReturnToShelvingCart") ) {
1361
    if ( C4::Context->preference("ReturnToShelvingCart") ) {
1354
      CartToShelf( $itemnumber );
1362
        CartToShelf($itemnumber);
1355
    }
1363
    }
1356
1364
1357
    return;
1365
    return;
Lines 2296-2321 sub GetReserveId { Link Here
2296
2304
2297
    return unless ( ( $params->{'biblionumber'} || $params->{'itemnumber'} ) && $params->{'borrowernumber'} );
2305
    return unless ( ( $params->{'biblionumber'} || $params->{'itemnumber'} ) && $params->{'borrowernumber'} );
2298
2306
2299
    my $dbh = C4::Context->dbh();
2300
2301
    my $sql = "SELECT reserve_id FROM reserves WHERE ";
2302
2303
    my @params;
2304
    my @limits;
2305
    foreach my $key ( keys %$params ) {
2307
    foreach my $key ( keys %$params ) {
2306
        if ( defined( $params->{$key} ) ) {
2308
        delete $params->{$key} unless defined( $params->{$key} );
2307
            push( @limits, "$key = ?" );
2308
            push( @params, $params->{$key} );
2309
        }
2310
    }
2309
    }
2311
2310
2312
    $sql .= join( " AND ", @limits );
2311
    my $hold = Koha::Holds->search( $params )->next();
2313
2314
    my $sth = $dbh->prepare( $sql );
2315
    $sth->execute( @params );
2316
    my $row = $sth->fetchrow_hashref();
2317
2312
2318
    return $row->{'reserve_id'};
2313
    return $hold->id();
2319
}
2314
}
2320
2315
2321
=head2 ReserveSlip
2316
=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 438-444 if ( $messages->{'ResFound'}) { Link Here
438
            $template->param(
438
            $template->param(
439
                intransit    => ($userenv_branch eq $reserve->{'branchcode'} ? 0 : 1 ),
439
                intransit    => ($userenv_branch eq $reserve->{'branchcode'} ? 0 : 1 ),
440
                transfertodo => ($userenv_branch eq $reserve->{'branchcode'} ? 0 : 1 ),
440
                transfertodo => ($userenv_branch eq $reserve->{'branchcode'} ? 0 : 1 ),
441
                resbarcode   => $barcode,
441
                reserve_id   => $reserve->{reserve_id},
442
                reserved     => 1,
442
                reserved     => 1,
443
            );
443
            );
444
        }
444
        }
(-)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