|
Lines 2-8
Link Here
|
| 2 |
|
2 |
|
| 3 |
use Modern::Perl; |
3 |
use Modern::Perl; |
| 4 |
|
4 |
|
| 5 |
use Test::More tests => 7; |
5 |
use Test::More tests => 17; |
| 6 |
use Test::MockModule; |
6 |
use Test::MockModule; |
| 7 |
use DBI; |
7 |
use DBI; |
| 8 |
use DateTime; |
8 |
use DateTime; |
|
Lines 95-99
is($date, '2013-02-' . (9 + $issuelength) . 'T23:59:00', "date expiry ( 9 + $iss
Link Here
|
| 95 |
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower, 1 ); |
95 |
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower, 1 ); |
| 96 |
is($date, '2013-02-' . (9 + $renewalperiod) . 'T23:59:00', "date expiry ( 9 + $renewalperiod )"); |
96 |
is($date, '2013-02-' . (9 + $renewalperiod) . 'T23:59:00', "date expiry ( 9 + $renewalperiod )"); |
| 97 |
|
97 |
|
|
|
98 |
|
| 99 |
# Now we want to test the Dayweek useDaysMode option |
| 100 |
# For this we need a loan period that is a mutiple of 7 days |
| 101 |
# But, since we currently don't have that, let's test it does the |
| 102 |
# right thing in that case, it should act as though useDaysMode is set to |
| 103 |
# Datedue |
| 104 |
#Set syspref ReturnBeforeExpiry = 0 and useDaysMode = 'Dayweek' |
| 105 |
t::lib::Mocks::mock_preference('ReturnBeforeExpiry', 0); |
| 106 |
t::lib::Mocks::mock_preference('useDaysMode', 'Dayweek'); |
| 107 |
|
| 108 |
# No closed day interfering, so we should get the regular due date |
| 109 |
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower ); |
| 110 |
is($date, '2013-02-' . (9 + $issuelength) . 'T23:59:00', "useDaysMode = Dayweek, no closed days, issue date expiry ( start + $issuelength )"); |
| 111 |
|
| 112 |
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower, 1 ); |
| 113 |
is($date, '2013-02-' . (9 + $renewalperiod) . 'T23:59:00', "useDaysMode = Dayweek, no closed days, renewal date expiry ( start + $renewalperiod )"); |
| 114 |
|
| 115 |
# Now let's add a closed day on the expected renewal date, it should |
| 116 |
# roll forward as per Datedue (i.e. one day at a time) |
| 117 |
# For issues... |
| 118 |
$calendar->insert_single_holiday( |
| 119 |
day => 9 + $issuelength, |
| 120 |
month => 2, |
| 121 |
year => 2013, |
| 122 |
title =>'DayweekTest1', |
| 123 |
description => 'DayweekTest1' |
| 124 |
); |
| 125 |
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower ); |
| 126 |
is($date, '2013-02-' . (9 + $issuelength + 1) . 'T23:59:00', "useDaysMode = Dayweek, closed on due date, 10 day loan (should not trigger 7 day roll forward), issue date expiry ( start + $issuelength + 1 )"); |
| 127 |
# Remove the holiday we just created |
| 128 |
$calendar->delete_holiday( |
| 129 |
day => 9 + $issuelength, |
| 130 |
month => 2, |
| 131 |
year => 2013 |
| 132 |
); |
| 133 |
|
| 134 |
# ...and for renewals... |
| 135 |
$calendar->insert_single_holiday( |
| 136 |
day => 9 + $renewalperiod, |
| 137 |
month => 2, |
| 138 |
year => 2013, |
| 139 |
title =>'DayweekTest2', |
| 140 |
description => 'DayweekTest2' |
| 141 |
); |
| 142 |
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower, 1 ); |
| 143 |
is($date, '2013-02-' . (9 + $renewalperiod + 1) . 'T23:59:00', "useDaysMode = Dayweek, closed on due date, 5 day renewal (should not trigger 7 day roll forward), renewal date expiry ( start + $renewalperiod + 1 )"); |
| 144 |
# Remove the holiday we just created |
| 145 |
$calendar->delete_holiday( |
| 146 |
day => 9 + $renewalperiod, |
| 147 |
month => 2, |
| 148 |
year => 2013, |
| 149 |
); |
| 150 |
|
| 151 |
# Now we test it does the right thing if the loan and renewal periods |
| 152 |
# are a multiple of 7 days |
| 153 |
my $dayweek_categorycode = 'C'; |
| 154 |
my $dayweek_itemtype = 'MX'; |
| 155 |
my $dayweek_branchcode = 'FPL'; |
| 156 |
my $dayweek_issuelength = 14; |
| 157 |
my $dayweek_renewalperiod = 7; |
| 158 |
my $dayweek_lengthunit = 'days'; |
| 159 |
|
| 160 |
Koha::Database->schema->resultset('Issuingrule')->create({ |
| 161 |
categorycode => $dayweek_categorycode, |
| 162 |
itemtype => $dayweek_itemtype, |
| 163 |
branchcode => $dayweek_branchcode, |
| 164 |
issuelength => $dayweek_issuelength, |
| 165 |
renewalperiod => $dayweek_renewalperiod, |
| 166 |
lengthunit => $dayweek_lengthunit, |
| 167 |
}); |
| 168 |
my $dayweek_borrower = {categorycode => 'C', dateexpiry => $dateexpiry}; |
| 169 |
|
| 170 |
# For issues... |
| 171 |
$start_date = DateTime->new({year => 2013, month => 2, day => 9}); |
| 172 |
$calendar->insert_single_holiday( |
| 173 |
day => 9 + $dayweek_issuelength, |
| 174 |
month => 2, |
| 175 |
year => 2013, |
| 176 |
title =>'DayweekTest3', |
| 177 |
description => 'DayweekTest3' |
| 178 |
); |
| 179 |
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $dayweek_borrower ); |
| 180 |
my $issue_should_add = $dayweek_issuelength + 7; |
| 181 |
my $dayweek_issue_expected = $start_date->add( days => $issue_should_add ); |
| 182 |
is($date, $dayweek_issue_expected->strftime('%F') . 'T23:59:00', "useDaysMode = Dayweek, closed on due date, 14 day loan (should trigger 7 day roll forward), issue date expiry ( start + $issue_should_add )"); |
| 183 |
# Remove the holiday we just created |
| 184 |
$calendar->delete_holiday( |
| 185 |
day => 9 + $dayweek_issuelength, |
| 186 |
month => 2, |
| 187 |
year => 2013, |
| 188 |
); |
| 189 |
|
| 190 |
# ...and for renewals... |
| 191 |
$start_date = DateTime->new({year => 2013, month => 2, day => 9}); |
| 192 |
$calendar->insert_single_holiday( |
| 193 |
day => 9 + $dayweek_renewalperiod, |
| 194 |
month => 2, |
| 195 |
year => 2013, |
| 196 |
title => 'DayweekTest4', |
| 197 |
description => 'DayweekTest4' |
| 198 |
); |
| 199 |
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $dayweek_borrower, 1 ); |
| 200 |
my $renewal_should_add = $dayweek_renewalperiod + 7; |
| 201 |
my $dayweek_renewal_expected = $start_date->add( days => $renewal_should_add ); |
| 202 |
is($date, $dayweek_renewal_expected->strftime('%F') . 'T23:59:00', "useDaysMode = Dayweek, closed on due date, 7 day renewal (should trigger 7 day roll forward), renewal date expiry ( start + $renewal_should_add )"); |
| 203 |
# Remove the holiday we just created |
| 204 |
$calendar->delete_holiday( |
| 205 |
day => 9 + $dayweek_renewalperiod, |
| 206 |
month => 2, |
| 207 |
year => 2013, |
| 208 |
); |
| 209 |
|
| 210 |
# Now test it continues to roll forward by 7 days until it finds |
| 211 |
# an open day, so we create a 3 week period of closed Saturdays |
| 212 |
$start_date = DateTime->new({year => 2013, month => 2, day => 9}); |
| 213 |
my $expected_rolled_date = DateTime->new({year => 2013, month => 3, day => 9}); |
| 214 |
my $holiday = $start_date->clone(); |
| 215 |
$holiday->add(days => 7); |
| 216 |
$calendar->insert_single_holiday( |
| 217 |
day => $holiday->day, |
| 218 |
month => $holiday->month, |
| 219 |
year => 2013, |
| 220 |
title =>'DayweekTest5', |
| 221 |
description => 'DayweekTest5' |
| 222 |
); |
| 223 |
$holiday->add(days => 7); |
| 224 |
$calendar->insert_single_holiday( |
| 225 |
day => $holiday->day, |
| 226 |
month => $holiday->month, |
| 227 |
year => 2013, |
| 228 |
title =>'DayweekTest6', |
| 229 |
description => 'DayweekTest6' |
| 230 |
); |
| 231 |
$holiday->add(days => 7); |
| 232 |
$calendar->insert_single_holiday( |
| 233 |
day => $holiday->day, |
| 234 |
month => $holiday->month, |
| 235 |
year => 2013, |
| 236 |
title =>'DayweekTest7', |
| 237 |
description => 'DayweekTest7' |
| 238 |
); |
| 239 |
# For issues... |
| 240 |
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $dayweek_borrower ); |
| 241 |
$dayweek_issue_expected = $start_date->add( days => $issue_should_add ); |
| 242 |
is($date, $expected_rolled_date->strftime('%F') . 'T23:59:00', "useDaysMode = Dayweek, closed on due date and two subequent due dates, 14 day loan (should trigger 2 x 7 day roll forward), issue date expiry ( start + 28 )"); |
| 243 |
# ...and for renewals... |
| 244 |
$start_date = DateTime->new({year => 2013, month => 2, day => 9}); |
| 245 |
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $dayweek_borrower, 1 ); |
| 246 |
$dayweek_issue_expected = $start_date->add( days => $renewal_should_add ); |
| 247 |
is($date, $expected_rolled_date->strftime('%F') . 'T23:59:00', "useDaysMode = Dayweek, closed on due date and three subsequent due dates, 7 day renewal (should trigger 3 x 7 day roll forward), issue date expiry ( start + 28 )"); |
| 248 |
# Remove the holidays we just created |
| 249 |
$start_date = DateTime->new({year => 2013, month => 2, day => 9}); |
| 250 |
my $del_holiday = $start_date->clone(); |
| 251 |
$del_holiday->add(days => 7); |
| 252 |
$calendar->delete_holiday( |
| 253 |
day => $del_holiday->day, |
| 254 |
month => $del_holiday->month, |
| 255 |
year => 2013 |
| 256 |
); |
| 257 |
$del_holiday->add(days => 7); |
| 258 |
$calendar->delete_holiday( |
| 259 |
day => $del_holiday->day, |
| 260 |
month => $del_holiday->month, |
| 261 |
year => 2013 |
| 262 |
); |
| 263 |
$del_holiday->add(days => 7); |
| 264 |
$calendar->delete_holiday( |
| 265 |
day => $del_holiday->day, |
| 266 |
month => $del_holiday->month, |
| 267 |
year => 2013 |
| 268 |
); |
| 269 |
|
| 270 |
# Now test that useDaysMode "Dayweek" doesn't try to roll forward onto |
| 271 |
# a permanently closed day and instead rolls forward just one day |
| 272 |
$start_date = DateTime->new({year => 2013, month => 2, day => 9}); |
| 273 |
# Our tests are concerned with Saturdays, so let's close on Saturdays |
| 274 |
$calendar->insert_week_day_holiday( |
| 275 |
weekday => 6, |
| 276 |
title => "Saturday closure", |
| 277 |
description => "Closed on Saturdays" |
| 278 |
); |
| 279 |
# For issues... |
| 280 |
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $dayweek_borrower ); |
| 281 |
$dayweek_issue_expected = $start_date->add( days => $dayweek_issuelength + 1 ); |
| 282 |
is($date, $dayweek_issue_expected->strftime('%F') . 'T23:59:00', "useDaysMode = Dayweek, due on Saturday, closed on Saturdays, 14 day loan (should trigger 1 day roll forward), issue date expiry ( start + 15 )"); |
| 283 |
# ...and for renewals... |
| 284 |
$start_date = DateTime->new({year => 2013, month => 2, day => 9}); |
| 285 |
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $dayweek_borrower, 1 ); |
| 286 |
$dayweek_renewal_expected = $start_date->add( days => $dayweek_renewalperiod + 1 ); |
| 287 |
is($date, $dayweek_renewal_expected->strftime('%F') . 'T23:59:00', "useDaysMode = Dayweek, due on Saturday, closed on Saturdays, 7 day renewal (should trigger 1 day roll forward), issue date expiry ( start + 8 )"); |
| 288 |
# Remove the holiday we just created |
| 289 |
$calendar->delete_holiday( |
| 290 |
weekday => 6 |
| 291 |
); |
| 292 |
|
| 293 |
|
| 98 |
$cache->clear_from_cache('single_holidays'); |
294 |
$cache->clear_from_cache('single_holidays'); |
| 99 |
$schema->storage->txn_rollback; |
295 |
$schema->storage->txn_rollback; |
| 100 |
- |
|
|