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

(-)a/t/db_dependent/Circulation/CalcDateDue.t (-2 / +197 lines)
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
- 

Return to bug 15260