|
Lines 2007-2020
subtest 'AddReturn + CumulativeRestrictionPeriods' => sub {
Link Here
|
| 2007 |
); |
2007 |
); |
| 2008 |
|
2008 |
|
| 2009 |
# Patron cannot issue item_1, they have overdues |
2009 |
# Patron cannot issue item_1, they have overdues |
| 2010 |
my $five_days_ago = dt_from_string->subtract( days => 5 ); |
2010 |
my $now = dt_from_string; |
| 2011 |
my $ten_days_ago = dt_from_string->subtract( days => 10 ); |
2011 |
my $five_days_ago = $now->clone->subtract( days => 5 ); |
|
|
2012 |
my $ten_days_ago = $now->clone->subtract( days => 10 ); |
| 2012 |
AddIssue( $patron, $item_1->{barcode}, $five_days_ago ); # Add an overdue |
2013 |
AddIssue( $patron, $item_1->{barcode}, $five_days_ago ); # Add an overdue |
| 2013 |
AddIssue( $patron, $item_2->{barcode}, $ten_days_ago ) |
2014 |
AddIssue( $patron, $item_2->{barcode}, $ten_days_ago ) |
| 2014 |
; # Add another overdue |
2015 |
; # Add another overdue |
| 2015 |
|
2016 |
|
| 2016 |
t::lib::Mocks::mock_preference( 'CumulativeRestrictionPeriods', '0' ); |
2017 |
t::lib::Mocks::mock_preference( 'CumulativeRestrictionPeriods', '0' ); |
| 2017 |
AddReturn( $item_1->{barcode}, $library->{branchcode}, undef, dt_from_string ); |
2018 |
AddReturn( $item_1->{barcode}, $library->{branchcode}, undef, $now ); |
| 2018 |
my $debarments = Koha::Patron::Debarments::GetDebarments( |
2019 |
my $debarments = Koha::Patron::Debarments::GetDebarments( |
| 2019 |
{ borrowernumber => $patron->{borrowernumber}, type => 'SUSPENSION' } ); |
2020 |
{ borrowernumber => $patron->{borrowernumber}, type => 'SUSPENSION' } ); |
| 2020 |
is( scalar(@$debarments), 1 ); |
2021 |
is( scalar(@$debarments), 1 ); |
|
Lines 2023-2042
subtest 'AddReturn + CumulativeRestrictionPeriods' => sub {
Link Here
|
| 2023 |
# Same for the others |
2024 |
# Same for the others |
| 2024 |
my $expected_expiration = output_pref( |
2025 |
my $expected_expiration = output_pref( |
| 2025 |
{ |
2026 |
{ |
| 2026 |
dt => dt_from_string->add( days => ( 5 - 1 ) * 2 ), |
2027 |
dt => $now->clone->add( days => ( 5 - 1 ) * 2 ), |
| 2027 |
dateformat => 'sql', |
2028 |
dateformat => 'sql', |
| 2028 |
dateonly => 1 |
2029 |
dateonly => 1 |
| 2029 |
} |
2030 |
} |
| 2030 |
); |
2031 |
); |
| 2031 |
is( $debarments->[0]->{expiration}, $expected_expiration ); |
2032 |
is( $debarments->[0]->{expiration}, $expected_expiration ); |
| 2032 |
|
2033 |
|
| 2033 |
AddReturn( $item_2->{barcode}, $library->{branchcode}, undef, dt_from_string ); |
2034 |
AddReturn( $item_2->{barcode}, $library->{branchcode}, undef, $now ); |
| 2034 |
$debarments = Koha::Patron::Debarments::GetDebarments( |
2035 |
$debarments = Koha::Patron::Debarments::GetDebarments( |
| 2035 |
{ borrowernumber => $patron->{borrowernumber}, type => 'SUSPENSION' } ); |
2036 |
{ borrowernumber => $patron->{borrowernumber}, type => 'SUSPENSION' } ); |
| 2036 |
is( scalar(@$debarments), 1 ); |
2037 |
is( scalar(@$debarments), 1 ); |
| 2037 |
$expected_expiration = output_pref( |
2038 |
$expected_expiration = output_pref( |
| 2038 |
{ |
2039 |
{ |
| 2039 |
dt => dt_from_string->add( days => ( 10 - 1 ) * 2 ), |
2040 |
dt => $now->clone->add( days => ( 10 - 1 ) * 2 ), |
| 2040 |
dateformat => 'sql', |
2041 |
dateformat => 'sql', |
| 2041 |
dateonly => 1 |
2042 |
dateonly => 1 |
| 2042 |
} |
2043 |
} |
|
Lines 2050-2075
subtest 'AddReturn + CumulativeRestrictionPeriods' => sub {
Link Here
|
| 2050 |
AddIssue( $patron, $item_1->{barcode}, $five_days_ago ); # Add an overdue |
2051 |
AddIssue( $patron, $item_1->{barcode}, $five_days_ago ); # Add an overdue |
| 2051 |
AddIssue( $patron, $item_2->{barcode}, $ten_days_ago ) |
2052 |
AddIssue( $patron, $item_2->{barcode}, $ten_days_ago ) |
| 2052 |
; # Add another overdue |
2053 |
; # Add another overdue |
| 2053 |
AddReturn( $item_1->{barcode}, $library->{branchcode}, undef, dt_from_string ); |
2054 |
AddReturn( $item_1->{barcode}, $library->{branchcode}, undef, $now ); |
| 2054 |
$debarments = Koha::Patron::Debarments::GetDebarments( |
2055 |
$debarments = Koha::Patron::Debarments::GetDebarments( |
| 2055 |
{ borrowernumber => $patron->{borrowernumber}, type => 'SUSPENSION' } ); |
2056 |
{ borrowernumber => $patron->{borrowernumber}, type => 'SUSPENSION' } ); |
| 2056 |
is( scalar(@$debarments), 1 ); |
2057 |
is( scalar(@$debarments), 1 ); |
| 2057 |
$expected_expiration = output_pref( |
2058 |
$expected_expiration = output_pref( |
| 2058 |
{ |
2059 |
{ |
| 2059 |
dt => dt_from_string->add( days => ( 5 - 1 ) * 2 ), |
2060 |
dt => $now->clone->add( days => ( 5 - 1 ) * 2 ), |
| 2060 |
dateformat => 'sql', |
2061 |
dateformat => 'sql', |
| 2061 |
dateonly => 1 |
2062 |
dateonly => 1 |
| 2062 |
} |
2063 |
} |
| 2063 |
); |
2064 |
); |
| 2064 |
is( $debarments->[0]->{expiration}, $expected_expiration ); |
2065 |
is( $debarments->[0]->{expiration}, $expected_expiration ); |
| 2065 |
|
2066 |
|
| 2066 |
AddReturn( $item_2->{barcode}, $library->{branchcode}, undef, dt_from_string ); |
2067 |
AddReturn( $item_2->{barcode}, $library->{branchcode}, undef, $now ); |
| 2067 |
$debarments = Koha::Patron::Debarments::GetDebarments( |
2068 |
$debarments = Koha::Patron::Debarments::GetDebarments( |
| 2068 |
{ borrowernumber => $patron->{borrowernumber}, type => 'SUSPENSION' } ); |
2069 |
{ borrowernumber => $patron->{borrowernumber}, type => 'SUSPENSION' } ); |
| 2069 |
is( scalar(@$debarments), 1 ); |
2070 |
is( scalar(@$debarments), 1 ); |
| 2070 |
$expected_expiration = output_pref( |
2071 |
$expected_expiration = output_pref( |
| 2071 |
{ |
2072 |
{ |
| 2072 |
dt => dt_from_string->add( days => ( 5 - 1 ) * 2 + ( 10 - 1 ) * 2 ), |
2073 |
dt => $now->clone->add( days => ( 5 - 1 ) * 2 + ( 10 - 1 ) * 2 ), |
| 2073 |
dateformat => 'sql', |
2074 |
dateformat => 'sql', |
| 2074 |
dateonly => 1 |
2075 |
dateonly => 1 |
| 2075 |
} |
2076 |
} |
|
Lines 2112-2121
subtest 'AddReturn + suspension_chargeperiod' => sub {
Link Here
|
| 2112 |
} |
2113 |
} |
| 2113 |
); |
2114 |
); |
| 2114 |
|
2115 |
|
| 2115 |
my $five_days_ago = dt_from_string->subtract( days => 5 ); |
2116 |
my $now = dt_from_string; |
|
|
2117 |
my $five_days_ago = $now->clone->subtract( days => 5 ); |
| 2116 |
# We want to charge 2 days every day, without grace |
2118 |
# We want to charge 2 days every day, without grace |
| 2117 |
# With 5 days of overdue: 5 * Z |
2119 |
# With 5 days of overdue: 5 * Z |
| 2118 |
my $expected_expiration = dt_from_string->add( days => ( 5 * 2 ) / 1 ); |
2120 |
my $expected_expiration = $now->clone->add( days => ( 5 * 2 ) / 1 ); |
| 2119 |
test_debarment_on_checkout( |
2121 |
test_debarment_on_checkout( |
| 2120 |
{ |
2122 |
{ |
| 2121 |
item => $item_1, |
2123 |
item => $item_1, |
|
Lines 2138-2144
subtest 'AddReturn + suspension_chargeperiod' => sub {
Link Here
|
| 2138 |
} |
2140 |
} |
| 2139 |
); |
2141 |
); |
| 2140 |
|
2142 |
|
| 2141 |
$expected_expiration = dt_from_string->add( days => floor( 5 * 2 ) / 2 ); |
2143 |
$expected_expiration = $now->clone->add( days => floor( 5 * 2 ) / 2 ); |
| 2142 |
test_debarment_on_checkout( |
2144 |
test_debarment_on_checkout( |
| 2143 |
{ |
2145 |
{ |
| 2144 |
item => $item_1, |
2146 |
item => $item_1, |
|
Lines 2162-2168
subtest 'AddReturn + suspension_chargeperiod' => sub {
Link Here
|
| 2162 |
} |
2164 |
} |
| 2163 |
} |
2165 |
} |
| 2164 |
); |
2166 |
); |
| 2165 |
$expected_expiration = dt_from_string->add( days => floor( ( ( 5 - 1 ) / 3 ) * 2 ) ); |
2167 |
$expected_expiration = $now->clone->add( days => floor( ( ( 5 - 1 ) / 3 ) * 2 ) ); |
| 2166 |
test_debarment_on_checkout( |
2168 |
test_debarment_on_checkout( |
| 2167 |
{ |
2169 |
{ |
| 2168 |
item => $item_1, |
2170 |
item => $item_1, |
|
Lines 2192-2198
subtest 'AddReturn + suspension_chargeperiod' => sub {
Link Here
|
| 2192 |
|
2194 |
|
| 2193 |
# Adding a holiday 2 days ago |
2195 |
# Adding a holiday 2 days ago |
| 2194 |
my $calendar = C4::Calendar->new(branchcode => $library->{branchcode}); |
2196 |
my $calendar = C4::Calendar->new(branchcode => $library->{branchcode}); |
| 2195 |
my $two_days_ago = dt_from_string->subtract( days => 2 ); |
2197 |
my $two_days_ago = $now->clone->subtract( days => 2 ); |
| 2196 |
$calendar->insert_single_holiday( |
2198 |
$calendar->insert_single_holiday( |
| 2197 |
day => $two_days_ago->day, |
2199 |
day => $two_days_ago->day, |
| 2198 |
month => $two_days_ago->month, |
2200 |
month => $two_days_ago->month, |
|
Lines 2201-2207
subtest 'AddReturn + suspension_chargeperiod' => sub {
Link Here
|
| 2201 |
description => 'holidayDesc 2 days ago' |
2203 |
description => 'holidayDesc 2 days ago' |
| 2202 |
); |
2204 |
); |
| 2203 |
# With 5 days of overdue, only 4 (x finedays=2) days must charged (one was an holiday) |
2205 |
# With 5 days of overdue, only 4 (x finedays=2) days must charged (one was an holiday) |
| 2204 |
$expected_expiration = dt_from_string->add( days => floor( ( ( 5 - 0 - 1 ) / 1 ) * 2 ) ); |
2206 |
$expected_expiration = $now->clone->add( days => floor( ( ( 5 - 0 - 1 ) / 1 ) * 2 ) ); |
| 2205 |
test_debarment_on_checkout( |
2207 |
test_debarment_on_checkout( |
| 2206 |
{ |
2208 |
{ |
| 2207 |
item => $item_1, |
2209 |
item => $item_1, |
|
Lines 2213-2219
subtest 'AddReturn + suspension_chargeperiod' => sub {
Link Here
|
| 2213 |
); |
2215 |
); |
| 2214 |
|
2216 |
|
| 2215 |
# Adding a holiday 2 days ahead, with finesCalendar=noFinesWhenClosed it should be skipped |
2217 |
# Adding a holiday 2 days ahead, with finesCalendar=noFinesWhenClosed it should be skipped |
| 2216 |
my $two_days_ahead = dt_from_string->add( days => 2 ); |
2218 |
my $two_days_ahead = $now->clone->add( days => 2 ); |
| 2217 |
$calendar->insert_single_holiday( |
2219 |
$calendar->insert_single_holiday( |
| 2218 |
day => $two_days_ahead->day, |
2220 |
day => $two_days_ahead->day, |
| 2219 |
month => $two_days_ahead->month, |
2221 |
month => $two_days_ahead->month, |
|
Lines 2223-2229
subtest 'AddReturn + suspension_chargeperiod' => sub {
Link Here
|
| 2223 |
); |
2225 |
); |
| 2224 |
|
2226 |
|
| 2225 |
# Same as above, but we should skip D+2 |
2227 |
# Same as above, but we should skip D+2 |
| 2226 |
$expected_expiration = dt_from_string->add( days => floor( ( ( 5 - 0 - 1 ) / 1 ) * 2 ) + 1 ); |
2228 |
$expected_expiration = $now->clone->add( days => floor( ( ( 5 - 0 - 1 ) / 1 ) * 2 ) + 1 ); |
| 2227 |
test_debarment_on_checkout( |
2229 |
test_debarment_on_checkout( |
| 2228 |
{ |
2230 |
{ |
| 2229 |
item => $item_1, |
2231 |
item => $item_1, |
|
Lines 2259-2266
subtest 'AddReturn + suspension_chargeperiod' => sub {
Link Here
|
| 2259 |
item => $item_1, |
2261 |
item => $item_1, |
| 2260 |
library => $library, |
2262 |
library => $library, |
| 2261 |
patron => $patron, |
2263 |
patron => $patron, |
| 2262 |
return_date => dt_from_string->add(days => 5), |
2264 |
return_date => $now->clone->add(days => 5), |
| 2263 |
expiration_date => dt_from_string->add(days => 5 + (5 * 2 - 1) ), |
2265 |
expiration_date => $now->clone->add(days => 5 + (5 * 2 - 1) ), |
| 2264 |
} |
2266 |
} |
| 2265 |
); |
2267 |
); |
| 2266 |
}; |
2268 |
}; |
|
Lines 2346-2354
subtest 'AddReturn | is_overdue' => sub {
Link Here
|
| 2346 |
); |
2348 |
); |
| 2347 |
|
2349 |
|
| 2348 |
my $now = dt_from_string; |
2350 |
my $now = dt_from_string; |
| 2349 |
my $one_day_ago = dt_from_string->subtract( days => 1 ); |
2351 |
my $one_day_ago = $now->clone->subtract( days => 1 ); |
| 2350 |
my $five_days_ago = dt_from_string->subtract( days => 5 ); |
2352 |
my $five_days_ago = $now->clone->subtract( days => 5 ); |
| 2351 |
my $ten_days_ago = dt_from_string->subtract( days => 10 ); |
2353 |
my $ten_days_ago = $now->clone->subtract( days => 10 ); |
| 2352 |
$patron = Koha::Patrons->find( $patron->{borrowernumber} ); |
2354 |
$patron = Koha::Patrons->find( $patron->{borrowernumber} ); |
| 2353 |
|
2355 |
|
| 2354 |
# No return date specified, today will be used => 10 days overdue charged |
2356 |
# No return date specified, today will be used => 10 days overdue charged |
|
Lines 3036-3043
subtest 'CanBookBeIssued | is_overdue' => sub {
Link Here
|
| 3036 |
} |
3038 |
} |
| 3037 |
); |
3039 |
); |
| 3038 |
|
3040 |
|
| 3039 |
my $five_days_go = output_pref({ dt => dt_from_string->add( days => 5 ), dateonly => 1}); |
3041 |
my $now = dt_from_string; |
| 3040 |
my $ten_days_go = output_pref({ dt => dt_from_string->add( days => 10), dateonly => 1 }); |
3042 |
my $five_days_go = output_pref({ dt => $now->clone->add( days => 5 ), dateonly => 1}); |
|
|
3043 |
my $ten_days_go = output_pref({ dt => $now->clone->add( days => 10), dateonly => 1 }); |
| 3041 |
my $library = $builder->build( { source => 'Branch' } ); |
3044 |
my $library = $builder->build( { source => 'Branch' } ); |
| 3042 |
my $patron = $builder->build_object( { class => 'Koha::Patrons', value => { categorycode => $patron_category->{categorycode} } } ); |
3045 |
my $patron = $builder->build_object( { class => 'Koha::Patrons', value => { categorycode => $patron_category->{categorycode} } } ); |
| 3043 |
|
3046 |
|
|
Lines 3407-3413
subtest 'AddRenewal and AddIssuingCharge tests' => sub {
Link Here
|
| 3407 |
$context = Test::MockModule->new('C4::Context'); |
3410 |
$context = Test::MockModule->new('C4::Context'); |
| 3408 |
$context->mock( userenv => { branch => undef, interface => 'CRON'} ); #Test statistical logging of renewal via cron (atuo_renew) |
3411 |
$context->mock( userenv => { branch => undef, interface => 'CRON'} ); #Test statistical logging of renewal via cron (atuo_renew) |
| 3409 |
|
3412 |
|
| 3410 |
$date = output_pref( { dt => dt_from_string(), dateonly => 1, dateformat => 'iso' } ); |
3413 |
my $now = dt_from_string; |
|
|
3414 |
$date = output_pref( { dt => $now, dateonly => 1, dateformat => 'iso' } ); |
| 3411 |
$old_log_size = Koha::ActionLogs->count( \%params_renewal ); |
3415 |
$old_log_size = Koha::ActionLogs->count( \%params_renewal ); |
| 3412 |
my $sth = $dbh->prepare("SELECT COUNT(*) FROM statistics WHERE itemnumber = ? AND branch = ?"); |
3416 |
my $sth = $dbh->prepare("SELECT COUNT(*) FROM statistics WHERE itemnumber = ? AND branch = ?"); |
| 3413 |
$sth->execute($item->id, $library->id); |
3417 |
$sth->execute($item->id, $library->id); |
|
Lines 3420-3426
subtest 'AddRenewal and AddIssuingCharge tests' => sub {
Link Here
|
| 3420 |
is( $new_stats_size, $old_stats_size + 1, 'renew statistic successfully added with passed branch' ); |
3424 |
is( $new_stats_size, $old_stats_size + 1, 'renew statistic successfully added with passed branch' ); |
| 3421 |
|
3425 |
|
| 3422 |
AddReturn( $item->id, $library->id, undef, $date ); |
3426 |
AddReturn( $item->id, $library->id, undef, $date ); |
| 3423 |
AddIssue( $patron->unblessed, $item->barcode, dt_from_string() ); |
3427 |
AddIssue( $patron->unblessed, $item->barcode, $now ); |
| 3424 |
AddRenewal( $patron->id, $item->id, $library->id, undef, undef, 1 ); |
3428 |
AddRenewal( $patron->id, $item->id, $library->id, undef, undef, 1 ); |
| 3425 |
my $lines_skipped = Koha::Account::Lines->search({ |
3429 |
my $lines_skipped = Koha::Account::Lines->search({ |
| 3426 |
borrowernumber => $patron->id, |
3430 |
borrowernumber => $patron->id, |
|
Lines 3496-3504
subtest 'Incremented fee tests' => sub {
Link Here
|
| 3496 |
is( $item->effective_itemtype, $itemtype->id, |
3500 |
is( $item->effective_itemtype, $itemtype->id, |
| 3497 |
"Itemtype set correctly for item" ); |
3501 |
"Itemtype set correctly for item" ); |
| 3498 |
|
3502 |
|
| 3499 |
my $dt_from = dt_from_string(); |
3503 |
my $now = dt_from_string; |
| 3500 |
my $dt_to = dt_from_string()->add( days => 7 ); |
3504 |
my $dt_from = $now->clone; |
| 3501 |
my $dt_to_renew = dt_from_string()->add( days => 13 ); |
3505 |
my $dt_to = $now->clone->add( days => 7 ); |
|
|
3506 |
my $dt_to_renew = $now->clone->add( days => 13 ); |
| 3502 |
|
3507 |
|
| 3503 |
# Daily Tests |
3508 |
# Daily Tests |
| 3504 |
t::lib::Mocks::mock_preference( 'finesCalendar', 'ignoreCalendar' ); |
3509 |
t::lib::Mocks::mock_preference( 'finesCalendar', 'ignoreCalendar' ); |
|
Lines 3595-3602
subtest 'Incremented fee tests' => sub {
Link Here
|
| 3595 |
is( $itemtype->rentalcharge_hourly, |
3600 |
is( $itemtype->rentalcharge_hourly, |
| 3596 |
'0.25', 'Hourly rental charge stored and retreived correctly' ); |
3601 |
'0.25', 'Hourly rental charge stored and retreived correctly' ); |
| 3597 |
|
3602 |
|
| 3598 |
$dt_to = dt_from_string()->add( hours => 168 ); |
3603 |
$dt_to = $now->clone->add( hours => 168 ); |
| 3599 |
$dt_to_renew = dt_from_string()->add( hours => 312 ); |
3604 |
$dt_to_renew = $now->clone->add( hours => 312 ); |
| 3600 |
|
3605 |
|
| 3601 |
t::lib::Mocks::mock_preference( 'finesCalendar', 'ignoreCalendar' ); |
3606 |
t::lib::Mocks::mock_preference( 'finesCalendar', 'ignoreCalendar' ); |
| 3602 |
$issue = |
3607 |
$issue = |
|
Lines 3687-3693
subtest 'CanBookBeIssued & RentalFeesCheckoutConfirmation' => sub {
Link Here
|
| 3687 |
|
3692 |
|
| 3688 |
my ( $issuingimpossible, $needsconfirmation ); |
3693 |
my ( $issuingimpossible, $needsconfirmation ); |
| 3689 |
my $dt_from = dt_from_string(); |
3694 |
my $dt_from = dt_from_string(); |
| 3690 |
my $dt_due = dt_from_string()->add( days => 3 ); |
3695 |
my $dt_due = $dt_from->clone->add( days => 3 ); |
| 3691 |
|
3696 |
|
| 3692 |
$itemtype->rentalcharge(1)->store; |
3697 |
$itemtype->rentalcharge(1)->store; |
| 3693 |
( $issuingimpossible, $needsconfirmation ) = CanBookBeIssued( $patron, $item->barcode, $dt_due, undef, undef, undef ); |
3698 |
( $issuingimpossible, $needsconfirmation ) = CanBookBeIssued( $patron, $item->barcode, $dt_due, undef, undef, undef ); |
| 3694 |
- |
|
|