@@ -, +, @@ --- C4/Circulation.pm | 28 ++++++++++++---------------- circ/renew.pl | 7 +++++-- t/db_dependent/Circulation.t | 8 +++++--- 3 files changed, 22 insertions(+), 21 deletions(-) --- a/C4/Circulation.pm +++ a/C4/Circulation.pm @@ -2968,14 +2968,15 @@ sub GetRenewCount { =head2 GetSoonestRenewDate - $NoRenewalBeforeThisDate = &GetSoonestRenewDate($borrowernumber, $itemnumber); + $NoRenewalBeforeThisDate = &GetSoonestRenewDate( { patron => $patron, item => $item } ); Find out the soonest possible renew date of a borrowed item. -C<$borrowernumber> is the borrower number of the patron who currently -has the item on loan. +C<$patron> is the patron who currently has the item on loan. -C<$itemnumber> is the number of the item to renew. +C<$item> is the item to renew. + +C<$issue> is the issue to renew. C<$GetSoonestRenewDate> returns the DateTime of the soonest possible renew date, based on the value "No renewal before" of the applicable @@ -2986,20 +2987,15 @@ cannot be found. =cut sub GetSoonestRenewDate { - my ( $borrowernumber, $itemnumber ) = @_; - - my $dbh = C4::Context->dbh; - - my $item = GetItem($itemnumber) or return; - my $itemissue = GetItemIssue($itemnumber) or return; + my ( $params ) = @_; - $borrowernumber ||= $itemissue->{borrowernumber}; - my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ) - or return; + my $patron = $params->{patron} or return; + my $item = $params->{item} or return; + my $issue = $params->{issue} or return; - my $branchcode = _GetCircControlBranch( $item, $borrower ); + my $branchcode = _GetCircControlBranch( $item, $patron ); my $issuing_rule = Koha::IssuingRules->get_effective_issuing_rule( - { categorycode => $borrower->{categorycode}, + { categorycode => $patron->{categorycode}, itemtype => $item->{itype}, branchcode => $branchcode } @@ -3012,7 +3008,7 @@ sub GetSoonestRenewDate { and $issuing_rule->norenewalbefore ne "" ) { my $soonestrenewal = - $itemissue->{date_due}->clone() + $issue->{date_due}->clone() ->subtract( $issuing_rule->lengthunit => $issuing_rule->norenewalbefore ); --- a/circ/renew.pl +++ a/circ/renew.pl @@ -78,8 +78,11 @@ if ($barcode) { if ( $error && ($error eq 'too_soon' or $error eq 'auto_too_soon') ) { $soonest_renew_date = C4::Circulation::GetSoonestRenewDate( - $borrower->borrowernumber(), - $item->itemnumber(), + { + patron => $borrower->unblessed, + item => $item->unblessed, + issue => $issue->unblessed, + } ); } if ( $error && ( $error eq 'auto_too_late' ) ) { --- a/t/db_dependent/Circulation.t +++ a/t/db_dependent/Circulation.t @@ -520,9 +520,11 @@ C4::Context->dbh->do("DELETE FROM accountlines"); # Bug 14395 # Test 'exact time' setting for syspref NoRenewalBeforePrecision + my $item = C4::Items::GetItem( $itemnumber ); + my $itemissue = C4::Circulation::GetItemIssue($itemnumber); t::lib::Mocks::mock_preference( 'NoRenewalBeforePrecision', 'exact_time' ); is( - GetSoonestRenewDate( $renewing_borrowernumber, $itemnumber ), + GetSoonestRenewDate( { patron => $renewing_borrower, item => $item, issue => $itemissue, } ), $datedue->clone->add( days => -7 ), 'Bug 14395: Renewals permitted 7 days before due date, as expected' ); @@ -531,7 +533,7 @@ C4::Context->dbh->do("DELETE FROM accountlines"); # Test 'date' setting for syspref NoRenewalBeforePrecision t::lib::Mocks::mock_preference( 'NoRenewalBeforePrecision', 'date' ); is( - GetSoonestRenewDate( $renewing_borrowernumber, $itemnumber ), + GetSoonestRenewDate( { patron => $renewing_borrower, item => $item, issue => $itemissue, } ), $datedue->clone->add( days => -7 )->truncate( to => 'day' ), 'Bug 14395: Renewals permitted 7 days before due date, as expected' ); @@ -699,7 +701,7 @@ C4::Context->dbh->do("DELETE FROM accountlines"); LostItem( $itemnumber, 1 ); - my $item = Koha::Database->new()->schema()->resultset('Item')->find($itemnumber); + $item = Koha::Database->new()->schema()->resultset('Item')->find($itemnumber); ok( !$item->onloan(), "Lost item marked as returned has false onloan value" ); my $total_due = $dbh->selectrow_array( --