Jonathan Druart
25848e5af3
* CanItemBeReserved Prior to "Bug 18936: Convert issuingrules fields to circulation_rules", GetHoldRule returned holds_per_record even if no reservesallowed was defined. This change restores this behavior. FIXME Note: In GetHoldRule we return itemtype only if reservesallowed is set, not sure it is correct. * t/db_dependent/Holds/DisallowHoldIfItemsAvailable.t When setting returnbranch, holdallowed and hold_fulfillment_policy, we should not provide categorycode. * t/db_dependent/Holds.t Prefer to keep the existing rules instead of removing them. It got quite hard to understand what was going on here because of the mixup with the rule reservesallowed that was in issuingrules, and the other rules we used for the tests. Also, categorycode should not be passed to set those 3 rules (holdallowed, hold_fulfillment_policy and returnbranch) * t/db_dependent/Circulation.t Setting lengthunit to 'hours', no need to make sure the rule has been correctly be saved * t/db_dependent/Circulation/CalcDateDue.t It uses hardcoded data that is not in the sample data (categorycode=C). Let use K that exists and postpone a refactore of the whole script (to make it create the data it needs). * t/db_dependent/Circulation/ReturnClaims.t * t/db_dependent/Circulation/IssuingRules/maxsuspensiondays.t Simple replace Koha::IssuingRule with Koha::CirculationRules * t/db_dependent/Koha/Charges/Fees.t => FIXME Still failing, stuck here, need help Signed-off-by: Minna Kivinen <minna.kivinen@hamk.fi> Signed-off-by: Joonas Kylmälä <joonas.kylmala@helsinki.fi> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
162 lines
5.2 KiB
Perl
162 lines
5.2 KiB
Perl
use Modern::Perl;
|
|
use Test::More tests => 4;
|
|
|
|
use MARC::Record;
|
|
use MARC::Field;
|
|
use C4::Context;
|
|
|
|
use C4::Circulation qw( AddIssue AddReturn );
|
|
use C4::Items qw( AddItem );
|
|
use C4::Biblio qw( AddBiblio );
|
|
use Koha::Database;
|
|
use Koha::DateUtils;
|
|
use Koha::Patron::Debarments qw( GetDebarments DelDebarment );
|
|
use Koha::Patrons;
|
|
|
|
use t::lib::TestBuilder;
|
|
use t::lib::Mocks;
|
|
|
|
my $schema = Koha::Database->schema;
|
|
$schema->storage->txn_begin;
|
|
my $builder = t::lib::TestBuilder->new;
|
|
my $dbh = C4::Context->dbh;
|
|
$dbh->{RaiseError} = 1;
|
|
|
|
my $branchcode = $builder->build({ source => 'Branch' })->{branchcode};
|
|
my $itemtype = $builder->build({ source => 'Itemtype' })->{itemtype};
|
|
my $patron_category = $builder->build({ source => 'Category' });
|
|
|
|
t::lib::Mocks::mock_userenv({ branchcode => $branchcode });
|
|
|
|
# Test without maxsuspensiondays set
|
|
Koha::CirculationRules->search->delete;
|
|
Koha::CirculationRules->set_rules(
|
|
{
|
|
categorycode => undef,
|
|
itemtype => undef,
|
|
branchcode => undef,
|
|
rules => {
|
|
firstremind => 0,
|
|
finedays => 2,
|
|
lengthunit => 'days',
|
|
suspension_chargeperiod => 1,
|
|
}
|
|
}
|
|
);
|
|
|
|
my $borrowernumber = Koha::Patron->new({
|
|
firstname => 'my firstname',
|
|
surname => 'my surname',
|
|
categorycode => $patron_category->{categorycode},
|
|
branchcode => $branchcode,
|
|
})->store->borrowernumber;
|
|
my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed;
|
|
|
|
my $record = MARC::Record->new();
|
|
$record->append_fields(
|
|
MARC::Field->new('100', ' ', ' ', a => 'My author'),
|
|
MARC::Field->new('245', ' ', ' ', a => 'My title'),
|
|
);
|
|
|
|
my $barcode = 'bc_maxsuspensiondays';
|
|
my ($biblionumber, $biblioitemnumber) = AddBiblio($record, '');
|
|
my (undef, undef, $itemnumber) = AddItem({
|
|
homebranch => $branchcode,
|
|
holdingbranch => $branchcode,
|
|
barcode => $barcode,
|
|
itype => $itemtype
|
|
} , $biblionumber);
|
|
|
|
# clear any holidays to avoid throwing off the suspension day
|
|
# calculations
|
|
$dbh->do('DELETE FROM special_holidays');
|
|
$dbh->do('DELETE FROM repeatable_holidays');
|
|
|
|
my $daysago20 = dt_from_string->add_duration(DateTime::Duration->new(days => -20));
|
|
my $daysafter40 = dt_from_string->add_duration(DateTime::Duration->new(days => 40));
|
|
|
|
AddIssue( $borrower, $barcode, $daysago20 );
|
|
AddReturn( $barcode, $branchcode );
|
|
my $debarments = GetDebarments({borrowernumber => $borrower->{borrowernumber}});
|
|
is(
|
|
$debarments->[0]->{expiration},
|
|
output_pref({ dt => $daysafter40, dateformat => 'iso', dateonly => 1 }),
|
|
'calculate suspension with no maximum set'
|
|
);
|
|
DelDebarment( $debarments->[0]->{borrower_debarment_id} );
|
|
|
|
# Test with maxsuspensiondays = 10 days
|
|
Koha::CirculationRules->set_rules(
|
|
{
|
|
categorycode => undef,
|
|
itemtype => undef,
|
|
branchcode => undef,
|
|
rules => {
|
|
maxsuspensiondays => 10,
|
|
}
|
|
}
|
|
);
|
|
|
|
my $daysafter10 = dt_from_string->add_duration(DateTime::Duration->new(days => 10));
|
|
AddIssue( $borrower, $barcode, $daysago20 );
|
|
AddReturn( $barcode, $branchcode );
|
|
$debarments = GetDebarments({borrowernumber => $borrower->{borrowernumber}});
|
|
is(
|
|
$debarments->[0]->{expiration},
|
|
output_pref({ dt => $daysafter10, dateformat => 'iso', dateonly => 1 }),
|
|
'calculate suspension with a maximum set'
|
|
);
|
|
DelDebarment( $debarments->[0]->{borrower_debarment_id} );
|
|
|
|
subtest "suspension_chargeperiod" => sub {
|
|
Koha::CirculationRules->set_rules(
|
|
{
|
|
categorycode => undef,
|
|
itemtype => undef,
|
|
branchcode => undef,
|
|
rules => {
|
|
firstremind => 0,
|
|
finedays => 7,
|
|
lengthunit => 'days',
|
|
suspension_chargeperiod => 15,
|
|
maxsuspensiondays => 333,
|
|
}
|
|
}
|
|
);
|
|
my $patron = $builder->build_object({ class => 'Koha::Patrons' });
|
|
my $item = $builder->build_sample_item;
|
|
|
|
my $last_year = dt_from_string->clone->subtract( years => 1 );
|
|
my $today = dt_from_string;
|
|
my $new_debar_dt = C4::Circulation::_calculate_new_debar_dt( $patron->unblessed, $item->unblessed, $last_year, $today );
|
|
is( $new_debar_dt->truncate( to => 'day' ),
|
|
$today->clone->add( days => 365 / 15 * 7 )->truncate( to => 'day' ) );
|
|
|
|
};
|
|
|
|
subtest "maxsuspensiondays" => sub {
|
|
Koha::CirculationRules->set_rules(
|
|
{
|
|
categorycode => undef,
|
|
itemtype => undef,
|
|
branchcode => undef,
|
|
rules => {
|
|
firstremind => 0,
|
|
finedays => 15,
|
|
lengthunit => 'days',
|
|
suspension_chargeperiod => 7,
|
|
maxsuspensiondays => 333,
|
|
}
|
|
}
|
|
);
|
|
my $patron = $builder->build_object({ class => 'Koha::Patrons' });
|
|
my $item = $builder->build_sample_item;
|
|
|
|
my $last_year = dt_from_string->clone->subtract( years => 1 );
|
|
my $today = dt_from_string;
|
|
my $new_debar_dt = C4::Circulation::_calculate_new_debar_dt( $patron->unblessed, $item->unblessed, $last_year, $today );
|
|
is( $new_debar_dt->truncate( to => 'day' ),
|
|
$today->clone->add( days => 333 )->truncate( to => 'day' ) );
|
|
};
|
|
|
|
$schema->storage->txn_rollback;
|