package main;
-use Test::More tests => 80;
+use Test::More tests => 56;
use lib 't';
use strict;
use Carp;
use Support::TestSetup;
+use SL::Dev::ALL qw(:ALL);
use_ok 'SL::BackgroundJob::CreatePeriodicInvoices';
use_ok 'SL::DB::Chart';
Support::TestSetup::login();
-our ($ar_chart, $buchungsgruppe, $currency_id, $customer, $employee, $order, $part, $tax_zone, $unit, @invoices);
+our ($ar_chart, $customer, $order, $part, $unit, @invoices);
sub init_common_state {
- $ar_chart = SL::DB::Manager::Chart->find_by(accno => '1400') || croak "No AR chart";
- $buchungsgruppe = SL::DB::Manager::Buchungsgruppe->find_by(description => 'Standard 19%') || croak "No accounting group";
- $currency_id = SL::DB::Default->get->currency_id;
- $employee = SL::DB::Manager::Employee->current || croak "No employee";
- $tax_zone = SL::DB::Manager::TaxZone->find_by( description => 'Inland') || croak "No taxzone";
- $unit = SL::DB::Manager::Unit->find_by(name => 'psch') || croak "No unit";
+ $ar_chart = SL::DB::Manager::Chart->find_by(accno => '1400') || croak "No AR chart";
+ $unit = SL::DB::Manager::Unit->find_by(name => 'psch') || croak "No unit";
}
+sub clear_up {
+ "SL::DB::Manager::${_}"->delete_all(all => 1) for qw(InvoiceItem Invoice OrderItem Order Customer Part);
+};
+
sub create_invoices {
my %params = @_;
$params{$_} ||= {} for qw(customer part tax order orderitem periodic_invoices_config);
# Clean up: remove invoices, orders, parts and customers
- "SL::DB::Manager::${_}"->delete_all(all => 1) for qw(InvoiceItem Invoice OrderItem Order Customer Part);
+ clear_up();
- $customer = SL::DB::Customer->new(
- name => 'Test Customer',
- currency_id => $currency_id,
- taxzone_id => $tax_zone->id,
+ $customer = new_customer(
+ name => 'Test Customer',
%{ $params{customer} }
)->save;
- $part = SL::DB::Part->new(
- partnumber => 'T4254',
- description => 'Fourty-two fifty-four',
- lastcost => 222.22,
- sellprice => 333.33,
- buchungsgruppen_id => $buchungsgruppe->id,
- unit => $unit->name,
+ $part = new_part(
+ partnumber => 'T4254',
+ description => 'Fourty-two fifty-four',
+ lastcost => 222.22,
+ sellprice => 333.33,
+ unit => $unit->name,
%{ $params{part} }
)->save;
- $part->load;
- $order = SL::DB::Order->new(
- customer_id => $customer->id,
- currency_id => $currency_id,
- taxzone_id => $tax_zone->id,
+ $order = create_sales_order(
+ save => 1,
+ customer => $customer,
transaction_description => '<%period_start_date%>',
orderitems => [
- { parts_id => $part->id,
- description => $part->description,
- lastcost => $part->lastcost,
- sellprice => $part->sellprice,
- qty => 1,
- unit => $unit->name,
+ SL::Dev::Record::create_order_item(
+ part => $part,
+ qty => 1,
+ unit => $unit->name,
%{ $params{orderitem} },
- },
+ ),
],
periodic_invoices_config => {
active => 1,
%{ $params{order} },
);
- $order->calculate_prices_and_taxes;
-
- ok($order->save(cascade => 1));
-
SL::BackgroundJob::CreatePeriodicInvoices->new->run(SL::DB::BackgroundJob->new);
@invoices = @{ SL::DB::Manager::Invoice->get_all(sort_by => [ qw(id) ]) };
create_invoices(periodic_invoices_config => { periodicity => 'y', order_value_periodicity => '5', start_date => DateTime->from_kivitendo('01.01.2009') });
are_invoices 'p=y ovp=5',[ '01.01.2009', 66.67 ], [ '01.01.2010', 66.67 ], [ '01.01.2011', 66.67 ], [ '01.01.2012', 66.67 ], [ '01.01.2013', 66.65 ], [ '01.01.2014', 66.67 ];
+clear_up();
+
done_testing();