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

(-)a/C4/Circulation.pm (-2 / +2 lines)
Lines 22-28 package C4::Circulation; Link Here
22
use strict;
22
use strict;
23
#use warnings; FIXME - Bug 2505
23
#use warnings; FIXME - Bug 2505
24
use DateTime;
24
use DateTime;
25
use POSIX qw( floor );
25
use POSIX qw( floor ceil );
26
use Koha::DateUtils;
26
use Koha::DateUtils;
27
use C4::Context;
27
use C4::Context;
28
use C4::Stats;
28
use C4::Stats;
Lines 2272-2278 sub _debar_user_on_return { Link Here
2272
            if ( $issuing_rule->suspension_chargeperiod > 1 ) {
2272
            if ( $issuing_rule->suspension_chargeperiod > 1 ) {
2273
                # No need to / 1 and do not consider / 0
2273
                # No need to / 1 and do not consider / 0
2274
                $suspension_days = DateTime::Duration->new(
2274
                $suspension_days = DateTime::Duration->new(
2275
                    days => floor( $suspension_days->in_units('days') / $issuing_rule->suspension_chargeperiod )
2275
                    days => ceil( $suspension_days->in_units('days') / $issuing_rule->suspension_chargeperiod )
2276
                );
2276
                );
2277
            }
2277
            }
2278
2278
(-)a/t/db_dependent/Circulation/IssuingRules/maxsuspensiondays.t (-2 / +76 lines)
Lines 1-5 Link Here
1
use Modern::Perl;
1
use Modern::Perl;
2
use Test::More tests => 5;
2
use Test::More tests => 10;
3
3
4
use MARC::Record;
4
use MARC::Record;
5
use MARC::Field;
5
use MARC::Field;
Lines 152-155 is( Link Here
152
);
152
);
153
DelDebarment( $debarments->[0]->{borrower_debarment_id} );
153
DelDebarment( $debarments->[0]->{borrower_debarment_id} );
154
154
155
# 2 hours before => 0 day of suspension
156
my $hoursafter2= dt_from_string->add_duration(DateTime::Duration->new(hours => 2));
157
AddIssue( $borrower, $barcode, $hoursafter2);
158
AddReturn( $barcode, $branchcode );
159
$debarments = GetDebarments({borrowernumber => $borrower->{borrowernumber}});
160
is_deeply(
161
    $debarments,
162
    [],
163
    'No debarment if in time'
164
);
165
DelDebarment( $debarments->[0]->{borrower_debarment_id} );
166
167
Koha::IssuingRules->search->delete;
168
# Add 1 day every 2 days
169
$builder->build(
170
    {
171
        source => 'Issuingrule',
172
        value  => {
173
            categorycode => '*',
174
            itemtype     => '*',
175
            branchcode   => '*',
176
            firstremind  => 0,
177
            finedays     => 1,
178
            lengthunit   => 'hours',
179
            suspension_chargeperiod => 2,
180
            maxsuspensiondays => 100,
181
        }
182
    }
183
);
184
185
# 20 days late => 20/2 * 1 => 10 days of suspension
186
AddIssue( $borrower, $barcode, $daysago20 );
187
AddReturn( $barcode, $branchcode );
188
$debarments = GetDebarments({borrowernumber => $borrower->{borrowernumber}});
189
is(
190
    $debarments->[0]->{expiration},
191
    output_pref({ dt => $daysafter10, dateformat => 'iso', dateonly => 1 }),
192
    'calculate suspension with lengthunit hours.'
193
);
194
DelDebarment( $debarments->[0]->{borrower_debarment_id} );
195
196
# 1 day late => ceil(1/2) * 1 => 1 day of suspension
197
my $tomorrow = dt_from_string->add_duration(DateTime::Duration->new( days => 1 ));
198
AddIssue( $borrower, $barcode, $yesterday);
199
AddReturn( $barcode, $branchcode );
200
$debarments = GetDebarments({borrowernumber => $borrower->{borrowernumber}});
201
is(
202
    $debarments->[0]->{expiration},
203
    output_pref({ dt => $tomorrow, dateformat => 'iso', dateonly => 1 }),
204
    'calculate suspension with lengthunit hours.'
205
);
206
DelDebarment( $debarments->[0]->{borrower_debarment_id} );
207
208
# 2 hours late => ceil(.x/2) * 1 => 1 day of suspension
209
AddIssue( $borrower, $barcode, $hoursago2);
210
AddReturn( $barcode, $branchcode );
211
$debarments = GetDebarments({borrowernumber => $borrower->{borrowernumber}});
212
is(
213
    $debarments->[0]->{expiration},
214
    output_pref({ dt => $tomorrow, dateformat => 'iso', dateonly => 1 }),
215
    'calculate suspension with lengthunit hours.'
216
);
217
DelDebarment( $debarments->[0]->{borrower_debarment_id} );
218
219
# 2 hours before => 0 day of suspension
220
AddIssue( $borrower, $barcode, $hoursafter2);
221
AddReturn( $barcode, $branchcode );
222
$debarments = GetDebarments({borrowernumber => $borrower->{borrowernumber}});
223
is_deeply(
224
    $debarments,
225
    [],
226
    'No debarment if in time'
227
);
228
DelDebarment( $debarments->[0]->{borrower_debarment_id} );
229
155
$schema->storage->txn_rollback;
230
$schema->storage->txn_rollback;
156
- 

Return to bug 14293