X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=sidebyside;f=bin%2Fmozilla%2Fustva.pl;h=6f097c7e1cb404429ab64d675c5fec93b741da3f;hb=e98e20941b580769e3f4e6e2bcac60a679b7e06b;hp=6fa1ed75ee2ba2c3459cfc90c48a8cb3fc091e87;hpb=82ee22347be2f2ee96d09a9fd0b45710f9552582;p=kivitendo-erp.git diff --git a/bin/mozilla/ustva.pl b/bin/mozilla/ustva.pl index 6fa1ed75e..6f097c7e1 100644 --- a/bin/mozilla/ustva.pl +++ b/bin/mozilla/ustva.pl @@ -29,7 +29,7 @@ require "$form->{path}/arap.pl"; #use strict; #no strict 'refs'; #use diagnostics; -#use warnings FATAL=> 'all'; +#use warnings; # FATAL=> 'all'; #use vars qw($locale $form %myconfig); #our ($myconfig); #use CGI::Carp "fatalsToBrowser"; @@ -73,16 +73,15 @@ sub report { $lxdebug->enter_sub(); my $myconfig = \%myconfig; use CGI; + $form->{title} = $locale->text('UStVA'); - $form->{kz10} = ''; #Berichtigte Anmeldung? Ja =1 + $form->{kz10} = ''; #Berichtigte Anmeldung? Ja =1 Nein=0 - # $accrual = ($eur) ? "" : "checked"; - # $cash = ($eur) ? "checked" : ""; - my $year = ''; - my $null = ''; - ($null, $null, $null, $null, $null, $year, $null, $null, $null) = - localtime(); - $year += 1900; + my $year = substr( + $form->datetonum($form->current_date(\%myconfig), + \%myconfig + ), + 0, 4); my $department = ''; local $hide = ''; @@ -90,7 +89,6 @@ sub report { print qq| -
{script}> @@ -109,7 +107,7 @@ sub report { # Hier Aufruf von get_config aus bin/mozilla/fa.pl zum # Einlesen der Finanzamtdaten &get_config($userspath, 'finanzamt.ini'); - + # Hier Einlesen der user-config # steuernummer entfernt für prerelease my @a = qw(signature name company address businessnumber tel fax email @@ -140,7 +138,7 @@ sub report { | . $locale->text('Kein Firmenname hinterlegt!') . qq|
|; } - + # Anpassungen der Variablennamen auf pre 2.1.1 Namen # klären, ob $form->{company_street|_address} gesetzt sind # @@ -149,26 +147,27 @@ sub report { my $temp = $form->{address}; $temp =~ s/\\n/
/; ($form->{co_street}, $form->{co_city}) = split("
", $temp); + $form->{co_city} =~ s/\\n//g; } - if ( $form->{co_street} ne '' - and ($form->{co_zip} ne '' - or $form->{co_city} ne '') ) { + if ($form->{co_street} ne '' + and ( $form->{co_zip} ne '' + or $form->{co_city} ne '') + ) { print qq| $form->{co_street}
$form->{co_street1}
$form->{co_zip} $form->{co_city}|; - } else { + } else { print qq| {path}&action=config&level=Programm--Preferences&login=$form->{login}&password=$form->{password}> | . $locale->text('Keine Firmenadresse hinterlegt!') . qq|\n|; } - $form->{co_email}=$form->{email} unless $form->{co_email}; - $form->{co_tel}=$form->{tel} unless $form->{co_tel}; - $form->{co_fax}=$form->{fax} unless $form->{co_fax}; - $form->{co_url}=$form->{urlx} unless $form->{co_url}; - - + $form->{co_email} = $form->{email} unless $form->{co_email}; + $form->{co_tel} = $form->{tel} unless $form->{co_tel}; + $form->{co_fax} = $form->{fax} unless $form->{co_fax}; + $form->{co_url} = $form->{urlx} unless $form->{co_url}; + print qq|

@@ -193,10 +192,10 @@ sub report { Keine Steuernummer hinterlegt!
|; } print qq| - +

