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

(-)a/C4/Circulation.pm (-16 / +12 lines)
Lines 3028-3041 sub GetSoonestRenewDate { Link Here
3028
3028
3029
=head2 GetLatestAutoRenewDate
3029
=head2 GetLatestAutoRenewDate
3030
3030
3031
  $NoAutoRenewalAfterThisDate = &GetLatestAutoRenewDate($borrowernumber, $itemnumber);
3031
  $NoAutoRenewalAfterThisDate = &GetLatestAutoRenewDate({ patron => $patron, issue => $issue, item => $item });
3032
3032
3033
Find out the latest possible auto renew date of a borrowed item.
3033
Find out the latest possible auto renew date of a borrowed item.
3034
3034
3035
C<$borrowernumber> is the borrower number of the patron who currently
3035
C<$borrower> is the patron who currencly has the item on loan.
3036
has the item on loan.
3037
3036
3038
C<$itemnumber> is the number of the item to renew.
3037
C<$item> is the item to renew.
3038
3039
C<$issue> is the issue to renew.
3039
3040
3040
C<$GetLatestAutoRenewDate> returns the DateTime of the latest possible
3041
C<$GetLatestAutoRenewDate> returns the DateTime of the latest possible
3041
auto renew date, based on the value "No auto renewal after" and the "No auto
3042
auto renew date, based on the value "No auto renewal after" and the "No auto
Lines 3046-3065 or item cannot be found. Link Here
3046
=cut
3047
=cut
3047
3048
3048
sub GetLatestAutoRenewDate {
3049
sub GetLatestAutoRenewDate {
3049
    my ( $borrowernumber, $itemnumber ) = @_;
3050
    my ( $params ) = @_;
3050
3051
3051
    my $dbh = C4::Context->dbh;
3052
    my $patron   = $params->{patron} or return;
3053
    my $item     = $params->{item}     or return;
3054
    my $issue    = $params->{issue}    or return;
3052
3055
3053
    my $item      = GetItem($itemnumber)      or return;
3056
    my $branchcode = _GetCircControlBranch( $item, $patron );
3054
    my $itemissue = GetItemIssue($itemnumber) or return;
3055
3056
    $borrowernumber ||= $itemissue->{borrowernumber};
3057
    my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber )
3058
      or return;
3059
3060
    my $branchcode = _GetCircControlBranch( $item, $borrower );
3061
    my $issuing_rule = Koha::IssuingRules->get_effective_issuing_rule(
3057
    my $issuing_rule = Koha::IssuingRules->get_effective_issuing_rule(
3062
        {   categorycode => $borrower->{categorycode},
3058
        {   categorycode => $patron->{categorycode},
3063
            itemtype     => $item->{itype},
3059
            itemtype     => $item->{itype},
3064
            branchcode   => $branchcode
3060
            branchcode   => $branchcode
3065
        }
3061
        }
Lines 3072-3078 sub GetLatestAutoRenewDate { Link Here
3072
3068
3073
    my $maximum_renewal_date;
3069
    my $maximum_renewal_date;
3074
    if ( $issuing_rule->no_auto_renewal_after ) {
3070
    if ( $issuing_rule->no_auto_renewal_after ) {
3075
        $maximum_renewal_date = dt_from_string($itemissue->{issuedate});
3071
        $maximum_renewal_date = dt_from_string($issue->{issuedate});
3076
        $maximum_renewal_date->add(
3072
        $maximum_renewal_date->add(
3077
            $issuing_rule->lengthunit => $issuing_rule->no_auto_renewal_after
3073
            $issuing_rule->lengthunit => $issuing_rule->no_auto_renewal_after
3078
        );
3074
        );
(-)a/circ/renew.pl (-2 / +5 lines)
Lines 84-91 if ($barcode) { Link Here
84
                }
84
                }
85
                if ( $error && ( $error eq 'auto_too_late' ) ) {
85
                if ( $error && ( $error eq 'auto_too_late' ) ) {
86
                    $latest_auto_renew_date = C4::Circulation::GetLatestAutoRenewDate(
86
                    $latest_auto_renew_date = C4::Circulation::GetLatestAutoRenewDate(
87
                        $borrower->borrowernumber(),
87
                        {
88
                        $item->itemnumber(),
88
                            patron   => $borrower->unblessed,
89
                            item     => $item->unblessed,
90
                            issue    => $issue->unblessed,
91
                        }
89
                    );
92
                    );
90
                }
93
                }
91
                if ($can_renew) {
94
                if ($can_renew) {
(-)a/t/db_dependent/Circulation.t (-7 / +7 lines)
Lines 638-670 C4::Context->dbh->do("DELETE FROM accountlines"); Link Here
638
638
639
        my $ten_days_before = dt_from_string->add( days => -10 );
639
        my $ten_days_before = dt_from_string->add( days => -10 );
640
        my $ten_days_ahead  = dt_from_string->add( days => 10 );
640
        my $ten_days_ahead  = dt_from_string->add( days => 10 );
641
        AddIssue( $renewing_borrower, $item_to_auto_renew->{barcode}, $ten_days_ahead, undef, $ten_days_before, undef, { auto_renew => 1 } );
641
        my $issue = AddIssue( $renewing_borrower, $item_to_auto_renew->{barcode}, $ten_days_ahead, undef, $ten_days_before, undef, { auto_renew => 1 } );
642
        $issue->result_class('DBIx::Class::ResultClass::HashRefInflator');
642
        $dbh->do('UPDATE issuingrules SET norenewalbefore = 7, no_auto_renewal_after = "", no_auto_renewal_after_hard_limit = NULL');
643
        $dbh->do('UPDATE issuingrules SET norenewalbefore = 7, no_auto_renewal_after = "", no_auto_renewal_after_hard_limit = NULL');
643
        my $latest_auto_renew_date = GetLatestAutoRenewDate( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
644
        my $latest_auto_renew_date = GetLatestAutoRenewDate( { patron => $renewing_borrower, item => $item_to_auto_renew, issue => { issuedate => $issue->issuedate }, } );
644
        is( $latest_auto_renew_date, undef, 'GetLatestAutoRenewDate should return undef if no_auto_renewal_after or no_auto_renewal_after_hard_limit are not defined' );
645
        is( $latest_auto_renew_date, undef, 'GetLatestAutoRenewDate should return undef if no_auto_renewal_after or no_auto_renewal_after_hard_limit are not defined' );
645
        my $five_days_before = dt_from_string->add( days => -5 );
646
        my $five_days_before = dt_from_string->add( days => -5 );
646
        $dbh->do('UPDATE issuingrules SET norenewalbefore = 10, no_auto_renewal_after = 5, no_auto_renewal_after_hard_limit = NULL');
647
        $dbh->do('UPDATE issuingrules SET norenewalbefore = 10, no_auto_renewal_after = 5, no_auto_renewal_after_hard_limit = NULL');
647
        $latest_auto_renew_date = GetLatestAutoRenewDate( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
648
        $latest_auto_renew_date = GetLatestAutoRenewDate( { patron => $renewing_borrower, item => $item_to_auto_renew, issue => { issuedate => $issue->issuedate }, } );
648
        is( $latest_auto_renew_date->truncate( to => 'minute' ),
649
        is( $latest_auto_renew_date->truncate( to => 'minute' ),
649
            $five_days_before->truncate( to => 'minute' ),
650
            $five_days_before->truncate( to => 'minute' ),
650
            'GetLatestAutoRenewDate should return -5 days if no_auto_renewal_after = 5 and date_due is 10 days before'
651
            'GetLatestAutoRenewDate should return -5 days if no_auto_renewal_after = 5 and date_due is 10 days before'
651
        );
652
        );
652
        my $five_days_ahead = dt_from_string->add( days => 5 );
653
        my $five_days_ahead = dt_from_string->add( days => 5 );
653
        $dbh->do('UPDATE issuingrules SET norenewalbefore = 10, no_auto_renewal_after = 15, no_auto_renewal_after_hard_limit = NULL');
654
        $dbh->do('UPDATE issuingrules SET norenewalbefore = 10, no_auto_renewal_after = 15, no_auto_renewal_after_hard_limit = NULL');
654
        $latest_auto_renew_date = GetLatestAutoRenewDate( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
655
        $latest_auto_renew_date = GetLatestAutoRenewDate( { patron => $renewing_borrower, item => $item_to_auto_renew, issue => { issuedate => $issue->issuedate }, } );
655
        is( $latest_auto_renew_date->truncate( to => 'minute' ),
656
        is( $latest_auto_renew_date->truncate( to => 'minute' ),
656
            $five_days_ahead->truncate( to => 'minute' ),
657
            $five_days_ahead->truncate( to => 'minute' ),
657
            'GetLatestAutoRenewDate should return +5 days if no_auto_renewal_after = 15 and date_due is 10 days before'
658
            'GetLatestAutoRenewDate should return +5 days if no_auto_renewal_after = 15 and date_due is 10 days before'
658
        );
659
        );
659
        my $two_days_ahead = dt_from_string->add( days => 2 );
660
        my $two_days_ahead = dt_from_string->add( days => 2 );
660
        $dbh->do('UPDATE issuingrules SET norenewalbefore = 10, no_auto_renewal_after = "", no_auto_renewal_after_hard_limit = ?', undef, dt_from_string->add( days => 2 ) );
661
        $dbh->do('UPDATE issuingrules SET norenewalbefore = 10, no_auto_renewal_after = "", no_auto_renewal_after_hard_limit = ?', undef, dt_from_string->add( days => 2 ) );
661
        $latest_auto_renew_date = GetLatestAutoRenewDate( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
662
        $latest_auto_renew_date = GetLatestAutoRenewDate( { patron => $renewing_borrower, item => $item_to_auto_renew, issue => { issuedate => $issue->issuedate }, } );
662
        is( $latest_auto_renew_date->truncate( to => 'day' ),
663
        is( $latest_auto_renew_date->truncate( to => 'day' ),
663
            $two_days_ahead->truncate( to => 'day' ),
664
            $two_days_ahead->truncate( to => 'day' ),
664
            'GetLatestAutoRenewDate should return +2 days if no_auto_renewal_after_hard_limit is defined and not no_auto_renewal_after'
665
            'GetLatestAutoRenewDate should return +2 days if no_auto_renewal_after_hard_limit is defined and not no_auto_renewal_after'
665
        );
666
        );
666
        $dbh->do('UPDATE issuingrules SET norenewalbefore = 10, no_auto_renewal_after = 15, no_auto_renewal_after_hard_limit = ?', undef, dt_from_string->add( days => 2 ) );
667
        $dbh->do('UPDATE issuingrules SET norenewalbefore = 10, no_auto_renewal_after = 15, no_auto_renewal_after_hard_limit = ?', undef, dt_from_string->add( days => 2 ) );
667
        $latest_auto_renew_date = GetLatestAutoRenewDate( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
668
        $latest_auto_renew_date = GetLatestAutoRenewDate( { patron => $renewing_borrower, item => $item_to_auto_renew, issue => { issuedate => $issue->issuedate }, } );
668
        is( $latest_auto_renew_date->truncate( to => 'day' ),
669
        is( $latest_auto_renew_date->truncate( to => 'day' ),
669
            $two_days_ahead->truncate( to => 'day' ),
670
            $two_days_ahead->truncate( to => 'day' ),
670
            'GetLatestAutoRenewDate should return +2 days if no_auto_renewal_after_hard_limit is < no_auto_renewal_after'
671
            'GetLatestAutoRenewDate should return +2 days if no_auto_renewal_after_hard_limit is < no_auto_renewal_after'
671
- 

Return to bug 16413