X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDATEV.pm;h=c83112feac8a46affab33e50b53a193f8132b648;hb=319c72e8738bbbfd457ae33dafd03ab8d5203a12;hp=c202e05e28ac1fd7fb9bfea05f77edaf1fc1f0c3;hpb=d319704a66e9be64da837ccea10af6774c2b0838;p=kivitendo-erp.git diff --git a/SL/DATEV.pm b/SL/DATEV.pm index c202e05e2..c83112fea 100644 --- a/SL/DATEV.pm +++ b/SL/DATEV.pm @@ -83,17 +83,17 @@ sub kne_export { $main::lxdebug->enter_sub(); my ($self, $myconfig, $form) = @_; - my $rc; + my @rc; if ($form->{exporttype} == 0) { - $rc = &kne_buchungsexport($myconfig, $form); + @rc = &kne_buchungsexport($myconfig, $form); } else { - $rc = &kne_stammdatenexport($myconfig, $form); + @rc = &kne_stammdatenexport($myconfig, $form); } $main::lxdebug->leave_sub(); - return $rc; + return @rc; } sub obe_export { @@ -256,10 +256,16 @@ sub get_transactions { $sth->execute || $form->dberror($query); $i = 0; $g = 0; + my $counter = 0; @splits; while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { $count = 0; $firstrun = 1; + $counter++; + if (($counter % 500) == 0) { + print("$counter "); + } + $count += $ref->{amount}; push @{$i}, $ref; while (abs($count) > 0.01 || $firstrun) { @@ -308,16 +314,12 @@ sub get_transactions { $blubb{'amount'} = $form->round_amount(($i->[$j]->{'amount'} * $test * -1), 2); - #print(STDERR $test, " Taxrate\n\n"); $blubb{'umsatz'} = abs($form->round_amount(($i->[$j]->{'amount'} * $test), 2)) * $ml; $i->[$j]->{'umsatz'} = abs($form->round_amount(($i->[$j]->{'amount'} * $test), 2)) * $ml; - #print(STDERR $i->[$j]->{'umsatz'}, " Steuer Umsatz\n"); - #print(STDERR $i->[$j]->{'amount'}, " Steuer Betrag\n"); - #print(STDERR $blubb{'umsatz'}, " Umsatz NOTSPLIT\n"); push @{ $splits[$g] }, \%blubb; push @{ $splits[$g] }, $i->[$j]; push @{ $form->{DATEV} }, \@{ $splits[$g] }; @@ -327,8 +329,7 @@ sub get_transactions { } } if (abs($absumsatz) > 0.01) { - print(STDERR $absumsatz, "ABSAUMSATZ\n"); - $form->error("Datev-Export fehlgeschlagen!"); + $form->error("Datev-Export fehlgeschlagen! Bei Transaktion $i->[0]->{trans_id}\n"); } } else { push @{ $form->{DATEV} }, \@{$i}; @@ -390,7 +391,7 @@ sub make_kne_data_header { $to =~ s/ //g; if ($from ne "") { - my ($fday, $fmonth, $fyear) = split /\./, $from; + my ($fday, $fmonth, $fyear) = split(/\./, $from); if (length($fmonth) < 2) { $fmonth = "0" . $fmonth; } @@ -405,7 +406,7 @@ sub make_kne_data_header { $header .= $from; if ($to ne "") { - my ($tday, $tmonth, $tyear) = split /\./, $to; + my ($tday, $tmonth, $tyear) = split(/\./, $to); if (length($tmonth) < 2) { $tmonth = "0" . $tmonth; } @@ -469,7 +470,7 @@ sub datetofour { my ($date, $six) = @_; - ($day, $month, $year) = split /\./, $date; + ($day, $month, $year) = split(/\./, $date); if ($day =~ /^0/) { $day = substr($day, 1, 1); @@ -498,7 +499,7 @@ sub formatumsatz { my ($umsatz, $stellen) = @_; $umsatz =~ s/-//; - ($vorkomma, $nachkomma) = split /\./, $umsatz; + ($vorkomma, $nachkomma) = split(/\./, $umsatz); $umsatz = ""; if ($stellen > 0) { for ($i = $stellen; $i >= $stellen + 2 - length($vorkomma); $i--) { @@ -582,18 +583,28 @@ sub kne_buchungsexport { my ($myconfig, $form) = @_; - my $export_path = "datev/"; + my @filenames; + + my $export_path = $main::userspath . "/"; my $filename = "ED00000"; my $evfile = "EV01"; my @ed_versionsets; my $fileno = 0; + $form->header; + print qq| + + Export in Bearbeitung
+ Buchungssätze verarbeitet: +|; + $fromto = &get_dates($form->{zeitraum}, $form->{monat}, $form->{quartal}, $form->{transdatefrom}, $form->{transdateto}); &get_transactions($myconfig, $form, $fromto); - + my $counter = 0; + print qq|
2. Durchlauf:|; while (scalar(@{ $form->{DATEV} })) { my $blockcount = 1; my $remaining_bytes = 256; @@ -602,13 +613,19 @@ sub kne_buchungsexport { my $buchungssatz = ""; $filename++; my $ed_filename = $export_path . $filename; + push(@filenames, $filename); open(ED, "> $ed_filename") or die "can't open outputfile: $!\n"; $header = &make_kne_data_header($myconfig, $form, $fromto); $remaining_bytes -= length($header); while (scalar(@{ $form->{DATEV} }) > 0) { - $transaction = shift @{ $form->{DATEV} }; - $trans_lines = scalar(@{$transaction}); + $transaction = shift @{ $form->{DATEV} }; + $trans_lines = scalar(@{$transaction}); + $counter++; + if (($counter % 500) == 0) { + print("$counter "); + } + $umsatz = 0; $gegenkonto = ""; $konto = ""; @@ -629,8 +646,14 @@ sub kne_buchungsexport { 'ß' => 'sz'); for (my $i = 0; $i < $trans_lines; $i++) { - if (abs($transaction->[$i]->{'umsatz'}) > abs($umsatz)) { - $umsatz = $transaction->[$i]->{'umsatz'}; + if ($trans_lines == 2) { + if (abs($transaction->[$i]->{'amount'}) > abs($umsatz)) { + $umsatz = $transaction->[$i]->{'amount'}; + } + } else { + if (abs($transaction->[$i]->{'umsatz'}) > abs($umsatz)) { + $umsatz = $transaction->[$i]->{'umsatz'}; + } } if ($transaction->[$i]->{'datevautomatik'}) { $datevautomatik = 1; @@ -651,7 +674,7 @@ sub kne_buchungsexport { } } - $umsatzsumme += $umsatz; + $umsatzsumme += abs($umsatz); # Umwandlung von Umlauten und Sonderzeichen in erlaubte Zeichen bei Textfeldern foreach $umlaut (keys(%umlaute)) { @@ -696,6 +719,7 @@ sub kne_buchungsexport { $blockcount++; $total_bytes = ($blockcount) * 256; } + $umsatz = abs($umsatz); $vorzeichen = ($umsatz > 0) ? "+" : "-"; $buchungssatz .= $vorzeichen . &formatumsatz($umsatz, 0); $remaining_bytes = $total_bytes - length($buchungssatz . $header); @@ -801,6 +825,7 @@ sub kne_buchungsexport { #Make EV Verwaltungsdatei $ev_header = &make_ev_header($form, $fileno); $ev_filename = $export_path . $evfile; + push(@filenames, $evfile); open(EV, "> $ev_filename") or die "can't open outputfile: EV01\n"; print(EV $ev_header); @@ -808,8 +833,12 @@ sub kne_buchungsexport { print(EV $ed_versionset[$file]); } close(EV); + print qq|
Done.
+|; ### $main::lxdebug->leave_sub(); + + return @filenames; } sub kne_stammdatenexport { @@ -818,7 +847,15 @@ sub kne_stammdatenexport { my ($myconfig, $form) = @_; $form->{abrechnungsnr} = "99"; - my $export_path = "datev/"; + $form->header; + print qq| + + Export in Bearbeitung
+|; + + my @filenames; + + my $export_path = $main::userspath . "/"; my $filename = "ED00000"; my $evfile = "EV01"; my @ed_versionsets; @@ -830,6 +867,7 @@ sub kne_stammdatenexport { my $buchungssatz = ""; $filename++; my $ed_filename = $export_path . $filename; + push(@filenames, $filename); open(ED, "> $ed_filename") or die "can't open outputfile: $!\n"; $header = &make_kne_data_header($myconfig, $form, ""); $remaining_bytes -= length($header); @@ -841,8 +879,7 @@ sub kne_stammdatenexport { qq|SELECT c.accno, c.description FROM chart c WHERE c.accno >=| . $dbh->quote($form->{accnofrom}) . qq| AND c.accno <= | - . $dbh->quote($form->{accnoto}) - . qq| ORDER BY c.accno|; + . $dbh->quote($form->{accnoto}) . qq| ORDER BY c.accno|; $sth = $dbh->prepare($query); $sth->execute || $form->dberror($query); @@ -888,6 +925,7 @@ sub kne_stammdatenexport { $ev_header = &make_ev_header($form, $fileno); $ev_filename = $export_path . $evfile; + push(@filenames, $evfile); open(EV, "> $ev_filename") or die "can't open outputfile: EV01\n"; print(EV $ev_header); @@ -899,7 +937,12 @@ sub kne_stammdatenexport { $dbh->disconnect; ### + print qq|
Done.
+|; + $main::lxdebug->leave_sub(); + + return @filenames; } 1;