@@ -233,7 +232,7 @@ sub report { # accounting years if SQL-Ledger Version < 2.4.1 # $year = $form->{year} * 1; - @years = sort { $b <=> $a } (2000 .. ($year+1)); + @years = sort { $b <=> $a } (2003 .. ($year + 1)); $form->{all_years} = \@years; } map { $form->{selectaccountingyear} .= qq| - + |; } print qq||; @@ -661,12 +641,11 @@ sub ustva_vorauswahl { } elsif ($form->{FA_voranmeld} eq 'quarter') { # Vorauswahl bei quartalsweisem Voranmeldungszeitraum - my %liste = ( 'A' => $locale->text('1. Quarter'), - 'B' => $locale->text('2. Quarter'), - 'C' => $locale->text('3. Quarter'), - 'D' => $locale->text('4. Quarter'), - '13' => $locale->text('Yearly'), - ); + my %liste = ('41' => $locale->text('1. Quarter'), + '42' => $locale->text('2. Quarter'), + '43' => $locale->text('3. Quarter'), + '44' => $locale->text('4. Quarter'), + '13' => $locale->text('Yearly'),); my $yy = $form->{year} * 10000; $yymmdd = "$form->{year}$form->{month}$form->{day}" * 1; @@ -697,7 +676,7 @@ sub ustva_vorauswahl { }; } - print qq||; - my %listea = ('A' => '1. Quarter', - 'B' => '2. Quarter', - 'C' => '3. Quarter', - 'D' => '4. Quarter',); + my %listea = ('41' => '1. Quarter', + '42' => '2. Quarter', + '43' => '3. Quarter', + '44' => '4. Quarter',); my %listeb = ('01' => 'January', '02' => 'February', @@ -733,20 +712,20 @@ sub ustva_vorauswahl { '10' => 'October', '11' => 'November', '12' => 'December', - '13' => 'Yearly', - ); + '13' => 'Yearly',); my $key = ''; foreach $key (sort keys %listea) { print qq| - - |; + \n|; } foreach $key (sort keys %listeb) { print qq| - - - |; + \n|; } print qq||; } @@ -778,7 +757,7 @@ sub show_options { qq| |; - if ($latex) { + if ($latex_templates) { $format .= qq| |; + . qq|| + . qq||; } #$format .= qq||; @@ -799,8 +781,7 @@ sub show_options { $type $media + . $locale->text('Ausgabeformat auswählen...') . qq|">$format |; $lxdebug->leave_sub(); } @@ -816,145 +797,144 @@ sub generate_ustva { # form vars initialisieren my @anmeldungszeitraum = qw('0401' '0402' '0403' '0404' '0405' '0405' '0406' '0407' '0408' '0409' '0410' '0411' '0412' '0441' '0442' '0443' '0444'); - my $item = ''; - foreach $item (@anmeldungszeitraum) { + foreach my $item (@anmeldungszeitraum) { $form->{$item} = ""; } - if ($form->{reporttype} eq "custom") { #forgotten the year --> thisyear if ($form->{year} !~ m/^\d\d\d\d$/) { - $locale->date(\$myconfig, $form->current_date(\$myconfig), 0) =~ - /(\d\d\d\d)/; - $form->{year} = $1; + $form->{year} = substr( + $form->datetonum( + $form->current_date(\%myconfig), \%myconfig + ), + 0, 4); + $lxdebug->message(LXDebug::DEBUG1, + qq|Actual year from Database: $form->{year}\n|); } #yearly report - if ($form->{duetyp} eq "13") { - $form->{fromdate} = "$form->{year}-01-01"; - $form->{todate} = "$form->{year}-12-31"; + if ($form->{period} eq "13") { + $form->{fromdate} = "$form->{year}0101"; + $form->{todate} = "$form->{year}1231"; } #Quater reports - if ($form->{duetyp} eq "A") { - $form->{fromdate} = "$form->{year}-01-01"; - $form->{todate} = "$form->{year}-03-31"; + if ($form->{period} eq "41") { + $form->{fromdate} = "$form->{year}0101"; + $form->{todate} = "$form->{year}0331"; $form->{'0441'} = "X"; } - if ($form->{duetyp} eq "B") { - $form->{fromdate} = "$form->{year}-04-01"; - $form->{todate} = "$form->{year}-06-30"; + if ($form->{period} eq "42") { + $form->{fromdate} = "$form->{year}0401"; + $form->{todate} = "$form->{year}0630"; $form->{'0442'} = "X"; } - if ($form->{duetyp} eq "C") { - $form->{fromdate} = "$form->{year}-07-01"; - $form->{todate} = "$form->{year}-09-30"; + if ($form->{period} eq "43") { + $form->{fromdate} = "$form->{year}0701"; + $form->{todate} = "$form->{year}0930"; $form->{'0443'} = "X"; } - if ($form->{duetyp} eq "D") { - $form->{fromdate} = "$form->{year}-10-01"; - $form->{todate} = "$form->{year}-12-31"; + if ($form->{period} eq "44") { + $form->{fromdate} = "$form->{year}1001"; + $form->{todate} = "$form->{year}1231"; $form->{'0444'} = "X"; } #Monthly reports SWITCH: { - $form->{duetyp} eq "01" && do { - $form->{fromdate} = "$form->{year}-01-01"; - $form->{todate} = "$form->{year}-01-31"; + $form->{period} eq "01" && do { + $form->{fromdate} = "$form->{year}0101"; + $form->{todate} = "$form->{year}0131"; $form->{'0401'} = "X"; last SWITCH; }; - $form->{duetyp} eq "02" && do { - $form->{fromdate} = "$form->{year}-02-01"; + $form->{period} eq "02" && do { + $form->{fromdate} = "$form->{year}0201"; #this works from 1901 to 2099, 1900 and 2100 fail. my $leap = ($form->{year} % 4 == 0) ? "29" : "28"; - $form->{todate} = "$form->{year}-02-$leap"; + $form->{todate} = "$form->{year}02$leap"; $form->{"0402"} = "X"; last SWITCH; }; - $form->{duetyp} eq "03" && do { - $form->{fromdate} = "$form->{year}-03-01"; - $form->{todate} = "$form->{year}-03-31"; + $form->{period} eq "03" && do { + $form->{fromdate} = "$form->{year}0301"; + $form->{todate} = "$form->{year}0331"; $form->{"0403"} = "X"; last SWITCH; }; - $form->{duetyp} eq "04" && do { - $form->{fromdate} = "$form->{year}-04-01"; - $form->{todate} = "$form->{year}-04-30"; + $form->{period} eq "04" && do { + $form->{fromdate} = "$form->{year}0401"; + $form->{todate} = "$form->{year}0430"; $form->{"0404"} = "X"; last SWITCH; }; - $form->{duetyp} eq "05" && do { - $form->{fromdate} = "$form->{year}-05-01"; - $form->{todate} = "$form->{year}-05-31"; + $form->{period} eq "05" && do { + $form->{fromdate} = "$form->{year}0501"; + $form->{todate} = "$form->{year}0531"; $form->{"0405"} = "X"; last SWITCH; }; - $form->{duetyp} eq "06" && do { - $form->{fromdate} = "$form->{year}-06-01"; - $form->{todate} = "$form->{year}-06-30"; + $form->{period} eq "06" && do { + $form->{fromdate} = "$form->{year}0601"; + $form->{todate} = "$form->{year}0630"; $form->{"0406"} = "X"; last SWITCH; }; - $form->{duetyp} eq "07" && do { - $form->{fromdate} = "$form->{year}-07-01"; - $form->{todate} = "$form->{year}-07-31"; + $form->{period} eq "07" && do { + $form->{fromdate} = "$form->{year}0701"; + $form->{todate} = "$form->{year}0731"; $form->{"0407"} = "X"; last SWITCH; }; - $form->{duetyp} eq "08" && do { - $form->{fromdate} = "$form->{year}-08-01"; - $form->{todate} = "$form->{year}-08-31"; + $form->{period} eq "08" && do { + $form->{fromdate} = "$form->{year}0801"; + $form->{todate} = "$form->{year}0831"; $form->{"0408"} = "X"; last SWITCH; }; - $form->{duetyp} eq "09" && do { - $form->{fromdate} = "$form->{year}-09-01"; - $form->{todate} = "$form->{year}-09-30"; + $form->{period} eq "09" && do { + $form->{fromdate} = "$form->{year}0901"; + $form->{todate} = "$form->{year}0930"; $form->{"0409"} = "X"; last SWITCH; }; - $form->{duetyp} eq "10" && do { - $form->{fromdate} = "$form->{year}-10-01"; - $form->{todate} = "$form->{year}-10-31"; + $form->{period} eq "10" && do { + $form->{fromdate} = "$form->{year}1001"; + $form->{todate} = "$form->{year}1031"; $form->{"0410"} = "X"; last SWITCH; }; - $form->{duetyp} eq "11" && do { - $form->{fromdate} = "$form->{year}-11-01"; - $form->{todate} = "$form->{year}-11-30"; + $form->{period} eq "11" && do { + $form->{fromdate} = "$form->{year}1101"; + $form->{todate} = "$form->{year}1130"; $form->{"0411"} = "X"; last SWITCH; }; - $form->{duetyp} eq "12" && do { - $form->{fromdate} = "$form->{year}-12-01"; - $form->{todate} = "$form->{year}-12-31"; + $form->{period} eq "12" && do { + $form->{fromdate} = "$form->{year}1201"; + $form->{todate} = "$form->{year}1231"; $form->{"0412"} = "X"; last SWITCH; }; } - } - #$myconfig = \%myconfig; - #$myconfig->{dateformat} = 'yyyy-mm-dd'; - #$form->{fromdate}= $locale->date(\%myconfig, $form->{fromdate}, 0, 0, 0); - #$form->{todate}= $locale->date(\%myconfig, $form->{todate}, 0, 0, 0); + # using dates in ISO-8601 format: yyyymmmdd for Postgres... USTVA->ustva(\%myconfig, \%$form); - #??($form->{department}) = split /--/, $form->{department}; + # reformat Dates to dateformat + $form->{fromdate} = $locale->date(\%myconfig, $form->{fromdate}, 0, 0, 0); - $form->{period} = - $locale->date(\%myconfig, $form->current_date(\%myconfig), 1, 0, 0); $form->{todate} = $form->current_date($myconfig) unless $form->{todate}; + $form->{todate} = $locale->date(\%myconfig, $form->{todate}, 0, 0, 0); + + $form->{longperiod} = + $locale->date(\%myconfig, $form->current_date(\%myconfig), 1, 0, 0); # if there are any dates construct a where if ($form->{fromdate} || $form->{todate}) { - unless ($form->{todate}) { - $form->{todate} = $form->current_date($myconfig); - } + $form->{todate} = $form->current_date($myconfig) unless ($form->{todate}); my $longtodate = $locale->date($myconfig, $form->{todate}, 1, 0, 0); my $shorttodate = $locale->date($myconfig, $form->{todate}, 0, 0, 0); @@ -963,7 +943,7 @@ sub generate_ustva { my $shortfromdate = $locale->date($myconfig, $form->{fromdate}, 0, 0, 0); $form->{this_period} = "$shortfromdate
\n$shorttodate"; - $form->{period} = + $form->{longperiod} = $locale->text('for Period') . qq|
\n$longfromdate | . $locale->text('bis') @@ -982,7 +962,7 @@ sub generate_ustva { $locale->date(\%myconfig, $form->{comparetodate}, 0, 0, 0); $form->{last_period} = "$shortcomparefromdate
\n$shortcomparetodate"; - $form->{period} .= + $form->{longperiod} .= "
\n$longcomparefromdate " . $locale->text('bis') . qq| $longcomparetodate|; @@ -1006,84 +986,165 @@ sub generate_ustva { my $temp = $form->{address}; $temp =~ s/\\n/
/; ($form->{co_street}, $form->{co_city}) = split("
", $temp); + $form->{co_city} =~ s/\\n//g; } - if ( $form->{format} eq 'pdf' - or $form->{format} eq 'postscript') { + if ( $form->{format} eq 'pdf' or $form->{format} eq 'postscript') { + + $form->{IN} = "$form->{type}-$form->{year}.tex"; + $form->{padding} = "~~"; $form->{bold} = "\textbf{"; $form->{endbold} = "}"; $form->{br} = '\\\\'; - my @numbers = qw(511 861 36 80 971 931 98 96 53 74 - 85 65 66 61 62 Z67 63 64 59 69 39 83 - Z43 Z45 Z53 Z62 Z65); - + 85 65 66 61 62 Z67 63 64 59 69 39 83 + Z43 Z45 Z53 Z62 Z65); + my $number = ''; + # Zahlenformatierung für Latex USTVA Formulare - if ($myconfig{numberformat} eq '1.000,00' or - $myconfig{numberformat} eq '1000,00') { + if ( $myconfig{numberformat} eq '1.000,00' + or $myconfig{numberformat} eq '1000,00') { foreach $number (@numbers) { $form->{$number} =~ s/,/~~/g; } - } - if ($myconfig{numberformat} eq '1000.00' or - $myconfig{numberformat} eq '1,000.00') { + } + if ( $myconfig{numberformat} eq '1000.00' + or $myconfig{numberformat} eq '1,000.00') { foreach $number (@numbers) { $form->{$number} =~ s/\./~~/g; } } - # Formatierungen für HTML Ausgabe - } elsif ($form->{format} eq 'html') { + if ( $form->{period} eq '13'){ #Catch yearly USTE for now, not yet implemented. + $form->header; + USTVA::error( + $locale->text( + 'Impossible to create yearly Tax Report as PDF or Postscript
Not yet implemented!' + ) + ); + } + + } elsif ( $form->{format} eq 'html') { # Formatierungen für HTML Ausgabe + + $form->{IN} = $form->{type} . '.html'; $form->{padding} = "  "; $form->{bold} = ""; $form->{endbold} = ""; $form->{br} = "
"; - $form->{address} =~ s/\\n/
/; + $form->{address} =~ s/\\n/\n/g; - } + } elsif ($form->{format} =~ /^elster/) { - if ($form->{format} eq 'elster') { - if ($form->{duetyp} eq '13'){ + if ( $form->{period} eq '13' ) { $form->header; - USTVA::info($locale->text('Impossible to create yearly Tax Report via Winston.
Not yet implemented!')); - } else { - &create_winston(); + USTVA::info( + $locale->text( + 'Impossible to create yearly Tax Report via Winston or Taxbird.
Not yet implemented!' + )); } - } else { - $form->{templates} = $myconfig{templates}; - $form->{templates} = "doc" if ($form->{type} eq 'help'); - $form->{IN} = "$form->{type}"; - $form->{IN} = "$form->{help}" if ($form->{type} eq 'help'); - $form->{IN} = 'USTE' if ($form->{duetyp} eq '13' && - $form->{format} ne 'html'); - - if ($form->{IN} eq 'USTE'){ - $form->header; - USTVA::info($locale->text('Impossible to create yearly Tax Report as PDF or PS.
Not yet implemented!')); + if ( $form->{format} eq 'elsterwinston' ) { + + $form->{IN} = 'winston.xml'; + + # Build Winston filename + my $file = 'U'; # 1. char 'U' = USTVA + $file .= $form->{period}; + #4. and 5. char = year modulo 100 + $file .= sprintf("%02d", $form->{year} % 100); + #6. to 18. char = Elstersteuernummer + #Beispiel: Steuernummer in Bayern + #111/222/33334 ergibt für UStVA Jan 2004: U01049111022233334 + $file .= $form->{elsterFFFF}; + $file .= $form->{elstersteuernummer}; + #file suffix + $file .= '.xml'; + $form->{tmpfile} = "$userspath/$file"; } - - $form->{IN} .= "-$form->{year}" - if ( $form->{format} eq 'pdf' - or $form->{format} eq 'postscript'); - $form->{IN} .= '.tex' - if ( $form->{format} eq 'pdf' - or $form->{format} eq 'postscript'); + if ( $form->{format} eq 'elstertaxbird' ) { - $form->{IN} .= '.html' if ($form->{format} eq 'html'); + $form->{IN} = 'taxbird.txb'; + + $form->{tmpfile} = "$userspath/USTVA-" . $form->{period} + . sprintf("%02d", $form->{year} % 100) . ".txb"; - #$form->header; - #print qq|$myconfig
$path|; - $form->parse_template($myconfig, $userspath); + if ($form->{period} =~ /^[4]\d$/ ){ + my %periods = ( # Lx => taxbird + '41' => '12', + '42' => '13', + '43' => '14', + '44' => '15', + ); + + foreach my $quarter ( keys %periods ) { + $form->{period} = $periods{$quarter} if ( $form->{period} eq $quarter); + } + + my %lands = ( # Lx => taxbird # TODO: besser als array... + 'Baden Würtemberg' => '0', + 'Bayern' => '1', + 'Berlin' => '2', + 'Brandenburg' => '3', + 'Bremen' => '4', + 'Hamburg' => '5', + 'Hessen' => '6', + 'Mecklenburg Vorpommern' => '7', + 'Niedersachsen' => '8', + 'Nordrhein Westfalen' => '9', + 'Rheinland Pfalz' => '10', + 'Saarland' => '11', + 'Sachsen' => '12', + 'Sachsen Anhalt' => '13', + 'Schleswig Holstein' => '14', + 'Thüringen' => '15', + ); + + + foreach my $land ( keys %lands ){ + $form->{elsterland} = $lands{$land} if ($form->{elsterland} eq $land ); + } + } elsif ($form->{period} =~ /^\d+$/ ) { + $form->{period} =~ s/^0//g; + my $period = $form->{period}; + $period * 1; + $period--; + $form->{period} = $period; + } else { + $form->header; + USTVA::error( $locale->text('Wrong Period' )); + exit(0); + + } + + } + # Other Elster formats follow here... + + } elsif ( $form->{format} eq '' ){ # No format error. + $form->header; + USTVA::error( $locale->text('Application Error. No Format given!' )); + exit(0); + + } else { # All other Formats are wrong + $form->header; + USTVA::error( $locale->text('Application Error. Wrong Format: ') . $form->{format} ); + exit(0); } + + + $form->{templates} = $myconfig{templates}; + $form->{templates} = "doc" if ( $form->{type} eq 'help' ); + + $form->parse_template($myconfig, $userspath); + $lxdebug->leave_sub(); } sub edit { $lxdebug->enter_sub(); + # edit all taxauthority prefs $form->header; @@ -1106,16 +1167,14 @@ sub edit { + . $locale->text('Finanzamt - Einstellungen') . qq|
| - . $locale->text('Finanzamt - Einstellungen') - . qq|

| - . $locale->text('Angaben zum Finanzamt') - . qq| + . $locale->text('Angaben zum Finanzamt') . qq| |; #print qq|$form->{terminal}|; @@ -1165,8 +1224,7 @@ sub edit { print qq| + . $locale->text('Dauerfristverlängerung') . qq|

@@ -1219,8 +1277,7 @@ sub edit {

+ . $locale->text('debug') . qq|">--> |; print qq| text('USTVA-Hint: Tax Authoritys')) if ( $form->{elsterFFFF_new} eq 'Auswahl' || $form->{elsterland_new} eq 'Auswahl'); - USTVA::info( - $locale->text( - 'Es fehlen Angaben zur Versteuerung. - Wenn Sie Ist Versteuert sind, wählen Sie die Einnahmen/Überschuß-Rechnung aus. - Sind Sie Soll-Versteuert und Bilanzverpflichtet, dann wählen Sie Bilanz aus.' - )) + USTVA::info( $locale->text('Missing Method!') . "\n" + . $locale->text('USTVA-Hint: Method')) if ($form->{method} eq ''); # Klären, ob Variablen bereits befüllt sind UND ob veräderungen auf # der vorherigen Maske stattfanden: $change = 1(in der edit sub, # mittels get_config) - my $change = - $form->{elsterland} eq $form->{elsterland_new} + my $change = $form->{elsterland} eq $form->{elsterland_new} && $form->{elsterFFFF} eq $form->{elsterFFFF_new} ? '0' : '1'; $change = '0' if ($form->{saved} eq $locale->text('saved')); my $elster_init = &elster_hash(); @@ -1369,8 +1419,7 @@ sub edit_form { + . $locale->text('Finanzamt - Einstellungen') . qq|
| - . $locale->text('Finanzamt - Einstellungen') - . qq|
@@ -1609,8 +1658,7 @@ sub show_fa_daten {
| - . $locale->text('Finanzamt') - . qq| $form->{FA_Name} + . $locale->text('Finanzamt') . qq| $form->{FA_Name} |; @@ -1790,188 +1838,10 @@ sub show_fa_daten { $lxdebug->leave_sub(); } -sub create_winston { - $lxdebug->enter_sub(); - &get_config($userspath, 'finanzamt.ini'); - - # There is no generic Linux GNU/GPL solution out for using ELSTER. - # In lack of availability linux users may use windows pendants. I choose - # WINSTON, because it's free of coast, it has an API and its tested under - # Linux using WINE. - # The author of WINSTON developed some c-code to realize ELSTER under - # WINDOWS and Linux (http://www.felfri.de/fa_xml/). Next year (2005) I start to - # develop a server side solution for LX-Office ELSTER under Linux and - # WINDOWS based on this c-code. - # - # You need to download WINSTON from http://www.felfri.de/winston/ - # There (http://www.felfri.de/winston/download.htm) you'll find instructions - # about WINSTON under Linux WINE - # More infos about Winstons API: http://www.felfri.de/winston/schnittstellen.htm - my $azr = ''; - my $file = ''; # Filename for Winstonfile - $file .= 'U'; # 1. char 'U' = USTVA - -SWITCH: - { # 2. and 3. char 01-12= Month 41-44= Quarter (azr:Abrechnungszeitraum) - $form->{duetyp} eq "01" && do { - $azr = "01"; - last SWITCH; - }; - $form->{duetyp} eq "02" && do { - $azr = "02"; - last SWITCH; - }; - $form->{duetyp} eq "03" && do { - $azr = "03"; - last SWITCH; - }; - $form->{duetyp} eq "04" && do { - $azr = "04"; - last SWITCH; - }; - $form->{duetyp} eq "05" && do { - $azr = "05"; - last SWITCH; - }; - $form->{duetyp} eq "06" && do { - $azr = "06"; - last SWITCH; - }; - $form->{duetyp} eq "07" && do { - $azr = "07"; - last SWITCH; - }; - $form->{duetyp} eq "08" && do { - $azr = "08"; - last SWITCH; - }; - $form->{duetyp} eq "09" && do { - $azr = "09"; - last SWITCH; - }; - $form->{duetyp} eq "10" && do { - $azr = "10"; - last SWITCH; - }; - $form->{duetyp} eq "11" && do { - $azr = "11"; - last SWITCH; - }; - $form->{duetyp} eq "12" && do { - $azr = "12"; - last SWITCH; - }; - $form->{duetyp} eq "A" && do { - $azr = "41"; - last SWITCH; - }; - $form->{duetyp} eq "B" && do { - $azr = "42"; - last SWITCH; - }; - $form->{duetyp} eq "C" && do { - $azr = "43"; - last SWITCH; - }; - $form->{duetyp} eq "D" && do { - $azr = "44"; - last SWITCH; - }; - do { - $form->error( - "Ungültiger Anmeldezeitraum.\n - Sie können für ELSTER nur einen monatlichen oder - quartalsweisen Anmeldezeitraum auswählen." - ); - }; - } - - $file .= $azr; - - #4. and 5. char = year modulo 100 - $file .= sprintf("%02d", $form->{year} % 100); - - #6. to 18. char = Elstersteuernummer - #Beispiel: Steuernummer in Bayern - #111/222/33334 ergibt für UStVA Jan 2004: U01049111022233334 - - $file .= $form->{elsterFFFF}; - $file .= $form->{elstersteuernummer}; - - #file suffix - - $file .= '.xml'; - $form->{elsterfile} = $file; - - #Calculations - - my $k51 = - sprintf("%d", $form->parse_amount(\%myconfig, $form->{"51"})) - ; # Umsätze zu 16% USt - my $k86 = - sprintf("%d", $form->parse_amount(\%myconfig, $form->{"86"})) - ; # Umsätze zu 7% USt - my $k97 = - sprintf("%d", $form->parse_amount(\%myconfig, $form->{"97"})) - ; # 16% Steuerpflichtige innergemeinsachftliche Erwerbe - my $k93 = - sprintf("%d", $form->parse_amount(\%myconfig, $form->{"93"})) - ; # 16% Steuerpflichtige innergemeinsachftliche Erwerbe - my $k94 = - sprintf("%d", $form->parse_amount(\%myconfig, $form->{"94"})) - ; # neuer Fahrzeuge von Lieferern - my $k66 = - $form->parse_amount(\%myconfig, $form->{"66"}) * - 100; # Vorsteuer 7% plus 16% - my $k83 = - $form->parse_amount(\%myconfig, $form->{"67"}) * 100; # Umsätze zu 7% USt - my $k96 = $form->parse_amount(\%myconfig, $form->{"96"}) * 100; # - # - # Now build the xml content - # - - $form->{elster} = qq| - - - - $form->{elstersteuernummer} - $form->{year} - $azr - |; - - $form->{elster} .= qq|$k51\n| if ($k51 ne '0'); - $form->{elster} .= qq|$k86\n| if ($k86 ne '0'); - $form->{elster} .= qq|$k97\n| if ($k97 ne '0'); - $form->{elster} .= qq|$k93\n| if ($k93 ne '0'); - $form->{elster} .= qq|$k94\n| if ($k94 ne '0'); - $form->{elster} .= qq|$k96\n| if ($k96 ne '0'); - $form->{elster} .= qq|$k66\n| if ($k66 ne '0'); - $form->{elster} .= qq|$k83\n| if ($k83 ne '0'); - $form->{elster} .= qq|\n\n\n|; - - #$form->header; - #print qq|$form->{elsterfile}|; - #print qq|$form->{elster}|; - $SIG{INT} = 'IGNORE'; - - &save_winston; - $lxdebug->leave_sub(); -} - -sub save_winston { - $lxdebug->enter_sub(); - my $elster = $form->{elster}; - my $elsterfile = $form->{elsterfile}; - open(OUT, ">-") or $form->error("STDOUT : $!"); - print OUT qq|Content-Type: application/file; -Content-Disposition: attachment; filename="$elsterfile"\n\n|; - print OUT $elster; - close(OUT); - $lxdebug->leave_sub(); -} sub continue { $lxdebug->enter_sub(); + # allow Symbolic references just here: no strict 'refs'; &{ $form->{nextsub} }; @@ -1979,9 +1849,9 @@ sub continue { $lxdebug->leave_sub(); } -sub back { +sub back { $lxdebug->enter_sub(); - &{ $form->{lastsub} }; + &{ $form->{lastsub} }; $lxdebug->leave_sub(); } @@ -1992,239 +1862,4 @@ sub elster_hash { return $finanzamt; } -sub test { - $lxdebug->enter_sub(); - - # biegt nur den Testeintrag in Programm->Test auf eine Routine um - - $form->header; - &elster_send; - $lxdebug->leave_sub(); -} - -sub elster_send { - $lxdebug->enter_sub(); - - #read config - my $elster_conf = &elster_conf(); - &elster_xml(); - use Cwd; - $form->{cwd} = cwd(); - $form->{tmpdir} = $form->{cwd} . '/' . $elster_conf->{'path'}; - $form->{tmpfile} = $elster_conf->{'err'}; - my $caller = $elster_conf->{'call'}[0]; - - chdir("$form->{tmpdir}") or $form->error($form->cleanup . "chdir : $!"); - my $send = - "faxmlsend $caller -config etc/faxmlsend.cnf -xml faxmlsend.xml -tt faxmlsend.tt -debug"; - - system("$send > $form->{tmpfile}"); - $form->{tmpdir} .= "$elster_conf->{'path'}/"; - $form->{tmpfile} = "faxmlsend.err"; - $form->error($form->cleanup - . "faxmlsend : OFD meldet: Error 404 \n Internetseite nicht vorhanden") - if ($? eq '1024'); - $form->error($form->cleanup - . "faxmlsend : No such File: faxmlsend.xml \n Fehlernummer: $? \n Problem beim öffnen der faxmlsend.xml" - ) - if ($?); - - # foreach my $line (&elster_feedback("$elster_conf->{'path'}")){ - # print qq|$line\n|; - # } - print qq|Log:
|; - - #for (my $i=0; $i<= ) - &elster_readlog(); - print qq|\n ende\n|; - $lxdebug->leave_sub(); -} - -sub elster_readlog { - $lxdebug->enter_sub(); - my $elster_conf = &elster_conf(); - open(LOG, "$elster_conf->{'logfile'}") - or $form->error("$elster_conf->{'logfile'}: $!"); - print qq||; - my $log = ''; - my $xml = ''; - my $tmp = ''; - while () { - my $i = 0; - - #$_ =~ s//>\;/; - $_ =~ s/\s+//mg; - - #$_ =~ s/\015\012//mg; - $_ =~ s/|; - - #} elsif ($_ =~ /(<([^\/]*?)>)/ ) { - } elsif ($_ =~ /(<([^\/].*?)>(.*))/g) { - - #$xml .= qq|$2 = $3\n\n|; - #$_ =~ s/\015\012//mg; - $_ =~ s/\s+//; - $xml .= qq|$_\n|; - - } else { - $tmp .= qq|$_
|; - } - $i++; - } - - #second parse - #my $var=''; - #while (<$xml>){ - # $var .= qq|$2 = $3\n\n|; - #} - #print qq|$log|; - print qq|$xml|; - print qq|
|; - - # $_=$log; - # s{<(\w+)\b([^<>]*)> - # ((?:.(?!) } - # { print "markup=",$1," args=",$2," enclosed=",$3," final=",$4 ; "" }gsex; - close LOG; - $lxdebug->leave_sub(); -} - -sub elster_feedback { - $lxdebug->enter_sub(); - my ($file) = @_; - my @content = (); - print qq|feedback:
|; - if (-f "$file") { - open(FH, "$file"); - @content = ; - close(FH); - } - $lxdebug->leave_sub(); - return (@content); -} - -sub elster_conf { - $lxdebug->enter_sub(); - my $elster_conf = { 'path' => 'elster', - 'prg' => 'faxmlsend', - 'err' => 'faxmlsend.err', - 'ttfile' => 'faxmlsend.tt', - 'xmlfile' => 'faxmlsend.xml', - 'cline' => '-tt $ttfile -xml $xmlfile', - 'call' => ['send', 'protokoll', 'anmeldesteuern'], - 'logfile' => 'log/faxmlsend.log', - 'conffile' => 'faxmlsend.cnf', - 'debug' => '-debug' }; - $lxdebug->leave_sub(); - return $elster_conf; - -} - -sub elster_xml { - $lxdebug->enter_sub(); - my $elster_conf = &elster_conf(); - - # $k51 = sprintf("%d", $form->parse_amount(\%myconfig, $form->{"51"})); # Umsätze zu 16% USt - # $k86 = sprintf("%d", $form->parse_amount(\%myconfig, $form->{"86"})); # Umsätze zu 7% USt - # $k97 = sprintf("%d", $form->parse_amount(\%myconfig, $form->{"97"})); # 16% Steuerpflichtige innergemeinsachftliche Erwerbe - # $k93 = sprintf("%d", $form->parse_amount(\%myconfig, $form->{"93"})); # 16% Steuerpflichtige innergemeinsachftliche Erwerbe - # $k94 = sprintf("%d", $form->parse_amount(\%myconfig, $form->{"94"})); # neuer Fahrzeuge von Lieferern - # $k66 = $form->parse_amount(\%myconfig, $form->{"66"}) * 100;# Vorsteuer 7% plus 16% - # $k83 = $form->parse_amount(\%myconfig, $form->{"67"}) * 100;# Umsätze zu 7% USt - # $k96 = $form->parse_amount(\%myconfig, $form->{"96"}) * 100;# - - my $TransferHeader = qq| - - - - ElsterAnmeldung - UStVA - send-NoSig - 700000004 - 74931 - Helmut - - PKCS#7v1.5 - GZIP - 123456789012345678901234567890123456789012 - - - - - 0 - - - - 0 - - - - - - test - - |; - - my $DatenTeil = qq| - - - - 234234234 - 9198 - - ElsterAnmeldung - V 1.4 - - String, der Lieferanteninfo enthaelt - - .... - - - - - - - OFD Muenchen - Meiserstr. 6 - 80335 - München - - 20041127 - - - 2005 - 01 - 9198011310134 - 74931*NameSteuerber.*Berufsbez.*089*59958327*Mandantenname - - - - - - -\n|; - - #$DatenTeil .= qq| $k51\n| if ($k51 ne '0'); - #$DatenTeil .= qq| $k86\n| if ($k86 ne '0'); - #$DatenTeil .= qq| $k97\n| if ($k97 ne '0'); - #$DatenTeil .= qq| $k93\n| if ($k93 ne '0'); - #$DatenTeil .= qq| $k94\n| if ($k94 ne '0'); - #$DatenTeil .= qq| $k96\n| if ($k96 ne '0'); - #$DatenTeil .= qq| $k66\n| if ($k66 ne '0'); - #$DatenTeil .= qq| $k83\n| if ($k83 ne '0'); - - my $filename = "$elster_conf->{'path'}/$elster_conf->{'xmlfile'}"; - open(XML, ">$elster_conf->{'path'}/$elster_conf->{'xmlfile'}") - or $form->error("$filename : $!"); - print XML qq|$TransferHeader $DatenTeil|; - close XML; - $lxdebug->leave_sub(); -}