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

(-)a/C4/Circulation.pm (-16 / +12 lines)
Lines 3050-3063 sub GetSoonestRenewDate { Link Here
3050
3050
3051
=head2 GetLatestAutoRenewDate
3051
=head2 GetLatestAutoRenewDate
3052
3052
3053
  $NoAutoRenewalAfterThisDate = &GetLatestAutoRenewDate($borrowernumber, $itemnumber);
3053
  $NoAutoRenewalAfterThisDate = &GetLatestAutoRenewDate({ patron => $patron, issue => $issue, item => $item });
3054
3054
3055
Find out the latest possible auto renew date of a borrowed item.
3055
Find out the latest possible auto renew date of a borrowed item.
3056
3056
3057
C<$borrowernumber> is the borrower number of the patron who currently
3057
C<$borrower> is the patron who currencly has the item on loan.
3058
has the item on loan.
3059
3058
3060
C<$itemnumber> is the number of the item to renew.
3059
C<$item> is the item to renew.
3060
3061
C<$issue> is the issue to renew.
3061
3062
3062
C<$GetLatestAutoRenewDate> returns the DateTime of the latest possible
3063
C<$GetLatestAutoRenewDate> returns the DateTime of the latest possible
3063
auto renew date, based on the value "No auto renewal after" and the "No auto
3064
auto renew date, based on the value "No auto renewal after" and the "No auto
Lines 3068-3087 or item cannot be found. Link Here
3068
=cut
3069
=cut
3069
3070
3070
sub GetLatestAutoRenewDate {
3071
sub GetLatestAutoRenewDate {
3071
    my ( $borrowernumber, $itemnumber ) = @_;
3072
    my ( $params ) = @_;
3072
3073
3073
    my $dbh = C4::Context->dbh;
3074
    my $patron   = $params->{patron} or return;
3075
    my $item     = $params->{item}     or return;
3076
    my $issue    = $params->{issue}    or return;
3074
3077
3075
    my $item      = GetItem($itemnumber)      or return;
3078
    my $branchcode = _GetCircControlBranch( $item, $patron );
3076
    my $itemissue = GetItemIssue($itemnumber) or return;
3077
3078
    $borrowernumber ||= $itemissue->{borrowernumber};
3079
    my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber )
3080
      or return;
3081
3082
    my $branchcode = _GetCircControlBranch( $item, $borrower );
3083
    my $issuing_rule = Koha::IssuingRules->get_effective_issuing_rule(
3079
    my $issuing_rule = Koha::IssuingRules->get_effective_issuing_rule(
3084
        {   categorycode => $borrower->{categorycode},
3080
        {   categorycode => $patron->{categorycode},
3085
            itemtype     => $item->{itype},
3081
            itemtype     => $item->{itype},
3086
            branchcode   => $branchcode
3082
            branchcode   => $branchcode
3087
        }
3083
        }
Lines 3096-3102 sub GetLatestAutoRenewDate { Link Here
3096
3092
3097
    my $maximum_renewal_date;
3093
    my $maximum_renewal_date;
3098
    if ( $issuing_rule->no_auto_renewal_after ) {
3094
    if ( $issuing_rule->no_auto_renewal_after ) {
3099
        $maximum_renewal_date = dt_from_string($itemissue->{issuedate});
3095
        $maximum_renewal_date = dt_from_string($issue->{issuedate});
3100
        $maximum_renewal_date->add(
3096
        $maximum_renewal_date->add(
3101
            $issuing_rule->lengthunit => $issuing_rule->no_auto_renewal_after
3097
            $issuing_rule->lengthunit => $issuing_rule->no_auto_renewal_after
3102
        );
3098
        );
(-)a/circ/renew.pl (-2 / +5 lines)
Lines 86-93 if ($barcode) { Link Here
86
                }
86
                }
87
                if ( $error && ( $error eq 'auto_too_late' ) ) {
87
                if ( $error && ( $error eq 'auto_too_late' ) ) {
88
                    $latest_auto_renew_date = C4::Circulation::GetLatestAutoRenewDate(
88
                    $latest_auto_renew_date = C4::Circulation::GetLatestAutoRenewDate(
89
                        $borrower->borrowernumber(),
89
                        {
90
                        $item->itemnumber(),
90
                            patron   => $borrower->unblessed,
91
                            item     => $item->unblessed,
92
                            issue    => $issue->unblessed,
93
                        }
91
                    );
94
                    );
92
                }
95
                }
93
                if ($can_renew) {
96
                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