X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=t%2Fdatev%2Fdatev_format_2018.t;h=a829d909e7c454e5ef1f0a7ea6714b2617a0c18f;hb=61e8db07e94535c4aabe8f10d312f3a8c58040c3;hp=958f7bd825a0e5969006f62a39a8989f6336bf7d;hpb=1d559eff1e8a7efba3d21704d93b8cb62749de75;p=kivitendo-erp.git diff --git a/t/datev/datev_format_2018.t b/t/datev/datev_format_2018.t index 958f7bd82..a829d909e 100644 --- a/t/datev/datev_format_2018.t +++ b/t/datev/datev_format_2018.t @@ -1,6 +1,6 @@ use strict; use Test::More; -use Test::Deep qw(cmp_bag); +use Test::Deep qw(cmp_deeply); use lib 't'; @@ -23,7 +23,7 @@ my $buchungsgruppe7 = SL::DB::Manager::Buchungsgruppe->find_by(description => 'S 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 +42,7 @@ my $invoice = create_sales_invoice( ], department_id => $department->id, globalproject_id => $project->id, + customer_id => $customer->id, ); # lets make a boom @@ -68,17 +69,21 @@ $datev1->generate_datev_lines; # check conversion to csv $datev1->from($startdate); $datev1->to($enddate); -my ($datev_ref, $warnings_ref) = SL::DATEV::CSV->new(datev_lines => $datev1->generate_datev_lines, - from => $startdate, - to => $enddate, - locked => $datev1->locked, - ); -my @warnings = $warnings_ref; -is($warnings[0]->[0]->{untranslated}, - 'Wrong field value \'#1\' for field \'#2\' for the transaction with amount \'#3\'', 'wrong_encoding'); +my ($datev_csv, $die_message); +eval { + $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'); -# redefine invnumber, we have mixed encodings, should still generate a warning $invoice->invnumber('ݗݘݰݶmuh'); $invoice->save(); @@ -91,21 +96,85 @@ $datev3->from($startdate); $datev3->to($enddate); $datev3->generate_datev_data; $datev3->generate_datev_lines; -my ($datev_ref2, $warnings_ref2) = SL::DATEV::CSV->new(datev_lines => $datev3->generate_datev_lines, - from => $startdate, - to => $enddate, - locked => $datev3->locked, - ); - - +my ($datev_csv2, $die_message2); +eval { + $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 = $@; +}; -@warnings = []; -@warnings = $warnings_ref2; -is($warnings[0]->[0]->{untranslated}, - 'Wrong field value \'#1\' for field \'#2\' for the transaction with amount \'#3\'', 'mixed_wrong_encoding'); +# 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', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', + ]; +cmp_deeply $sorted[1], [ '535', 'S', 'EUR', '', '', '', + '1400', '8300', '', '1907','meine muh', + '', '', 'Test customer', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', "K\x{e4}stchen", + '299', '','DE12345678', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', + '', + ]; # create one haben buchung with GLTransaction today my $expense_chart = SL::DB::Manager::Chart->find_by(accno => '4660'); # Reisekosten @@ -145,7 +214,7 @@ push(@acc_trans, SL::DB::AccTransaction->new( )); my $gl_transaction = SL::DB::GLTransaction->new( - reference => "Reisekosten März 2018", + reference => "Reise März 2018", description => "Reisekonsten März 2018 / Ma Schmidt", transdate => $today, gldate => $today, @@ -168,28 +237,30 @@ $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 @data_csv = splice @{ $datev_ref3 }, 2, 5; -@data_csv = sort { $a->[0] cmp $b->[0] } @data_csv; - -my $cp1252_posting_text = SL::Iconv::convert("UTF-8", "CP1252", 'Reisekosten März 2018'); -cmp_bag($data_csv[0], [ 100, 'H', 'EUR', undef, undef, undef, '4660', '1000', 9, '1703', 'Reisekosten ', - undef, undef, $cp1252_posting_text, undef, undef, undef, undef, undef, undef, undef, undef, - undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, - undef, undef, '', undef, undef, undef, undef, undef, undef, undef, undef, - undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, - undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, - undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, - undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, - undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, - undef, undef, undef, undef, undef ] +my $datev_csv3 = SL::DATEV::CSV->new(datev_lines => $datev2->generate_datev_lines, + from => $startdate, + to => $enddate, + locked => $datev2->locked, + ); + +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', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '' ] ); +# 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();