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

(-)a/C4/Circulation.pm (-16 / +12 lines)
Lines 2990-3003 sub GetRenewCount { Link Here
2990
2990
2991
=head2 GetSoonestRenewDate
2991
=head2 GetSoonestRenewDate
2992
2992
2993
  $NoRenewalBeforeThisDate = &GetSoonestRenewDate($borrowernumber, $itemnumber);
2993
  $NoRenewalBeforeThisDate = &GetSoonestRenewDate( { patron => $patron, item => $item } );
2994
2994
2995
Find out the soonest possible renew date of a borrowed item.
2995
Find out the soonest possible renew date of a borrowed item.
2996
2996
2997
C<$borrowernumber> is the borrower number of the patron who currently
2997
C<$patron> is the patron who currently has the item on loan.
2998
has the item on loan.
2999
2998
3000
C<$itemnumber> is the number of the item to renew.
2999
C<$item> is the item to renew.
3000
3001
C<$issue> is the issue to renew.
3001
3002
3002
C<$GetSoonestRenewDate> returns the DateTime of the soonest possible
3003
C<$GetSoonestRenewDate> returns the DateTime of the soonest possible
3003
renew date, based on the value "No renewal before" of the applicable
3004
renew date, based on the value "No renewal before" of the applicable
Lines 3008-3027 cannot be found. Link Here
3008
=cut
3009
=cut
3009
3010
3010
sub GetSoonestRenewDate {
3011
sub GetSoonestRenewDate {
3011
    my ( $borrowernumber, $itemnumber ) = @_;
3012
    my ( $params ) = @_;
3012
3013
    my $dbh = C4::Context->dbh;
3014
3015
    my $item      = GetItem($itemnumber)      or return;
3016
    my $itemissue = GetItemIssue($itemnumber) or return;
3017
3013
3018
    $borrowernumber ||= $itemissue->{borrowernumber};
3014
    my $patron = $params->{patron} or return;
3019
    my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber )
3015
    my $item   = $params->{item}   or return;
3020
      or return;
3016
    my $issue  = $params->{issue}  or return;
3021
3017
3022
    my $branchcode = _GetCircControlBranch( $item, $borrower );
3018
    my $branchcode = _GetCircControlBranch( $item, $patron );
3023
    my $issuing_rule = Koha::IssuingRules->get_effective_issuing_rule(
3019
    my $issuing_rule = Koha::IssuingRules->get_effective_issuing_rule(
3024
        {   categorycode => $borrower->{categorycode},
3020
        {   categorycode => $patron->{categorycode},
3025
            itemtype     => $item->{itype},
3021
            itemtype     => $item->{itype},
3026
            branchcode   => $branchcode
3022
            branchcode   => $branchcode
3027
        }
3023
        }
Lines 3034-3040 sub GetSoonestRenewDate { Link Here
3034
        and $issuing_rule->norenewalbefore ne "" )
3030
        and $issuing_rule->norenewalbefore ne "" )
3035
    {
3031
    {
3036
        my $soonestrenewal =
3032
        my $soonestrenewal =
3037
          $itemissue->{date_due}->clone()
3033
          $issue->{date_due}->clone()
3038
          ->subtract(
3034
          ->subtract(
3039
            $issuing_rule->lengthunit => $issuing_rule->norenewalbefore );
3035
            $issuing_rule->lengthunit => $issuing_rule->norenewalbefore );
3040
3036
(-)a/circ/renew.pl (-2 / +5 lines)
Lines 80-87 if ($barcode) { Link Here
80
80
81
                if ( $error && ($error eq 'too_soon' or $error eq 'auto_too_soon') ) {
81
                if ( $error && ($error eq 'too_soon' or $error eq 'auto_too_soon') ) {
82
                    $soonest_renew_date = C4::Circulation::GetSoonestRenewDate(
82
                    $soonest_renew_date = C4::Circulation::GetSoonestRenewDate(
83
                        $borrower->borrowernumber(),
83
                        {
84
                        $item->itemnumber(),
84
                            patron   => $borrower->unblessed,
85
                            item     => $item->unblessed,
86
                            issue    => $issue->unblessed,
87
                        }
85
                    );
88
                    );
86
                }
89
                }
87
                if ( $error && ( $error eq 'auto_too_late' ) ) {
90
                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