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

(-)a/C4/Circulation.pm (-2 / +4 lines)
Lines 3511-3519 sub CalcDateDue { Link Here
3511
            }
3511
            }
3512
        }
3512
        }
3513
        if ( C4::Context->preference('useDaysMode') ne 'Days' ) {
3513
        if ( C4::Context->preference('useDaysMode') ne 'Days' ) {
3514
          # Don't return on a closed day
3515
          my $calendar = Koha::Calendar->new( branchcode => $branch );
3514
          my $calendar = Koha::Calendar->new( branchcode => $branch );
3516
          $datedue = $calendar->prev_open_day( $datedue );
3515
          if ( $calendar->is_holiday($datedue) ) {
3516
              # Don't return on a closed day
3517
              $datedue = $calendar->prev_open_day( $datedue );
3518
          }
3517
        }
3519
        }
3518
    }
3520
    }
3519
3521
(-)a/t/db_dependent/Circulation/CalcDateDue.t (-2 / +17 lines)
Lines 2-13 Link Here
2
2
3
use Modern::Perl;
3
use Modern::Perl;
4
4
5
use Test::More tests => 5;
5
use Test::More tests => 6;
6
use Test::MockModule;
6
use Test::MockModule;
7
use DBI;
7
use DBI;
8
use DateTime;
8
use DateTime;
9
use t::lib::Mocks;
9
use t::lib::Mocks;
10
use t::lib::TestBuilder;
10
use t::lib::TestBuilder;
11
use C4::Calendar;
11
12
12
use_ok('C4::Circulation');
13
use_ok('C4::Circulation');
13
14
Lines 51-57 t::lib::Mocks::mock_preference('useDaysMode', 'noDays'); Link Here
51
$borrower = {categorycode => 'B', dateexpiry => $dateexpiry};
52
$borrower = {categorycode => 'B', dateexpiry => $dateexpiry};
52
$start_date = DateTime->new({year => 2013, month => 2, day => 9});
53
$start_date = DateTime->new({year => 2013, month => 2, day => 9});
53
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower );
54
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower );
54
is($date, $dateexpiry . 'T23:59:00', 'date expiry');
55
is($date, $dateexpiry . 'T23:59:00', 'date expiry with useDaysMode to noDays');
56
57
# Let's add a special holiday on 2013-01-01. With ReturnBeforeExpiry and
58
# useDaysMode different from 'Days', return should forward the dateexpiry.
59
my $calendar = C4::Calendar->new(branchcode => $branchcode);
60
$calendar->insert_single_holiday(
61
    day             => 1,
62
    month           => 1,
63
    year            => 2013,
64
    title           =>'holidayTest',
65
    description     => 'holidayDesc'
66
);
67
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower );
68
is($date, '2012-12-31T23:59:00', 'date expiry should be 2013-01-01 -1 day');
69
55
70
56
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower, 1 );
71
$date = C4::Circulation::CalcDateDue( $start_date, $itemtype, $branchcode, $borrower, 1 );
57
72
(-)a/t/db_dependent/Circulation/dateexpiry.t (-22 / +1 lines)
Lines 23-29 use Test::More tests => 2; Link Here
23
use C4::Members;
23
use C4::Members;
24
use Koha::DateUtils;
24
use Koha::DateUtils;
25
use Koha::Database;
25
use Koha::Database;
26
use C4::Calendar;
27
26
28
use t::lib::TestBuilder;
27
use t::lib::TestBuilder;
29
use t::lib::Mocks qw( mock_preference );
28
use t::lib::Mocks qw( mock_preference );
Lines 40-46 subtest 'Tests for CanBookBeIssued related to dateexpiry' => sub { Link Here
40
    can_book_be_issued();
39
    can_book_be_issued();
41
};
40
};
42
subtest 'Tests for CalcDateDue related to dateexpiry' => sub {
41
subtest 'Tests for CalcDateDue related to dateexpiry' => sub {
43
    plan tests => 5;
42
    plan tests => 4;
44
    calc_date_due();
43
    calc_date_due();
45
};
44
};
46
45
Lines 83-89 sub can_book_be_issued { Link Here
83
82
84
sub calc_date_due {
83
sub calc_date_due {
85
    t::lib::Mocks::mock_preference( 'ReturnBeforeExpiry', 1 );
84
    t::lib::Mocks::mock_preference( 'ReturnBeforeExpiry', 1 );
86
    t::lib::Mocks::mock_preference( 'useDaysMode', 'Days' );
87
85
88
    # this triggers the compare between expiry and due date
86
    # this triggers the compare between expiry and due date
89
87
Lines 118-141 sub calc_date_due { Link Here
118
    $d = C4::Circulation::CalcDateDue( $today, $item->{itype}, $branch->{branchcode}, $patron );
116
    $d = C4::Circulation::CalcDateDue( $today, $item->{itype}, $branch->{branchcode}, $patron );
119
    my $t2 = time;
117
    my $t2 = time;
120
    is( ref $d eq "DateTime" && $t2 - $t1 < 1, 1, "CalcDateDue with expiry in year 9876 in " . sprintf( "%6.4f", $t2 - $t1 ) . " seconds." );
118
    is( ref $d eq "DateTime" && $t2 - $t1 < 1, 1, "CalcDateDue with expiry in year 9876 in " . sprintf( "%6.4f", $t2 - $t1 ) . " seconds." );
121
122
    # fifth test takes account of closed days
123
    $d = C4::Circulation::CalcDateDue( $today, $item->{itype}, $branch->{branchcode}, $patron );
124
    t::lib::Mocks::mock_preference( 'useDaysMode', 'Datedue' );
125
    my $calendar = C4::Calendar->new(branchcode => $branch->{branchcode});
126
    $calendar->insert_single_holiday(
127
        day             => $d->day(),
128
        month           => $d->month(),
129
        year            => $d->year(),
130
        title           =>'holidayTest',
131
        description     => 'holidayDesc'
132
    );
133
    $calendar->delete_holiday(weekday => $d->day_of_week() - 1, day => $d->day()-1, month =>$d->month(), year=>$d->year() );
134
    $d2 = C4::Circulation::CalcDateDue( $today, $item->{itype}, $branch->{branchcode}, $patron );
135
    $d2->add(days => 1);
136
    $d->truncate( to => 'day' );
137
    $d2->truncate( to => 'day' );
138
    is ( DateTime->compare( $d, $d2) == 0, 1, "no problem with closed days");
139
}
119
}
140
120
141
$schema->storage->txn_rollback;
121
$schema->storage->txn_rollback;
142
- 

Return to bug 11580