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

(-)a/C4/Circulation.pm (-33 / +34 lines)
Lines 1176-1182 AddIssue does the following things : Link Here
1176
=cut
1176
=cut
1177
1177
1178
sub AddIssue {
1178
sub AddIssue {
1179
    my ( $borrower, $barcode, $datedue, $cancelreserve, $issuedate, $sipmode) = @_;
1179
    my ( $borrower, $barcode, $datedue, $cancelreserve, $issuedate, $sipmode, $auto_renew ) = @_;
1180
    my $dbh = C4::Context->dbh;
1180
    my $dbh = C4::Context->dbh;
1181
	my $barcodecheck=CheckValidBarcode($barcode);
1181
	my $barcodecheck=CheckValidBarcode($barcode);
1182
    if ($datedue && ref $datedue ne 'DateTime') {
1182
    if ($datedue && ref $datedue ne 'DateTime') {
Lines 1242-1253 sub AddIssue { Link Here
1242
                $sth->execute(C4::Context->userenv->{'branch'},$item->{'itemnumber'});
1242
                $sth->execute(C4::Context->userenv->{'branch'},$item->{'itemnumber'});
1243
            }
1243
            }
1244
1244
1245
        # If automatic renewal wasn't selected while issuing, set the value according to the issuing rule.
1246
        unless ($auto_renew) {
1247
            my $issuingrule = GetIssuingRule($borrower->{categorycode}, $item->{itype}, $branch);
1248
            $auto_renew = $issuingrule->{auto_renew};
1249
        }
1250
1245
        # Record in the database the fact that the book was issued.
1251
        # Record in the database the fact that the book was issued.
1246
        my $sth =
1252
        my $sth =
1247
          $dbh->prepare(
1253
          $dbh->prepare(
1248
                "INSERT INTO issues
1254
                "INSERT INTO issues
1249
                    (borrowernumber, itemnumber,issuedate, date_due, branchcode)
1255
                    (borrowernumber, itemnumber,issuedate, date_due, branchcode, auto_renew)
1250
                VALUES (?,?,?,?,?)"
1256
                VALUES (?,?,?,?,?,?)"
1251
          );
1257
          );
1252
        unless ($datedue) {
1258
        unless ($datedue) {
1253
            my $itype = ( C4::Context->preference('item-level_itypes') ) ? $biblio->{'itype'} : $biblio->{'itemtype'};
1259
            my $itype = ( C4::Context->preference('item-level_itypes') ) ? $biblio->{'itype'} : $biblio->{'itemtype'};
Lines 1260-1266 sub AddIssue { Link Here
1260
            $item->{'itemnumber'},              # itemnumber
1266
            $item->{'itemnumber'},              # itemnumber
1261
            $issuedate->strftime('%Y-%m-%d %H:%M:00'), # issuedate
1267
            $issuedate->strftime('%Y-%m-%d %H:%M:00'), # issuedate
1262
            $datedue->strftime('%Y-%m-%d %H:%M:00'),   # date_due
1268
            $datedue->strftime('%Y-%m-%d %H:%M:00'),   # date_due
1263
            C4::Context->userenv->{'branch'}    # branchcode
1269
            C4::Context->userenv->{'branch'},   # branchcode
1270
            $auto_renew ? 1 : 0                 # automatic renewal
1264
        );
1271
        );
1265
        if ( C4::Context->preference('ReturnToShelvingCart') ) { ## ReturnToShelvingCart is on, anything issued should be taken off the cart.
1272
        if ( C4::Context->preference('ReturnToShelvingCart') ) { ## ReturnToShelvingCart is on, anything issued should be taken off the cart.
1266
          CartToShelf( $item->{'itemnumber'} );
1273
          CartToShelf( $item->{'itemnumber'} );
Lines 2553-2559 C<$itemnumber> is the number of the item to renew. Link Here
2553
2560
2554
C<$override_limit>, if supplied with a true value, causes
2561
C<$override_limit>, if supplied with a true value, causes
2555
the limit on the number of times that the loan can be renewed
2562
the limit on the number of times that the loan can be renewed
2556
(as controlled by the item type) to be ignored.
2563
(as controlled by the item type) to be ignored. Overriding also allows
2564
to renew sooner than "No renewal before" und to manually renew loans
2565
that are automatically renewed.
2557
2566
2558
C<$CanBookBeRenewed> returns a true value if the item may be renewed. The
2567
C<$CanBookBeRenewed> returns a true value if the item may be renewed. The
2559
item must currently be on loan to the specified borrower; renewals
2568
item must currently be on loan to the specified borrower; renewals
Lines 2565-2574 already renewed the loan. $error will contain the reason the renewal can not pro Link Here
2565
sub CanBookBeRenewed {
2574
sub CanBookBeRenewed {
2566
    my ( $borrowernumber, $itemnumber, $override_limit ) = @_;
2575
    my ( $borrowernumber, $itemnumber, $override_limit ) = @_;
2567
2576
2568
    my $dbh       = C4::Context->dbh;
2577
    my $dbh    = C4::Context->dbh;
2569
    my $renews    = 1;
2578
    my $renews = 1;
2570
    my $renewokay = 1;
2571
    my $error;
2572
2579
2573
    my $item      = GetItem($itemnumber)      or return ( 0, 'no_item' );
2580
    my $item      = GetItem($itemnumber)      or return ( 0, 'no_item' );
2574
    my $itemissue = GetItemIssue($itemnumber) or return ( 0, 'no_checkout' );
2581
    my $itemissue = GetItemIssue($itemnumber) or return ( 0, 'no_checkout' );
Lines 2577-2618 sub CanBookBeRenewed { Link Here
2577
    my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber )
2584
    my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber )
2578
      or return;
2585
      or return;
2579
2586
2580
    my $branchcode  = _GetCircControlBranch($item, $borrower);
2587
    my ( $resfound, $resrec, undef ) = C4::Reserves::CheckReserves($itemnumber);
2581
2588
2582
    my $issuingrule = GetIssuingRule($borrower->{categorycode}, $item->{itype}, $branchcode);
2589
    return ( 0, "on_reserve" ) if $resfound;    # '' when no hold was found
2590
2591
    return ( 1, undef ) if $override_limit;
2592
2593
    my $branchcode = _GetCircControlBranch( $item, $borrower );
2594
    my $issuingrule =
2595
      GetIssuingRule( $borrower->{categorycode}, $item->{itype}, $branchcode );
2596
2597
    return ( 0, "too_many" )
2598
      if $issuingrule->{renewalsallowed} <= $itemissue->{renewals};
2583
2599
2584
    if ( $issuingrule->{norenewalbefore} ) {
2600
    if ( $issuingrule->{norenewalbefore} ) {
2585
2601
2586
        # Get current time and add norenewalbefore. If this is smaller than date_due, it's too soon for renewal.
2602
        # Get current time and add norenewalbefore.
2603
        # If this is smaller than date_due, it's too soon for renewal.
2587
        if (
2604
        if (
2588
            DateTime->now( time_zone => C4::Context->tz() )->add(
2605
            DateTime->now( time_zone => C4::Context->tz() )->add(
2589
                $issuingrule->{lengthunit} => $issuingrule->{norenewalbefore}
2606
                $issuingrule->{lengthunit} => $issuingrule->{norenewalbefore}
2590
            ) < $itemissue->{date_due}
2607
            ) < $itemissue->{date_due}
2591
        )
2608
          )
2592
        {
2609
        {
2593
            $renewokay = 0;
2610
            return ( 0, "auto_too_soon" ) if $itemissue->{auto_renew};
2594
            $error     = "too_soon";
2611
            return ( 0, "too_soon" );
2595
        }
2612
        }
2596
    }
2613
    }
2597
2614
2598
    if ( $issuingrule->{renewalsallowed} <= $itemissue->{renewals} ) {
2615
    return ( 0, "auto_renew" ) if $itemissue->{auto_renew};
2599
        $renewokay = 0;
2616
    return ( 1, undef );
2600
        $error = "too_many";
2601
    }
2602
2603
    if ( $override_limit ) {
2604
        $renewokay = 1;
2605
        $error     = undef;
2606
    }
2607
2608
    my ( $resfound, $resrec, undef ) = C4::Reserves::CheckReserves( $itemnumber );
2609
2610
    if ( $resfound ) { # '' when no hold was found
2611
        $renewokay = 0;
2612
        $error = "on_reserve";
2613
    }
2614
2615
    return ( $renewokay, $error );
2616
}
2617
}
2617
2618
2618
=head2 AddRenewal
2619
=head2 AddRenewal
(-)a/circ/circulation.pl (-1 / +6 lines)
Lines 145-150 if ( $barcode ) { Link Here
145
        $stickyduedate  = $query->param('stickyduedate');
145
        $stickyduedate  = $query->param('stickyduedate');
146
        $duedatespec    = $query->param('duedatespec');
146
        $duedatespec    = $query->param('duedatespec');
147
    }
147
    }
148
    $session->param('auto_renew', $query->param('auto_renew'));
149
}
150
else {
151
    $session->clear('auto_renew');
148
}
152
}
149
153
150
my ($datedue,$invalidduedate);
154
my ($datedue,$invalidduedate);
Lines 355-361 if ($barcode) { Link Here
355
            }
359
            }
356
        }
