use Modern::Perl;
-use Test::More tests => 22;
+use Test::More tests => 23;
use Test::MockModule;
use Test::Warn;
use t::lib::TestBuilder;
+use t::lib::Mocks;
use Koha::Account;
use Koha::Account::Lines;
use Koha::Account::Line;
+use Koha::Account::Offsets;
BEGIN {
use_ok('C4::Accounts');
subtest "More Koha::Account::pay tests" => sub {
- plan tests => 6;
+ plan tests => 8;
# Create a borrower
my $category = $builder->build({ source => 'Category' })->{ categorycode };
# make the full payment
$account->pay({ lines => [$line], amount => $amount, library_id => $branch, note => 'A payment note' });
+ my $offset = Koha::Account::Offsets->search({ debit_id => $accountline->{accountlines_id} })->next();
+ is( $offset->amount(), '-100.000000', 'Offset amount is -100.00' );
+ is( $offset->type(), 'Payment', 'Offset type is Payment' );
+
my $stat = $schema->resultset('Statistic')->search({
branch => $branch,
type => 'payment'
subtest "Even more Koha::Account::pay tests" => sub {
- plan tests => 6;
+ plan tests => 8;
# Create a borrower
my $category = $builder->build({ source => 'Category' })->{ categorycode };
# make the full payment
$account->pay({ lines => [$line], amount => $partialamount, library_id => $branch, note => 'A payment note' });
+ my $offset = Koha::Account::Offsets->search( { debit_id => $accountline->{ accountlines_id } } )->next();
+ is( $offset->amount, '-60.000000', 'Offset amount is -60.00' );
+ is( $offset->type, 'Payment', 'Offset type is payment' );
+
my $stat = $schema->resultset('Statistic')->search({
branch => $branch,
type => 'payment'
$patron->delete;
};
+subtest "Koha::Account::chargelostitem tests" => sub {
+ plan tests => 32;
+
+ my $lostfine;
+ my $procfee;
+
+ my $itype_no_replace_no_fee = $builder->build({ source => 'Itemtype', value => {
+ rentalcharge => 0,
+ defaultreplacecost => undef,
+ processfee => undef,
+ }});
+ my $itype_replace_no_fee = $builder->build({ source => 'Itemtype', value => {
+ rentalcharge => 0,
+ defaultreplacecost => 16.32,
+ processfee => undef,
+ }});
+ my $itype_no_replace_fee = $builder->build({ source => 'Itemtype', value => {
+ rentalcharge => 0,
+ defaultreplacecost => undef,
+ processfee => 8.16,
+ }});
+ my $itype_replace_fee = $builder->build({ source => 'Itemtype', value => {
+ rentalcharge => 0,
+ defaultreplacecost => 4.08,
+ processfee => 2.04,
+ }});
+ my $cli_borrowernumber = $builder->build({ source => 'Borrower' })->{'borrowernumber'};
+ my $cli_itemnumber1 = $builder->build({ source => 'Item', value => { itype => $itype_no_replace_no_fee->{itemtype} } })->{'itemnumber'};
+ my $cli_itemnumber2 = $builder->build({ source => 'Item', value => { itype => $itype_replace_no_fee->{itemtype} } })->{'itemnumber'};
+ my $cli_itemnumber3 = $builder->build({ source => 'Item', value => { itype => $itype_no_replace_fee->{itemtype} } })->{'itemnumber'};
+ my $cli_itemnumber4 = $builder->build({ source => 'Item', value => { itype => $itype_replace_fee->{itemtype} } })->{'itemnumber'};
+ my $duck = Koha::Items->find({itemnumber=>$cli_itemnumber1});
+
+ t::lib::Mocks::mock_preference('item-level_itypes', '1');
+ t::lib::Mocks::mock_preference('useDefaultReplacementCost', '0');
+
+ C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber1, 0, "Perdedor");
+ $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber1, accounttype => 'L' });
+ $procfee = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber1, accounttype => 'PF' });
+ ok( !$lostfine, "No lost fine if no replacementcost or default when pref off");
+ ok( !$procfee, "No processing fee if no processing fee");
+ C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber1, 6.12, "Perdedor");
+ $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber1, accounttype => 'L' });
+ $procfee = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber1, accounttype => 'PF' });
+ ok( $lostfine->amount == 6.12, "Lost fine equals replacementcost when pref off and no default set");
+ ok( !$procfee, "No processing fee if no processing fee");
+ $lostfine->delete();
+
+ C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber2, 0, "Perdedor");
+ $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber2, accounttype => 'L' });
+ $procfee = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber2, accounttype => 'PF' });
+ ok( !$lostfine, "No lost fine if no replacementcost but default set when pref off");
+ ok( !$procfee, "No processing fee if no processing fee");
+ C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber2, 6.12, "Perdedor");
+ $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber2, accounttype => 'L' });
+ $procfee = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber2, accounttype => 'PF' });
+ ok( $lostfine->amount == 6.12 , "Lost fine equals replacementcost when pref off and default set");
+ ok( !$procfee, "No processing fee if no processing fee");
+ $lostfine->delete();
+
+ C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber3, 0, "Perdedor");
+ $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber3, accounttype => 'L' });
+ $procfee = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber3, accounttype => 'PF' });
+ ok( !$lostfine, "No lost fine if no replacementcost and no default set when pref off");
+ ok( $procfee->amount == 8.16, "Processing fee if processing fee");
+ $procfee->delete();
+ C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber3, 6.12, "Perdedor");
+ $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber3, accounttype => 'L' });
+ $procfee = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber3, accounttype => 'PF' });
+ ok( $lostfine->amount == 6.12 , "Lost fine equals replacementcost when pref off and no default set");
+ ok( $procfee->amount == 8.16, "Processing fee if processing fee");
+ $lostfine->delete();
+ $procfee->delete();
+
+ C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber4, 0, "Perdedor");
+ $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber4, accounttype => 'L' });
+ $procfee = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber4, accounttype => 'PF' });
+ ok( !$lostfine, "No lost fine if no replacementcost but default set when pref off");
+ ok( $procfee->amount == 2.04, "Processing fee if processing fee");
+ $procfee->delete();
+ C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber4, 6.12, "Perdedor");
+ $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber4, accounttype => 'L' });
+ $procfee = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber4, accounttype => 'PF' });
+ ok( $lostfine->amount == 6.12 , "Lost fine equals replacementcost when pref off and default set");
+ ok( $procfee->amount == 2.04, "Processing fee if processing fee");
+ $lostfine->delete();
+ $procfee->delete();
+
+ t::lib::Mocks::mock_preference('useDefaultReplacementCost', '1');
+
+ C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber1, 0, "Perdedor");
+ $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber1, accounttype => 'L' });
+ $procfee = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber1, accounttype => 'PF' });
+ ok( !$lostfine, "No lost fine if no replacementcost or default when pref on");
+ ok( !$procfee, "No processing fee if no processing fee");
+ C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber1, 6.12, "Perdedor");
+ $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber1, accounttype => 'L' });
+ $procfee = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber1, accounttype => 'PF' });
+ is( $lostfine->amount, "6.120000", "Lost fine equals replacementcost when pref on and no default set");
+ ok( !$procfee, "No processing fee if no processing fee");
+
+ C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber2, 0, "Perdedor");
+ $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber2, accounttype => 'L' });
+ $procfee = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber2, accounttype => 'PF' });
+ is( $lostfine->amount(), "16.320000", "Lost fine is default if no replacementcost but default set when pref on");
+ ok( !$procfee, "No processing fee if no processing fee");
+ $lostfine->delete();
+ C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber2, 6.12, "Perdedor");
+ $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber2, accounttype => 'L' });
+ $procfee = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber2, accounttype => 'PF' });
+ is( $lostfine->amount, "6.120000" , "Lost fine equals replacementcost when pref on and default set");
+ ok( !$procfee, "No processing fee if no processing fee");
+
+ C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber3, 0, "Perdedor");
+ $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber3, accounttype => 'L' });
+ $procfee = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber3, accounttype => 'PF' });
+ ok( !$lostfine, "No lost fine if no replacementcost and default not set when pref on");
+ is( $procfee->amount, "8.160000", "Processing fee if processing fee");
+ $procfee->delete();
+ C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber3, 6.12, "Perdedor");
+ $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber3, accounttype => 'L' });
+ $procfee = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber3, accounttype => 'PF' });
+ is( $lostfine->amount, "6.120000", "Lost fine equals replacementcost when pref on and no default set");
+ is( $procfee->amount, "8.160000", "Processing fee if processing fee");
+
+ C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber4, 0, "Perdedor");
+ $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber4, accounttype => 'L' });
+ $procfee = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber4, accounttype => 'PF' });
+ is( $lostfine->amount, "4.080000", "Lost fine is default if no replacementcost but default set when pref on");
+ is( $procfee->amount, "2.040000", "Processing fee if processing fee");
+ $lostfine->delete();
+ $procfee->delete();
+ C4::Accounts::chargelostitem( $cli_borrowernumber, $cli_itemnumber4, 6.12, "Perdedor");
+ $lostfine = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber4, accounttype => 'L' });
+ $procfee = Koha::Account::Lines->find({ borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber4, accounttype => 'PF' });
+ is( $lostfine->amount, "6.120000", "Lost fine equals replacementcost when pref on and default set");
+ is( $procfee->amount, "2.040000", "Processing fee if processing fee");
+};
+
+1;