Merge branch 'after-262'
[kivitendo-erp.git] / bin / mozilla / ustva.pl
index e255717..f7874cd 100644 (file)
@@ -23,6 +23,8 @@
 # German Tax authority Module and later ELSTER Interface
 #======================================================================
 
+use utf8;
+
 require "bin/mozilla/common.pl";
 
 #use strict;
@@ -93,7 +95,7 @@ sub report {
   $ustva->get_config($userspath, 'finanzamt.ini');
 
   # Hier Einlesen der user-config
-  # steuernummer entfernt für prerelease
+  # steuernummer entfernt für prerelease
   my @a = qw(
     signature      name          company       address        businessnumber
     tel            fax           email         co_chief       co_department
@@ -120,7 +122,7 @@ sub report {
 
 
   # Anpassungen der Variablennamen auf pre 2.1.1 Namen
-  # klären, ob $form->{company_street|_address} gesetzt sind
+  # klären, ob $form->{company_street|_address} gesetzt sind
   if ($form->{address} ne '') {
     my $temp = $form->{address};
     $temp =~ s/\n/<br \/>/;
@@ -302,7 +304,7 @@ sub ustva_vorauswahl {
     $sel    = '';
     my $dfv = '';
 
-    # Offset für Dauerfristverlängerung
+    # Offset für Dauerfristverlängerung
     $dfv = '100' if ($form->{FA_dauerfrist} eq '1');
 
   SWITCH: {
@@ -386,7 +388,7 @@ sub ustva_vorauswahl {
     my $yy = $form->{year} * 10000;
     $yymmdd = "$form->{year}$form->{month}$form->{day}" * 1;
     $sel    = '';
-    my $dfv = '';    # Offset für Dauerfristverlängerung
+    my $dfv = '';    # Offset für Dauerfristverlängerung
     $dfv = '100' if ($form->{FA_dauerfrist} eq '1');
 
   SWITCH: {
@@ -672,9 +674,8 @@ sub generate_ustva {
       };
     }
 
-  # Kontrollvariable für die Templates
-  $form->{'year2007'} = ($form->{year} >= 2007 ) ? "1":"0";
-
+  # Kontrollvariablen für die Templates
+  $form->{"year$_"} = ($form->{year} >= $_ ) ? "1":"0" for 2007..2107;
 
   # Get the USTVA
   $ustva->ustva(\%myconfig, \%$form);
@@ -788,7 +789,7 @@ sub generate_ustva {
       $form->{endbold} = "}";
       $form->{br}      = '\\\\';
 
-      # Zahlenformatierung für Latex USTVA Formulare
+      # Zahlenformatierung für Latex USTVA Formulare
 
       foreach my $number (@category_euro) {
         $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '0', '');
@@ -802,7 +803,7 @@ sub generate_ustva {
         $form->{$number} =~ s/${decimal_comma}/~~/g;
       }
 
-    } elsif ( $form->{format} eq 'html') { # Formatierungen für HTML Ausgabe
+    } elsif ( $form->{format} eq 'html') { # Formatierungen für HTML Ausgabe
 
       $form->{IN} = $form->{type} . '.html';
       $form->{padding} = "&nbsp;&nbsp;";
@@ -833,7 +834,7 @@ sub generate_ustva {
       $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
+      #111/222/33334 ergibt für UStVA Jan 2004: U01049111022233334
       $file .= $form->{elsterFFFF};
       $file .= $form->{elstersteuernummer};
       #file suffix
@@ -843,7 +844,7 @@ sub generate_ustva {
 
       $form->{attachment_filename} = $file;
 
-      # Zahlenformatierung für Winston
+      # Zahlenformatierung für Winston
 
       my $temp_numberformat = $myconfig{numberformat};
 
@@ -911,28 +912,44 @@ sub generate_ustva {
         my $period = $form->{period};
         $period * 1;
         $period--;
-        $form->{period} = $period;
+        $form->{taxbird_period} = $period;
       } else {
         $form->header;
         USTVA::error( $locale->text('Wrong Period' ));
         ::end_of_request();
       }
 
+      # heuristics for address splitting
+      # lx-office holds the entire address in a single field.
+      # taxbird expects it to be splitted into street, zipcode and city
+      if ($form->{co_street} =~ /\n/) {
+        my $new_co_street;
+        for (split /\n/, $form->{co_street}) {
+          if (/(\d{3,5})\s+(\w+)/) {
+            $form->{co_zip}  = $1;
+            $form->{co_city} = $2;
+          } else {
+            $new_co_street .= $_;
+          }
+        }
+        $form->{co_street} = $new_co_street;
+      } else {
+        $form->{co_zip} = $form->{co_city};
+        $form->{co_zip} =~ s/\D//g;
+        $form->{co_city} =~ s/\d//g;
+        $form->{co_city} =~ s/^\s//g;
+      }
+
       my $tax_office           = first { $_->{name} eq $form->{elsterland} } @{ $ustva->{tax_office_information} };
       $form->{taxbird_land_nr} = $tax_office->{taxbird_nr} if $tax_office;
 
-      $form->{co_zip} = $form->{co_city};
-      $form->{co_zip} =~ s/\D//g;
-      $form->{co_city} =~ s/\d//g;
-      $form->{co_city} =~ s/^\s//g;
-
       ($form->{co_phone_prefix}, $form->{co_phone}) = split("-", $form->{tel});
       $form->{co_phone_prefix} =~ s/\s//g;
       $form->{co_phone} =~ s/\s//g;
 
        $form->{taxbird_steuernummer} = $form->{steuernummer};
       #      $form->{taxbird_steuernummer} =~ s/\D//g;
-      $form->{taxbird_steuernummer} =~ s/\///; # ersten Querstrich ersetzen
+#      $form->{taxbird_steuernummer} =~ s/\///; # ersten Querstrich ersetzen
 
       # Numberformatting for Taxbird
       my $temp_numberformat = $myconfig{numberformat};
@@ -1013,7 +1030,7 @@ sub generate_ustva {
 
     $form->{USTVA} = [];
 
-    if ( $form->{format} eq 'generic') { # Formatierungen für HTML Ausgabe
+    if ( $form->{format} eq 'generic') { # Formatierungen für HTML Ausgabe
 
       my $rec_ref = {};
       for my $kennziffer (@category_cent, @category_euro) {
@@ -1123,10 +1140,10 @@ $form->{title} = $locale->text('Tax Office Preferences');
 
   $ustva->get_coa($form, \%myconfig);
 
-  # hä? kann die weg?
+  # hä? kann die weg?
   my $steuernummer_new = '';
 
-  # Variablen für das Template zur Verfügung stellen
+  # Variablen für das Template zur Verfügung stellen
   my $template_ref = {
      select_tax_office               => $select_tax_office,
      checked_accrual                 => $checked_accrual,
@@ -1164,7 +1181,7 @@ sub config_step2 {
   $ustva->get_config($userspath, 'finanzamt.ini')
     if ($form->{saved} eq $locale->text('saved'));
 
-  # Auf Übergabefehler checken
+  # Auf Übergabefehler checken
   USTVA::info(  $locale->text('Missing Tax Authoritys Preferences') . "\n"
               . $locale->text('USTVA-Hint: Tax Authoritys'))
     if (   $form->{elsterFFFF_new} eq 'Auswahl'
@@ -1173,7 +1190,7 @@ sub config_step2 {
               . $locale->text('USTVA-Hint: Method'))
     if ($form->{method} eq '');
 
-  # Klären, ob Variablen bereits befüllt sind UND ob veräderungen auf
+  # 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)
 
@@ -1186,7 +1203,7 @@ sub config_step2 {
 
   if ($change eq '1') {
 
-    # Daten ändern
+    # Daten ändern
     $elsterland           = $form->{elsterland_new};
     $elsterFFFF           = $form->{elsterFFFF_new};
     $form->{elsterland}   = $elsterland;
@@ -1359,7 +1376,7 @@ sub save {
     FA_steuerberater_street FA_steuerberater_city FA_steuerberater_tel
     FA_71 FA_dauerfrist);
 
-  # Hier kommt dann die Plausibilitätsprüfung der ELSTERSteuernummer
+  # Hier kommt dann die Plausibilitätsprüfung der ELSTERSteuernummer
   if ($form->{elstersteuernummer} ne '000000000') {
 
     $form->{elster} = '1';