360
        }
357
        unless($confirm_required) {
361
        unless($confirm_required) {
358
            AddIssue( $borrower, $barcode, $datedue, $cancelreserve );
362
            AddIssue( $borrower, $barcode, $datedue, $cancelreserve, undef, undef, $session->param('auto_renew') );
363
            $session->clear('auto_renew');
359
            $inprocess = 1;
364
            $inprocess = 1;
360
        }
365
        }
361
    }
366
    }
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt (-2 / +17 lines)
Lines 528-533 No patron matched <span class="ex">[% message %]</span> Link Here
528
    [% END %]
528
    [% END %]
529
    <input type="submit" value="Check Out" />
529
    <input type="submit" value="Check Out" />
530
530
531
    <div class="date-select">
532
        [% IF NEEDSCONFIRMATION %]
533
            <input type="checkbox" name="auto_renew" id="auto_renew" value="auto_renew" disabled="disabled" />
534
        [% ELSE %]
535
            <input type="checkbox" name="auto_renew" id="auto_renew" value="auto_renew" />
536
        [% END %]
537
        <label for="auto_renew">Automatic renewal</label>
538
    </div>
539
531
    [% IF ( SpecifyDueDate ) %]<div class="date-select">
540
    [% IF ( SpecifyDueDate ) %]<div class="date-select">
