X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=t%2Fdatev%2Fdatev_format_2018.t;h=d97c329982f46b2df89fc05c3e94c666e48ab00f;hb=606510ade9fe97cb9ca64878f1ed19326e65c50c;hp=4ab1b8dbc026e1a52a46d10c690e0cc82e67cd6b;hpb=0ad87689526defc4e51d33b4768158a26c6945dd;p=kivitendo-erp.git diff --git a/t/datev/datev_format_2018.t b/t/datev/datev_format_2018.t index 4ab1b8dbc..d97c32998 100644 --- a/t/datev/datev_format_2018.t +++ b/t/datev/datev_format_2018.t @@ -19,11 +19,15 @@ Support::TestSetup::login(); my $dbh = SL::DB->client->dbh; clear_up(); + +my $d = SL::DB::Default->get; +$d->update_attributes(datev_export_format => 'cp1252'); + my $buchungsgruppe7 = SL::DB::Manager::Buchungsgruppe->find_by(description => 'Standard 7%') || die "No accounting group for 7\%"; my $date = DateTime->new(year => 2017, month => 7, day => 19); my $department = create_department(description => 'Kästchenweiße heiße Preise'); my $project = create_project(projectnumber => 2017, description => '299'); - +my $customer = new_customer(name => 'Test customer', ustid => 'DE12345678')->save(); my $part1 = new_part(partnumber => '19', description => 'Part 19%')->save; my $part2 = new_part( partnumber => '7', @@ -42,6 +46,7 @@ my $invoice = create_sales_invoice( ], department_id => $department->id, globalproject_id => $project->id, + customer_id => $customer->id, ); # lets make a boom @@ -68,18 +73,18 @@ $datev1->generate_datev_lines; # check conversion to csv $datev1->from($startdate); $datev1->to($enddate); -my ($datev_ref, $warnings_ref, $die_message); +my ($datev_csv, $die_message); eval { - ($datev_ref, $warnings_ref) = SL::DATEV::CSV->new(datev_lines => $datev1->generate_datev_lines, - from => $startdate, - to => $enddate, - locked => $datev1->locked, - ); + $datev_csv = SL::DATEV::CSV->new(datev_lines => $datev1->generate_datev_lines, + from => $startdate, + to => $enddate, + locked => $datev1->locked, + ); + my $lines_aref = $datev_csv->lines; # dies only if we assign (do stuff with the data) 1; } or do { $die_message = $@; }; - ok($die_message =~ m/Falscher Feldwert 'ݗݘݰݶ' für Feld 'belegfeld1' bei der Transaktion mit dem Umsatz von/, 'wrong_encoding'); @@ -95,13 +100,15 @@ $datev3->from($startdate); $datev3->to($enddate); $datev3->generate_datev_data; $datev3->generate_datev_lines; -my ($datev_ref2, $warnings_ref2, $die_message2); +my ($datev_csv2, $die_message2); eval { - ($datev_ref2, $warnings_ref2) = SL::DATEV::CSV->new(datev_lines => $datev3->generate_datev_lines, - from => $startdate, - to => $enddate, - locked => $datev3->locked, - ); + $datev_csv2 = SL::DATEV::CSV->new(datev_lines => $datev3->generate_datev_lines, + from => $startdate, + to => $enddate, + locked => $datev3->locked, + ); +my $lines_aref = $datev_csv2->lines; # dies only if we assign (do stuff with the data) + 1; } or do { $die_message2 = $@; @@ -110,58 +117,94 @@ eval { # redefine invnumber, we have mixed encodings, should still fail ok($die_message2 =~ m/Falscher Feldwert 'ݗݘݰݶmuh' für Feld 'belegfeld1' bei der Transaktion mit dem Umsatz von/, 'mixed_wrong_encoding'); +# check with good number +$invoice->invnumber('meine muh'); +$invoice->save(); + +my $datev4 = SL::DATEV->new( + dbh => $dbh, + trans_id => $invoice->id, +); + +$datev4->from($startdate); +$datev4->to($enddate); +$datev4->generate_datev_data; +$datev4->generate_datev_lines; + +my ($datev_csv4, $die_message3, $lines_aref); +eval { + $datev_csv4 = SL::DATEV::CSV->new(datev_lines => $datev4->generate_datev_lines, + from => $startdate, + to => $enddate, + locked => $datev4->locked, + ); + $lines_aref = $datev_csv4->lines; # dies only if we assign (do stuff with the data) + + 1; +} or do { + $die_message3 = $@; +}; +ok(!($die_message3), 'no die message'); +ok(scalar @{ $datev_csv4->warnings } == 0, 'no warnings'); + +my @sorted = sort { $a->[0] cmp $b->[0] } @{ $lines_aref }; +cmp_deeply $sorted[0], [ '1963,5', 'S', 'EUR', '', '', '', + '1400', '8400', '', '1907', 'meine muh', + '', '', 'Test customer', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', "K\x{e4}stchen", + '299', '','DE12345678', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '1', '', + '', '', '', '', '', + ]; +cmp_deeply $sorted[1], [ '535', 'S', 'EUR', '', '', '', + '1400', '8300', '', '1907','meine muh', + '', '', 'Test customer', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', "K\x{e4}stchen", + '299', '','DE12345678', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '1', '', + '', '', '', '', '', + ]; # create one haben buchung with GLTransaction today my $expense_chart = SL::DB::Manager::Chart->find_by(accno => '4660'); # Reisekosten my $cash_chart = SL::DB::Manager::Chart->find_by(accno => '1000'); # Kasse -my $tax_chart = SL::DB::Manager::Chart->find_by(accno => '1576'); # Vorsteuer -my $tax_9 = SL::DB::Manager::Tax->find_by(taxkey => 9, rate => 0.19) || die "No tax"; - -my @acc_trans; -push(@acc_trans, SL::DB::AccTransaction->new( - chart_id => $expense_chart->id, - chart_link => $expense_chart->link, - amount => -84.03, - transdate => $today, - source => '', - taxkey => 9, - tax_id => $tax_9->id, - project_id => $project->id, -)); -push(@acc_trans, SL::DB::AccTransaction->new( - chart_id => $tax_chart->id, - chart_link => $tax_chart->link, - amount => -15.97, - transdate => $today, - source => '', - taxkey => 9, - tax_id => $tax_9->id, - project_id => $project->id, -)); -push(@acc_trans, SL::DB::AccTransaction->new( - chart_id => $cash_chart->id, - chart_link => $cash_chart->link, - amount => 100, - transdate => $today, - source => '', - taxkey => 0, - tax_id => 0, -)); - -my $gl_transaction = SL::DB::GLTransaction->new( + +my $gl_transaction = create_gl_transaction( reference => "Reise März 2018", description => "Reisekonsten März 2018 / Ma Schmidt", transdate => $today, - gldate => $today, - employee_id => SL::DB::Manager::Employee->current->id, taxincluded => 1, type => undef, - ob_transaction => 0, - cb_transaction => 0, - storno => 0, - storno_id => undef, - transactions => \@acc_trans, -)->save; + bookings => [ + { + chart => $expense_chart, + taxkey => 9, + debit => 100, # net 84.03 + }, + { + chart => $cash_chart, + taxkey => 0, + credit => 100, + }, + ], +); + my $datev2 = SL::DATEV->new( dbh => $dbh, trans_id => $gl_transaction->id, @@ -170,18 +213,16 @@ my $datev2 = SL::DATEV->new( $datev2->from($startdate); $datev2->to($enddate); $datev2->generate_datev_data; -$datev2->generate_datev_lines; -my ($datev_ref3, $warnings_ref3) = SL::DATEV::CSV->new(datev_lines => $datev2->generate_datev_lines, - from => $startdate, - to => $enddate, - locked => $datev2->locked, - ); +my $datev_csv3 = SL::DATEV::CSV->new(datev_lines => $datev2->generate_datev_lines, + from => $startdate, + to => $enddate, + locked => $datev2->locked, + ); -my @data_csv = splice @{ $datev_ref3 }, 2, 5; -@data_csv = sort { $a->[0] cmp $b->[0] } @data_csv; -cmp_deeply($data_csv[0], [ 100, 'H', 'EUR', '', '', '', '4660', '1000', 9, '1703', 'Reise März 2', - '', '', '', '', '', '', '', '', '', '', '', +my @data_csv = sort { $a->[0] cmp $b->[0] } @{ $datev_csv3->lines }; +cmp_deeply($data_csv[0], [ '100', 'S', 'EUR', '', '', '', '4660', '1000', 9, '1703', 'Reise März 2', + '', '', 'Reisekonsten März 2018 / Ma Schmidt', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', @@ -189,9 +230,14 @@ cmp_deeply($data_csv[0], [ 100, 'H', 'EUR', '', '', '', '4660', '1000', 9, '1703 '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', - '', '', '', '', '' ] + '', '', '1', '', '', '', '', '', '', ] ); +# TODO warnings are not yet tested +# currently most of the valid_checks are senseless because of +# the strict input_checks before. Maybe something like encoding mismatch of invnumber, +# can be altered to just a warning (not a mandantory field!) + done_testing(); clear_up();