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

(-)a/C4/Circulation.pm (-16 / +12 lines)
Lines 2968-2981 sub GetRenewCount { Link Here
2968
2968
2969
=head2 GetSoonestRenewDate
2969
=head2 GetSoonestRenewDate
2970
2970
2971
  $NoRenewalBeforeThisDate = &GetSoonestRenewDate($borrowernumber, $itemnumber);
2971
  $NoRenewalBeforeThisDate = &GetSoonestRenewDate( { patron => $patron, item => $item } );
2972
2972
2973
Find out the soonest possible renew date of a borrowed item.
2973
Find out the soonest possible renew date of a borrowed item.
2974
2974
2975
C<$borrowernumber> is the borrower number of the patron who currently
2975
C<$patron> is the patron who currently has the item on loan.
2976
has the item on loan.
2977
2976
2978
C<$itemnumber> is the number of the item to renew.
2977
C<$item> is the item to renew.
2978
2979
C<$issue> is the issue to renew.
2979
2980
2980
C<$GetSoonestRenewDate> returns the DateTime of the soonest possible
2981
C<$GetSoonestRenewDate> returns the DateTime of the soonest possible
2981
renew date, based on the value "No renewal before" of the applicable
2982
renew date, based on the value "No renewal before" of the applicable
Lines 2986-3005 cannot be found. Link Here
2986
=cut
2987
=cut
2987
2988
2988
sub GetSoonestRenewDate {
2989
sub GetSoonestRenewDate {
2989
    my ( $borrowernumber, $itemnumber ) = @_;
2990
    my ( $params ) = @_;
2990
2991
    my $dbh = C4::Context->dbh;
2992
2993
    my $item      = GetItem($itemnumber)      or return;
2994
    my $itemissue = GetItemIssue($itemnumber) or return;
2995
2991
2996
    $borrowernumber ||= $itemissue->{borrowernumber};
2992
    my $patron = $params->{patron} or return;
2997
    my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber )
2993
    my $item   = $params->{item}   or return;
2998
      or return;
2994
    my $issue  = $params->{issue}  or return;
2999
2995
3000
    my $branchcode = _GetCircControlBranch( $item, $borrower );
2996
    my $branchcode = _GetCircControlBranch( $item, $patron );
3001
    my $issuing_rule = Koha::IssuingRules->get_effective_issuing_rule(
2997
    my $issuing_rule = Koha::IssuingRules->get_effective_issuing_rule(
3002
        {   categorycode => $borrower->{categorycode},
2998
        {   categorycode => $patron->{categorycode},
3003
            itemtype     => $item->{itype},
2999
            itemtype     => $item->{itype},
3004
            branchcode   => $branchcode
3000
            branchcode   => $branchcode
3005
        }
3001
        }
Lines 3012-3018 sub GetSoonestRenewDate { Link Here
3012
        and $issuing_rule->norenewalbefore ne "" )
3008
        and $issuing_rule->norenewalbefore ne "" )
3013
    {
3009
    {
3014
        my $soonestrenewal =
3010
        my $soonestrenewal =
3015
          $itemissue->{date_due}->clone()
3011
          $issue->{date_due}->clone()
3016
          ->subtract(
3012
          ->subtract(
3017
            $issuing_rule->lengthunit => $issuing_rule->norenewalbefore );
3013
            $issuing_rule->lengthunit => $issuing_rule->norenewalbefore );
3018
3014
(-)a/circ/renew.pl (-2 / +5 lines)
Lines 78-85 if ($barcode) { Link Here
78
78
79
                if ( $error && ($error eq 'too_soon' or $error eq 'auto_too_soon') ) {
79
                if ( $error && ($error eq 'too_soon' or $error eq 'auto_too_soon') ) {
80
                    $soonest_renew_date = C4::Circulation::GetSoonestRenewDate(
80
                    $soonest_renew_date = C4::Circulation::GetSoonestRenewDate(
81
                        $borrower->borrowernumber(),
81
                        {
82
                        $item->itemnumber(),
82
                            patron   => $borrower->unblessed,
83
                            item     => $item->unblessed,
84
                            issue    => $issue->unblessed,
85
                        }
83
                    );
86
                    );
84
                }
87
                }
85
                if ( $error && ( $error eq 'auto_too_late' ) ) {
88
                if ( $error && ( $error eq 'auto_too_late' ) ) {
(-)a/t/db_dependent/Circulation.t (-4 / +5 lines)
Lines 520-528 C4::Context->dbh->do("DELETE FROM accountlines"); Link Here
520
520
521
    # Bug 14395
521
    # Bug 14395
522
    # Test 'exact time' setting for syspref NoRenewalBeforePrecision
522
    # Test 'exact time' setting for syspref NoRenewalBeforePrecision
523
    my $item = C4::Items::GetItem( $itemnumber );
524
    my $itemissue = C4::Circulation::GetItemIssue($itemnumber);
523
    t::lib::Mocks::mock_preference( 'NoRenewalBeforePrecision', 'exact_time' );
525
    t::lib::Mocks::mock_preference( 'NoRenewalBeforePrecision', 'exact_time' );
524
    is(
526
    is(
525
        GetSoonestRenewDate( $renewing_borrowernumber, $itemnumber ),
527
        GetSoonestRenewDate( { patron => $renewing_borrower, item => $item, issue => $itemissue, } ),
526
        $datedue->clone->add( days => -7 ),
528
        $datedue->clone->add( days => -7 ),
527
        'Bug 14395: Renewals permitted 7 days before due date, as expected'
529
        'Bug 14395: Renewals permitted 7 days before due date, as expected'
528
    );
530
    );
Lines 531-537 C4::Context->dbh->do("DELETE FROM accountlines"); Link Here
531
    # Test 'date' setting for syspref NoRenewalBeforePrecision
533
    # Test 'date' setting for syspref NoRenewalBeforePrecision
532
    t::lib::Mocks::mock_preference( 'NoRenewalBeforePrecision', 'date' );
534
    t::lib::Mocks::mock_preference( 'NoRenewalBeforePrecision', 'date' );
533
    is(
535
    is(
534
        GetSoonestRenewDate( $renewing_borrowernumber, $itemnumber ),
536
        GetSoonestRenewDate( { patron => $renewing_borrower, item => $item, issue => $itemissue, } ),
535
        $datedue->clone->add( days => -7 )->truncate( to => 'day' ),
537
        $datedue->clone->add( days => -7 )->truncate( to => 'day' ),
536
        'Bug 14395: Renewals permitted 7 days before due date, as expected'
538
        'Bug 14395: Renewals permitted 7 days before due date, as expected'
537
    );
539
    );
Lines 699-705 C4::Context->dbh->do("DELETE FROM accountlines"); Link Here
699
701
700
    LostItem( $itemnumber, 1 );
702
    LostItem( $itemnumber, 1 );
701
703
702
    my $item = Koha::Database->new()->schema()->resultset('Item')->find($itemnumber);
704
    $item = Koha::Database->new()->schema()->resultset('Item')->find($itemnumber);
703
    ok( !$item->onloan(), "Lost item marked as returned has false onloan value" );
705
    ok( !$item->onloan(), "Lost item marked as returned has false onloan value" );
704
706
705
    my $total_due = $dbh->selectrow_array(
707
    my $total_due = $dbh->selectrow_array(
706
- 

Return to bug 16413