532
        <div class="hint">Specify due date [% INCLUDE 'date-format.inc' %]: </div>
541
        <div class="hint">Specify due date [% INCLUDE 'date-format.inc' %]: </div>
533
        [% IF ( duedatespec ) %]<input type="text" size="13" id="duedatespec" name="duedatespec" value="[% duedatespec %]" readonly="readonly" />[% ELSE %]<input type="text" size="13" id="duedatespec" name="duedatespec" value="" readonly="readonly" />
542
        [% IF ( duedatespec ) %]<input type="text" size="13" id="duedatespec" name="duedatespec" value="[% duedatespec %]" readonly="readonly" />[% ELSE %]<input type="text" size="13" id="duedatespec" name="duedatespec" value="" readonly="readonly" />
Lines 789-795 No patron matched <span class="ex">[% message %]</span> Link Here
789
                    <input type="checkbox" class="radio" name="items[]" value="[% todayissue.itemnumber %]" />
798
                    <input type="checkbox" class="radio" name="items[]" value="[% todayissue.itemnumber %]" />
790
                [% END %]
799
                [% END %]
791
                </span>
800
                </span>
792
                [% IF todayissue.renewsallowed && todayissue.renewsleft && !todayissue.renew_error_too_soon %]
801
                [% IF todayissue.renewsallowed && todayissue.renewsleft && !todayissue.renew_error_too_soon && !todayissue.renew_error_auto_renew && !todayissue.renew_error_auto_too_soon %]
793
                    <span class="renewals">([% todayissue.renewsleft %] of [% todayissue.renewsallowed %] renewals remaining)</span>
802
                    <span class="renewals">([% todayissue.renewsleft %] of [% todayissue.renewsallowed %] renewals remaining)</span>
794
                [% END %]
803
                [% END %]
795
                <span class="renewals-disabled">
804
                <span class="renewals-disabled">
Lines 798-803 No patron matched <span class="ex">[% message %]</span> Link Here
798
                <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% todayissue.biblionumber %]">On hold</a>
807
                <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% todayissue.biblionumber %]">On hold</a>
799
            [% ELSIF ( todayissue.renew_error_too_many ) %]
808
            [% ELSIF ( todayissue.renew_error_too_many ) %]
800
                Not renewable
809
                Not renewable
810
            [% ELSIF ( todayissue.renew_error_auto_renew || todayissue.renew_error_auto_too_soon ) %]
811
                Automatic renewal
812
                <span class="renewals">([% todayissue.renewsleft %] of [% todayissue.renewsallowed %] renewals remaining)</span>
801
            [% ELSIF ( todayissue.renew_error_too_soon ) %]
813
            [% ELSIF ( todayissue.renew_error_too_soon ) %]
802
                No renewal before [% todayissue.soonestrenewdate %]
814
                No renewal before [% todayissue.soonestrenewdate %]
803
                <span class="renewals">([% todayissue.renewsleft %] of [% todayissue.renewsallowed %] renewals remaining)</span>
815
                <span class="renewals">([% todayissue.renewsleft %] of [% todayissue.renewsallowed %] renewals remaining)</span>
