Merge branch 'master' of ssh://git-sdonath@lx-office.linet-services.de/~/lx-office-erp
[kivitendo-erp.git] / bin / mozilla / ustva.pl
index 1f69c0a..db6995f 100644 (file)
@@ -1,4 +1,3 @@
-#!/bin/perl
 #=====================================================================
 # Lx-Office ERP
 # Copyright (c) 2004 by Udo Spallek, Aachen
@@ -24,6 +23,8 @@
 # German Tax authority Module and later ELSTER Interface
 #======================================================================
 
+use utf8;
+
 require "bin/mozilla/common.pl";
 
 #use strict;
@@ -34,6 +35,8 @@ require "bin/mozilla/common.pl";
 #our ($myconfig);
 #use CGI::Carp "fatalsToBrowser";
 
+use List::Util qw(first);
+
 use SL::PE;
 use SL::RP;
 use SL::USTVA;
@@ -88,10 +91,11 @@ sub report {
   $form->header;
 
   # Einlesen der Finanzamtdaten
-  USTVA->get_config($userspath, 'finanzamt.ini');
+  my $ustva = USTVA->new();
+  $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
@@ -118,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 \/>/;
@@ -142,11 +146,7 @@ sub report {
   $form->{co_fax}   = $form->{fax}   unless $form->{co_fax};
   $form->{co_url}   = $form->{urlx}  unless $form->{co_url};
 
-  my $taxnumber_given = ($form->{steuernummer} ne '')
-    ? qq|$form->{steuernummer}|
-    : qq|<a href="ustva.pl?action="config_step1"|
-      . qq|&level=Programm--Finanzamteinstellungen">Keine Steuernummer hinterlegt!|
-      . qq|</a><br>|;
+  my $taxnumber_given = ($form->{steuernummer} ne '') ? $form->{steuernummer} : qq|<a href="ustva.pl?action=config_step1">Keine Steuernummer hinterlegt!</a><br>|;
 
   my $ustva_vorauswahl = &ustva_vorauswahl();
 
@@ -190,7 +190,7 @@ sub report {
 
   # Which COA is in use?
 
-  USTVA->get_coa($form, $myconfig);
+  $ustva->get_coa($form, $myconfig);
 
   my $template_ref = {
     openings         => $openings,
@@ -304,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: {
@@ -388,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: {
@@ -537,7 +537,8 @@ sub generate_ustva {
 
   # Aufruf von get_config zum Einlesen der Finanzamtdaten aus finanzamt.ini
 
-  USTVA->get_config($userspath, 'finanzamt.ini');
+  my $ustva = USTVA->new();
+  $ustva->get_config($userspath, 'finanzamt.ini');
 
   # init some form vars
   my @anmeldungszeitraum =
@@ -673,12 +674,12 @@ sub generate_ustva {
       };
     }
 
-  # Kontrollvariable für die Templates
+  # Kontrollvariable für die Templates
   $form->{'year2007'} = ($form->{year} >= 2007 ) ? "1":"0";
 
 
   # Get the USTVA
-  USTVA->ustva(\%myconfig, \%$form);
+  $ustva->ustva(\%myconfig, \%$form);
 
   # reformat Dates to dateformat
   $form->{fromdate} = $locale->date(\%myconfig, $form->{fromdate}, 0, 0, 0);
@@ -760,7 +761,7 @@ sub generate_ustva {
     # Outputformat specific customisation's
     #
 
-    my @category_cent = USTVA->report_variables({
+    my @category_cent = $ustva->report_variables({
         myconfig    => \%myconfig,
         form        => $form,
         type        => '',
@@ -770,7 +771,7 @@ sub generate_ustva {
 
     push @category_cent, qw(83  Z43  Z45  Z53  Z62  Z65  Z67);
 
-    my @category_euro = USTVA->report_variables({
+    my @category_euro = $ustva->report_variables({
         myconfig    => \%myconfig,
         form        => $form,
         type        => '',
@@ -789,7 +790,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', '');
@@ -803,7 +804,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;";
@@ -834,7 +835,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
@@ -844,7 +845,7 @@ sub generate_ustva {
 
       $form->{attachment_filename} = $file;
 
-      # Zahlenformatierung für Winston
+      # Zahlenformatierung für Winston
 
       my $temp_numberformat = $myconfig{numberformat};
 
@@ -916,30 +917,11 @@ sub generate_ustva {
       } else {
         $form->header;
         USTVA::error( $locale->text('Wrong Period' ));
-        exit(0);
+        ::end_of_request();
       }
 
-      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->{taxbird_land_nr} = $lands{$land} if ($form->{elsterland} eq $land );
-      }
+      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;
@@ -1003,19 +985,19 @@ sub generate_ustva {
     } elsif ( $form->{format} eq '' ){ # No format error.
       $form->header;
       USTVA::error( $locale->text('Application Error. No Format given' ) . "!");
-      exit(0);
+      ::end_of_request();
 
     } else { # All other Formats are wrong
       $form->header;
       USTVA::error( $locale->text('Application Error. Wrong Format') . ": " . $form->{format} );
-      exit(0);
+      ::end_of_request();
     }
 
 
   } else  # Outputformat for generic output
   {
 
-    my @category_cent = USTVA->report_variables({
+    my @category_cent = $ustva->report_variables({
         myconfig    => \%myconfig,
         form        => $form,
         type        => '',
@@ -1023,7 +1005,7 @@ sub generate_ustva {
         dec_places  => '2',
     });
 
-    my @category_euro = USTVA->report_variables({
+    my @category_euro = $ustva->report_variables({
         myconfig    => \%myconfig,
         form        => $form,
         type        => '',
@@ -1033,7 +1015,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) {
@@ -1086,10 +1068,14 @@ sub config_step1 {
 
   $auth->assert('advance_turnover_tax_return');
 
+$form->{title} = $locale->text('Tax Office Preferences');
+
   # edit all taxauthority prefs
 
   $form->header;
-  USTVA->get_config($userspath, 'finanzamt.ini');
+
+  my $ustva = USTVA->new();
+  $ustva->get_config($userspath, 'finanzamt.ini');
 
   my $land = $form->{elsterland};
   my $amt  = $form->{elsterFFFF};
@@ -1098,7 +1084,7 @@ sub config_step1 {
   $form->{title} = $locale->text('Tax Office Preferences');
 
 
-  my $select_tax_office = USTVA->fa_auswahl($land, $amt, &elster_hash());
+  my $select_tax_office = $ustva->fa_auswahl($land, $amt, $ustva->query_finanzamt(\%myconfig, $form));
   my $checked_accrual = q|checked="checked"| if ($form->{method} eq 'accrual');
   my $checked_cash = q|checked="checked"| if ($form->{method} eq 'cash');
   my $checked_monthly = "checked" if ($form->{FA_voranmeld} eq 'month');
@@ -1137,12 +1123,12 @@ sub config_step1 {
 
 # Which COA is in use?
 
-  USTVA->get_coa($form, \%myconfig);
+  $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,
@@ -1175,10 +1161,12 @@ sub config_step2 {
   my $elster_amt         = '';
   my $elsterFFFF         = '';
   my $elstersteuernummer = '';
-  USTVA->get_config($userspath, 'finanzamt.ini')
+
+  my $ustva = USTVA->new();
+  $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'
@@ -1187,20 +1175,20 @@ 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)
 
   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();
+  my $elster_init = $ustva->query_finanzamt(\%myconfig, $form);
 
   my %elster_init = %$elster_init;
 
   if ($change eq '1') {
 
-    # Daten ändern
+    # Daten ändern
     $elsterland           = $form->{elsterland_new};
     $elsterFFFF           = $form->{elsterFFFF_new};
     $form->{elsterland}   = $elsterland;
@@ -1245,8 +1233,9 @@ sub config_step2 {
   $form->{FA_Oeffnungszeiten} =~ s/\\\\n/\n/g;
 
 
+  $ustva->get_coa($form, \%myconfig);
 
-  my $input_steuernummer = USTVA->steuernummer_input(
+  my $input_steuernummer = $ustva->steuernummer_input(
                              $form->{elsterland},
                              $form->{elsterFFFF},
                              $form->{steuernummer}
@@ -1372,7 +1361,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';
@@ -1425,12 +1414,3 @@ sub back {
   $lxdebug->leave_sub();
 }
 
-sub elster_hash {
-  $lxdebug->enter_sub();
-
-  $auth->assert('advance_turnover_tax_return');
-
-  my $finanzamt = USTVA->query_finanzamt(\%myconfig, \%$form);
-  $lxdebug->leave_sub();
-  return $finanzamt;
-}