BEGIN {
if ( check_install( module => 'Test::DBIx::Class' ) ) {
- plan tests => 17;
+ plan tests => 16;
} else {
plan skip_all => "Need Test::DBIx::Class"
}
}
use_ok('C4::Acquisition');
-use_ok('C4::Bookseller');
use_ok('C4::Context');
use_ok('Koha::Number::Price');
t::lib::Mocks::mock_preference( 'gist', '0.02|0.05|0.196' );
-use Test::DBIx::Class {
- schema_class => 'Koha::Schema',
- connect_info => ['dbi:SQLite:dbname=:memory:','',''],
- connect_opts => { name_sep => '.', quote_char => '`', },
- fixture_class => '::Populate',
-}, 'Currency' ;
+use Test::DBIx::Class;
my $db = Test::MockModule->new('Koha::Database');
$db->mock( _new_schema => sub { return Schema(); } );
+Koha::Database::flush_schema_cache();
fixtures_ok [
Currency => [
[ qw/ currency symbol rate active / ],
- [[ 'my_cur', '€', 1, 1, ]],
+ [ 'my_cur', '€', 1, 1, ],
+ ],
+ Aqbookseller => [
+ [ qw/ id name listincgst invoiceincgst / ],
+ [ 1, '0 0', 0, 0 ],
+ [ 2, '0 1', 0, 1 ],
+ [ 3, '1 0', 1, 0 ],
+ [ 4, '1 1', 1, 1 ],
],
], 'add currency fixtures';
my $bookseller_module = Test::MockModule->new('Koha::Acquisition::Bookseller');
-my ( $basketno_0_0, $basketno_1_1, $basketno_1_0, $basketno_0_1 );
-my ( $invoiceid_0_0, $invoiceid_1_1, $invoiceid_1_0, $invoiceid_0_1 );
+my ( $basketno_0_0, $basketno_1_1 );
+my ( $invoiceid_0_0, $invoiceid_1_1 );
my $today;
for my $currency_format ( qw( US FR ) ) {
t::lib::Mocks::mock_preference( 'CurrencyFormat', $currency_format );
- subtest 'Configuration 1: 0 0' => sub {
+ subtest 'Configuration 1: 0 0 (Vendor List prices do not include tax / Invoice prices do not include tax)' => sub {
plan tests => 8;
- $bookseller_module->mock(
- 'fetch',
- sub {
- return { listincgst => 0, invoiceincgst => 0 };
- }
- );
my $biblionumber_0_0 = 42;
my $order_0_0 = {
biblionumber => $biblionumber_0_0,
quantity => 2,
- listprice => 82.000000,
- unitprice => 73.80000,
+ listprice => 82,
+ unitprice => 73.80,
quantityreceived => 2,
basketno => $basketno_0_0,
invoiceid => $invoiceid_0_0,
rrp => 82.00,
ecost => 73.80,
tax_rate => 0.0500,
- discount => 10.0000,
+ discount => 10,
datereceived => $today
};
$order_0_0 = C4::Acquisition::populate_order_with_prices(
{
order => $order_0_0,
- booksellerid => 'just_something',
+ booksellerid => 1,
ordering => 1,
}
);
);
compare(
{
- got => $order_0_0->{tax_value},
+ got => $order_0_0->{tax_value_on_ordering},
expected => 7.38,
conf => '0 0',
field => 'tax_value'
$order_0_0 = C4::Acquisition::populate_order_with_prices(
{
order => $order_0_0,
- booksellerid => 'just_something',
+ booksellerid => 1,
receiving => 1,
}
);
);
compare(
{
- got => $order_0_0->{tax_value},
+ got => $order_0_0->{tax_value_on_receiving},
expected => 7.38,
conf => '0 0',
field => 'tax_value'
);
};
- subtest 'Configuration 1: 1 1' => sub {
- plan tests => 8;
- $bookseller_module->mock(
- 'fetch',
- sub {
- return { listincgst => 1, invoiceincgst => 1 };
- }
- );
+ subtest 'Configuration 1: 1 1 (Vendor List prices do include tax / Invoice prices include tax)' => sub {
+ plan tests => 11;
my $biblionumber_1_1 = 43;
my $order_1_1 = {
biblionumber => $biblionumber_1_1,
quantity => 2,
- listprice => 82.000000,
- unitprice => 73.800000,
+ listprice => 82,
+ unitprice => 73.80,
quantityreceived => 2,
basketno => $basketno_1_1,
invoiceid => $invoiceid_1_1,
rrp => 82.00,
ecost => 73.80,
tax_rate => 0.0500,
- discount => 10.0000,
+ discount => 10,
datereceived => $today
};
$order_1_1 = C4::Acquisition::populate_order_with_prices(
{
order => $order_1_1,
- booksellerid => 'just_something',
+ booksellerid => 4,
ordering => 1,
}
);
);
compare(
{
- got => $order_1_1->{tax_value},
+ got => $order_1_1->{tax_value_on_ordering},
expected => 7.03,
conf => '1 1',
field => 'tax_value'
$order_1_1 = C4::Acquisition::populate_order_with_prices(
{
order => $order_1_1,
- booksellerid => 'just_something',
+ booksellerid => 4,
receiving => 1,
}
);
);
compare(
{
- got => $order_1_1->{tax_value},
+ got => $order_1_1->{tax_value_on_receiving},
expected => 7.03,
conf => '1 1',
field => 'tax_value'
}
);
- };
- subtest 'Configuration 1: 1 0' => sub {
- plan tests => 8;
- $bookseller_module->mock(
- 'fetch',
- sub {
- return { listincgst => 1, invoiceincgst => 0 };
+ # When unitprice is 0.00 C4::Acquisition->populate_order_with_prices() falls back to using ecost_tax_included and ecost_tax_excluded
+ $order_1_1 = {
+ biblionumber => $biblionumber_1_1,
+ quantity => 1,
+ listprice => 10,
+ unitprice => '0.00',
+ quantityreceived => 1,
+ basketno => $basketno_1_1,
+ invoiceid => $invoiceid_1_1,
+ rrp => 10.00,
+ ecost => 10.00,
+ tax_rate => 0.1500,
+ discount => 0,
+ datereceived => $today
+ };
+
+ $order_1_1 = C4::Acquisition::populate_order_with_prices(
+ {
+ order => $order_1_1,
+ booksellerid => 4,
+ ordering => 1,
}
);
+ compare(
+ {
+ got => $order_1_1->{ecost_tax_included},
+ expected => 10.00,
+ conf => '1 1',
+ field => 'ecost_tax_included'
+ }
+ );
+ compare(
+ {
+ got => $order_1_1->{ecost_tax_excluded},
+ expected => 8.70,
+ conf => '1 1',
+ field => 'ecost_tax_excluded'
+ }
+ );
+ compare(
+ {
+ got => $order_1_1->{tax_value_on_ordering},
+ expected => 1.30,
+ conf => '1 1',
+ field => 'tax_value'
+ }
+ );
+ };
+
+ subtest 'Configuration 1: 1 0 (Vendor List prices include tax / Invoice prices do not include tax)' => sub {
+ plan tests => 9;
+
my $biblionumber_1_0 = 44;
my $order_1_0 = {
biblionumber => $biblionumber_1_0,
quantity => 2,
- listprice => 82.000000,
- unitprice => 70.290000,
+ listprice => 82,
+ unitprice => 0,
quantityreceived => 2,
basketno => $basketno_1_1,
invoiceid => $invoiceid_1_1,
rrp => 82.00,
ecost => 73.80,
tax_rate => 0.0500,
- discount => 10.0000,
+ discount => 10,
datereceived => $today
};
$order_1_0 = C4::Acquisition::populate_order_with_prices(
{
order => $order_1_0,
- booksellerid => 'just_something',
+ booksellerid => 3,
ordering => 1,
}
);
field => 'ecost_tax_excluded'
}
);
+ # If we order with unitprice = 0, tax is calculated from the ecost
+ # (note that in addorder.pl and addorderiso2709 the unitprice may/will be set to the ecost
compare(
{
- got => $order_1_0->{tax_value},
+ got => $order_1_0->{tax_value_on_ordering},
expected => 7.03,
conf => '1 0',
field => 'tax_value'
}
);
+ $order_1_0->{unitprice} = 70.29;
+ $order_1_0 = C4::Acquisition::populate_order_with_prices(
+ {
+ order => $order_1_0,
+ booksellerid => 3,
+ ordering => 1,
+ }
+ );
+ # If a unitprice is provided at ordering, we calculate the tax from that
+ compare(
+ {
+ got => $order_1_0->{tax_value_on_ordering},
+ expected => 6.69,
+ conf => '1 0',
+ field => 'tax_value'
+ }
+ );
$order_1_0 = C4::Acquisition::populate_order_with_prices(
{
order => $order_1_0,
- booksellerid => 'just_something',
+ booksellerid => 3,
receiving => 1,
}
);
);
compare(
{
- got => $order_1_0->{tax_value},
+ got => $order_1_0->{tax_value_on_receiving},
expected => 7.03,
conf => '1 0',
field => 'tax_value'
);
};
- subtest 'Configuration 1: 0 1' => sub {
- plan tests => 8;
- $bookseller_module->mock(
- 'fetch',
- sub {
- return { listincgst => 0, invoiceincgst => 1 };
- }
- );
+ subtest 'Configuration 1: 0 1 (Vendor List prices do not include tax / Invoice prices include tax)' => sub {
+ plan tests => 9;
my $biblionumber_0_1 = 45;
my $order_0_1 = {
biblionumber => $biblionumber_0_1,
quantity => 2,
- listprice => 82.000000,
- unitprice => 77.490000,
+ listprice => 82,
+ unitprice => 0,
quantityreceived => 2,
basketno => $basketno_1_1,
invoiceid => $invoiceid_1_1,
rrp => 82.00,
ecost => 73.80,
tax_rate => 0.0500,
- discount => 10.0000,
+ discount => 10,
datereceived => $today
};
$order_0_1 = C4::Acquisition::populate_order_with_prices(
{
order => $order_0_1,
- booksellerid => 'just_something',
+ booksellerid => 2,
ordering => 1,
}
);
field => 'ecost_tax_excluded'
}
);
+ # If we order with unitprice = 0, tax is calculated from the ecost
+ # (note that in addorder.pl and addorderiso2709 the unitprice may/will be set to the ecost
compare(
{
- got => $order_0_1->{tax_value},
+ got => $order_0_1->{tax_value_on_ordering},
expected => 7.38,
conf => '0 1',
field => 'tax_value'
}
);
-
+ $order_0_1->{unitprice} = 77.490000;
$order_0_1 = C4::Acquisition::populate_order_with_prices(
{
order => $order_0_1,
- booksellerid => 'just_something',
+ booksellerid => 2,
+ ordering => 1,
+ }
+ );
+ # If a unitprice is provided at ordering, we calculate the tax from that
+ compare(
+ {
+ got => $order_0_1->{tax_value_on_ordering},
+ expected => 7.75,
+ conf => '0 1',
+ field => 'tax_value'
+ }
+ );
+ $order_0_1 = C4::Acquisition::populate_order_with_prices(
+ {
+ order => $order_0_1,
+ booksellerid => 2,
receiving => 1,
}
);
);
compare(
{
- got => $order_0_1->{tax_value},
+ got => $order_0_1->{tax_value_on_receiving},
expected => 7.38,
conf => '0 1',
field => 'tax_value'
}
);
};
+
}
sub compare {