Lines 886-892 No patron matched <span class="ex">[% message %]</span> Link Here
886
                    <input type="checkbox" class="radio" name="items[]" value="[% previssue.itemnumber %]" />
898
                    <input type="checkbox" class="radio" name="items[]" value="[% previssue.itemnumber %]" />
887
                [% END %]
899
                [% END %]
888
                </span>
900
                </span>
889
                [% IF previssue.renewsallowed && previssue.renewsleft && !previssue.renew_error_too_soon %]
901
                [% IF previssue.renewsallowed && previssue.renewsleft && !previssue.renew_error_too_soon && !previssue.renew_error_auto_renew && !previssue.renew_error_auto_too_soon %]
890
                    <span class="renewals">([% previssue.renewsleft %] of [% previssue.renewsallowed %] renewals remaining)</span>
902
                    <span class="renewals">([% previssue.renewsleft %] of [% previssue.renewsallowed %] renewals remaining)</span>
891
                [% END %]
903
                [% END %]
892
                <span class="renewals-disabled">
904
                <span class="renewals-disabled">
Lines 895-900 No patron matched <span class="ex">[% message %]</span> Link Here
895
                <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% previssue.biblionumber %]">On Hold</a>
907
                <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% previssue.biblionumber %]">On Hold</a>
896
            [% ELSIF ( previssue.renew_error_too_many ) %]
908
            [% ELSIF ( previssue.renew_error_too_many ) %]
897
                Not renewable
909
                Not renewable
910
            [% ELSIF ( previssue.renew_error_auto_renew || previssue.renew_error_auto_too_soon ) %]
911
                Automatic renewal
912
                <span class="renewals">([% previssue.renewsleft %] of [% previssue.renewsallowed %] renewals remaining)</span>
898
            [% ELSIF ( previssue.renew_error_too_soon ) %]
913
            [% ELSIF ( previssue.renew_error_too_soon ) %]
899
                No renewal before [% previssue.soonestrenewdate %]
914
                No renewal before [% previssue.soonestrenewdate %]
900
                <span class="renewals">([% previssue.renewsleft %] of [% previssue.renewsallowed %] renewals remaining)</span>
915
                <span class="renewals">([% previssue.renewsleft %] of [% previssue.renewsallowed %] renewals remaining)</span>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt (-2 / +4 lines)
Lines 497-503 function validate1(date) { Link Here
497
                        <input type="checkbox" name="items[]" value="[% issueloo.itemnumber %]" />
497
                        <input type="checkbox" name="items[]" value="[% issueloo.itemnumber %]" />
498
                    [% END %]
498
                    [% END %]
499
                    </span>
499
                    </span>
500
                    [% IF issueloo.renewsallowed && issueloo.renewsleft && !issueloo.norenew_reason_too_soon %]
500
                    [% IF issueloo.renewsallowed && issueloo.renewsleft && !issueloo.norenew_reason_too_soon && !issueloo.norenew_reason_auto_renew && !issueloo.norenew_reason_auto_too_soon %]
501
                        <span class="renewals">([% issueloo.renewsleft %] of [% issueloo.renewsallowed %] renewals remaining)</span>
501
                        <span class="renewals">([% issueloo.renewsleft %] of [% issueloo.renewsallowed %] renewals remaining)</span>
502
                    [% END %]
502
                    [% END %]
503
                    <span class="renewals-disabled">
503
                    <span class="renewals-disabled">
Lines 506-511 function validate1(date) { Link Here
506
                    <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% issueloo.biblionumber %]">On Hold</a>
506
                    <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% issueloo.biblionumber %]">On Hold</a>
507
                [% ELSIF ( issueloo.norenew_reason_too_many ) %]
507
                [% ELSIF ( issueloo.norenew_reason_too_many ) %]
508
                    Not renewable
508
                    Not renewable
509
                [% ELSIF ( issueloo.norenew_reason_auto_renew || issueloo.norenew_reason_auto_too_soon ) %]
510
                    Automatic renewal
511
                    <span class="renewals">([% issueloo.renewsleft %] of [% issueloo.renewsallowed %] renewals remaining)</span>
509
                [% ELSIF ( issueloo.norenew_reason_too_soon ) %]
512
                [% ELSIF ( issueloo.norenew_reason_too_soon ) %]
510
                    No renewal before [% issueloo.soonestrenewdate %]
513
                    No renewal before [% issueloo.soonestrenewdate %]
511
                    <span class="renewals">([% issueloo.renewsleft %] of [% issueloo.renewsallowed %] renewals remaining)</span>
514
                    <span class="renewals">([% issueloo.renewsleft %] of [% issueloo.renewsallowed %] renewals remaining)</span>
512
- 

Return to bug 11577