2 #=====================================================================
 
   4 # Copyright (c) 2004 by Udo Spallek, Aachen
 
   8 #     Web: http://www.lx-office.org
 
  11 # This program is free software; you can redistribute it and/or modify
 
  12 # it under the terms of the GNU General Public License as published by
 
  13 # the Free Software Foundation; either version 2 of the License, or
 
  14 # (at your option) any later version.
 
  16 # This program is distributed in the hope that it will be useful,
 
  17 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 
  18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
  19 # GNU General Public License for more details.
 
  20 # You should have received a copy of the GNU General Public License
 
  21 # along with this program; if not, write to the Free Software
 
  22 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
  23 #======================================================================
 
  24 # German Tax authority Module and later ELSTER Interface
 
  25 #======================================================================
 
  27 require "$form->{path}/arap.pl";
 
  32 #use warnings; # FATAL=> 'all';
 
  33 #use vars qw($locale $form %myconfig);
 
  35 #use CGI::Carp "fatalsToBrowser";
 
  43 # this is for our long dates
 
  44 # $locale->text('January')
 
  45 # $locale->text('February')
 
  46 # $locale->text('March')
 
  47 # $locale->text('April')
 
  48 # $locale->text('May ')
 
  49 # $locale->text('June')
 
  50 # $locale->text('July')
 
  51 # $locale->text('August')
 
  52 # $locale->text('September')
 
  53 # $locale->text('October')
 
  54 # $locale->text('November')
 
  55 # $locale->text('December')
 
  57 # this is for our short month
 
  58 # $locale->text('Jan')
 
  59 # $locale->text('Feb')
 
  60 # $locale->text('Mar')
 
  61 # $locale->text('Apr')
 
  62 # $locale->text('May')
 
  63 # $locale->text('Jun')
 
  64 # $locale->text('Jul')
 
  65 # $locale->text('Aug')
 
  66 # $locale->text('Sep')
 
  67 # $locale->text('Oct')
 
  68 # $locale->text('Nov')
 
  69 # $locale->text('Dec')
 
  71 # $form->parse_html_template('generic/util_hidden_variables');
 
  73 #############################
 
  76   $lxdebug->enter_sub();
 
  78   my $myconfig = \%myconfig;
 
  80   $form->{title} = $locale->text('UStVA');
 
  81   $form->{kz10}  = '';                       #Berichtigte Anmeldung? Ja =1 Nein=0
 
  83   my $year = substr($form->datetonum($form->current_date(\%myconfig), \%myconfig ),
 
  90   # Einlesen der Finanzamtdaten
 
  91   USTVA->get_config($userspath, 'finanzamt.ini');
 
  93   # Hier Einlesen der user-config
 
  94   # steuernummer entfernt für prerelease
 
  96     signature      name          company       address        businessnumber 
 
  97     tel            fax           email         co_chief       co_department 
 
  98     co_custom1     co_custom2    co_custom3    co_custom4     co_custom5
 
  99     co_name1       co_name2      co_street     co_street1     co_zip 
 
 100     co_city        co_city1      co_country    co_tel         co_tel1 
 
 101     co_tel2        co_fax        co_fax1       co_email       co_email1
 
 102     co_url         co_url1       ustid         duns           co_bankname 
 
 103     co_bankname1   co_bankname2  co_bankname3  co_blz         co_blz1
 
 104     co_blz2        co_blz3       co_accountnr  co_accountnr1  co_accountnr2 
 
 108   map { $form->{$_} = $myconfig->{$_} } @a;
 
 110   my $openings = $form->{FA_Oeffnungszeiten};
 
 111   $openings =~ s/\\\\n/<br>/g;
 
 113   my $company_given = ($form->{company} ne '') 
 
 114     ? qq|<h3>$form->{company}</h3>\n|
 
 115     : qq|<a href=am.pl?path=$form->{path}&action=config|
 
 116       . qq|&level=Programm--Preferences&login=$form->{login}|
 
 117       . qq|&password=$form->{password}>| 
 
 118       . $locale->text('No Company Name given') . qq|!</a><br>|;
 
 121   # Anpassungen der Variablennamen auf pre 2.1.1 Namen
 
 122   # klären, ob $form->{company_street|_address} gesetzt sind
 
 123   if ($form->{address} ne '') {
 
 124     my $temp = $form->{address};
 
 125     $temp =~ s/\\n/<br \/>/;
 
 126     ($form->{co_street}, $form->{co_city}) = split("<br \/>", $temp);
 
 127     $form->{co_city} =~ s/\\n//g;
 
 132     ($form->{co_street} ne '' 
 
 134         $form->{co_zip} ne ''
 
 135           or $form->{co_city} ne ''
 
 138     ? qq|$form->{co_street}<br>|
 
 139         . qq|$form->{co_street1}<br>|
 
 140         . qq|$form->{co_zip} $form->{co_city}|
 
 141     : qq|<a href=am.pl?path=$form->{path}&action=config|
 
 142         . qq|&level=Programm--Preferences&login=$form->{login}|
 
 143         . qq|&password=$form->{password}>| 
 
 144         . $locale->text('No Company Address given') 
 
 147   $form->{co_email} = $form->{email} unless $form->{co_email};
 
 148   $form->{co_tel}   = $form->{tel}   unless $form->{co_tel};
 
 149   $form->{co_fax}   = $form->{fax}   unless $form->{co_fax};
 
 150   $form->{co_url}   = $form->{urlx}  unless $form->{co_url};
 
 152   my $taxnumber_given = ($form->{steuernummer} ne '')
 
 153     ? qq|$form->{steuernummer}|
 
 154     : qq|<a href="ustva.pl?path=$form->{path}&action="config_step1"|
 
 155       . qq|&level=Programm--Finanzamteinstellungen&login=$form->{login}|
 
 156       . qq|&password=$form->{password}">Keine Steuernummer hinterlegt!|
 
 159   my $ustva_vorauswahl = &ustva_vorauswahl();
 
 161   my @all_years = $form->all_years(\%myconfig);
 
 163   my $select_year = qq|<select name=year title="| 
 
 164     . $locale->text('Year') . qq|">|;
 
 165   foreach my $key (@all_years) {
 
 166     $select_year .= qq|<option |;
 
 167     $select_year .= qq|selected| if ($key eq $form->{year});
 
 168     $select_year .= qq| >$key</option>|;
 
 170   $select_year   .=  qq|</select>|;
 
 173   $_checked = "checked" if ($form->{kz10} eq '1');
 
 174   my $checkbox_kz_10 = qq|<input name="FA_10" id=FA_10 class=checkbox|
 
 175     . qq| type=checkbox value="1" $_checked title = "|
 
 176     . $locale->text('Amended Advance Turnover Tax Return (Nr. 10)')
 
 178     . $locale->text('Amended Advance Turnover Tax Return'); 
 
 180   my $method_local = ($form->{method} eq 'accrual') ? $locale->text('accrual') 
 
 181                    : ($form->{method} eq 'cash')    ? $locale->text('cash')
 
 184   my $period_local = ( $form->{FA_voranmeld} eq 'month')   ? $locale->text('month')
 
 185                    : ( $form->{FA_voranmeld} eq 'quarter') ? $locale->text('quarter')
 
 188   my $tax_office_banks_ref = [
 
 189     { BLZ             => $form->{FA_BLZ_1},
 
 190       Kontonummer     => $form->{FA_Kontonummer_1},
 
 191       Bankbezeichnung => $form->{FA_Bankbezeichnung_1}
 
 193     { BLZ             => $form->{FA_BLZ_2},
 
 194       Kontonummer     => $form->{FA_Kontonummer_2},
 
 195       Bankbezeichnung => $form->{FA_Bankbezeichnung_oertlich}
 
 201     openings         => $openings,  
 
 202     company_given    => $company_given,
 
 203     address_given    => $address_given,     
 
 204     taxnumber_given  => $taxnumber_given,
 
 205     select_year      => $select_year,      
 
 206     period_local     => $period_local,
 
 207     method_local     => $method_local,
 
 208     ustva_vorauswahl => $ustva_vorauswahl,
 
 209     checkbox_kz_10   => $checkbox_kz_10,
 
 210     tax_office_banks => $tax_office_banks_ref,    
 
 211     select_options   => &show_options,    
 
 214   print($form->parse_html_template('ustva/report', $template_ref));
 
 218   $lxdebug->leave_sub();
 
 224   $lxdebug->enter_sub();
 
 226   # parse help documents under doc
 
 227   my $tmp = $form->{templates};
 
 228   $form->{templates} = 'doc';
 
 229   $form->{help}      = 'ustva';
 
 230   $form->{type}      = 'help';
 
 231   $form->{format}    = 'html';
 
 234   #$form->{templates} = $tmp;
 
 235   $lxdebug->leave_sub();
 
 239   $lxdebug->enter_sub();
 
 243   $lxdebug->leave_sub();
 
 244   &{ $form->{nextsub} };
 
 248 sub ustva_vorauswahl {
 
 249   $lxdebug->enter_sub();
 
 251   my $select_vorauswahl;
 
 253   #Aktuelles Datum zerlegen:
 
 254   my $date = $form->datetonum($form->current_date(\%myconfig), \%myconfig);
 
 256   #$locale->date($myconfig, $form->current_date($myconfig), 0)=~ /(\d\d).(\d\d).(\d\d\d\d)/;
 
 257   $form->{day}   = substr($date, 6, 2);
 
 258   $form->{month} = substr($date, 4, 2);
 
 259   $form->{year}  = substr($date, 0, 4);
 
 260   $lxdebug->message(LXDebug::DEBUG1, qq|
 
 261     Actual date from Database: $date\n    
 
 262     Actual year from Database: $form->{year}\n
 
 263     Actual day from Database: $form->{day}\n
 
 264     Actual month from Database: $form->{month}\n|);
 
 269   # Testdaten erzeugen:
 
 271   #$form->{month}= '01';
 
 272   #$form->{year}= 2004;
 
 273   $select_vorauswahl = qq|
 
 274      <input type=hidden name=day value=$form->{day}>
 
 275      <input type=hidden name=month value=$form->{month}>
 
 276      <input type=hidden name=yymmdd value=$yymmdd>
 
 277      <input type=hidden name=sel value=$sel>
 
 280   if ($form->{FA_voranmeld} eq 'month') {
 
 282     # Vorauswahl bei monatlichem Voranmeldungszeitraum
 
 284     my %liste = ('01' => $locale->text('January'),
 
 285                  '02' => $locale->text('February'),
 
 286                  '03' => $locale->text('March'),
 
 287                  '04' => $locale->text('April'),
 
 288                  '05' => $locale->text('May'),
 
 289                  '06' => $locale->text('June'),
 
 290                  '07' => $locale->text('July'),
 
 291                  '08' => $locale->text('August'),
 
 292                  '09' => $locale->text('September'),
 
 293                  '10' => $locale->text('October'),
 
 294                  '11' => $locale->text('November'),
 
 295                  '12' => $locale->text('December'),
 
 296                  '13' => $locale->text('Yearly'),
 
 299     my $yy = $form->{year} * 10000;
 
 300     $yymmdd = "$form->{year}$form->{month}$form->{day}" * 1;
 
 304     # Offset für Dauerfristverlängerung
 
 305     $dfv = '100' if ($form->{FA_dauerfrist} eq '1');
 
 308       $yymmdd <= ($yy + 110 + $dfv) && do {
 
 309         $form->{year} = $form->{year} - 1;
 
 313       $yymmdd <= ($yy + 210 + $dfv) && do {
 
 317       $yymmdd <= ($yy + 310 + $dfv) && do {
 
 321       $yymmdd <= ($yy + 410 + $dfv) && do {
 
 325       $yymmdd <= ($yy + 510 + $dfv) && do {
 
 329       $yymmdd <= ($yy + 610 + $dfv) && do {
 
 333       $yymmdd <= ($yy + 710 + $dfv) && do {
 
 337       $yymmdd <= ($yy + 810 + $dfv) && do {
 
 341       $yymmdd <= ($yy + 910 + $dfv) && do {
 
 345       $yymmdd <= ($yy + 1010 + $dfv) && do {
 
 349       $yymmdd <= ($yy + 1110 + $dfv) && do {
 
 353       $yymmdd <= ($yy + 1210) && do {
 
 357       $yymmdd <= ($yy + 1231) && do {
 
 363     $select_vorauswahl .= qq|<select id="zeitraum" name="period" title="|
 
 364   . $locale->text('Select a period') . qq|" >|;
 
 367     foreach $key (sort keys %liste) {
 
 369       $selected = 'selected' if ($sel eq $key);
 
 370       $select_vorauswahl .= qq|
 
 371          <option value="$key" $selected> $liste{$key}</option>
 
 374     $select_vorauswahl .= qq|</select>|;
 
 376   } elsif ($form->{FA_voranmeld} eq 'quarter') {
 
 378     # Vorauswahl bei quartalsweisem Voranmeldungszeitraum
 
 379     my %liste = ('41'  => $locale->text('1. Quarter'),
 
 380                  '42'  => $locale->text('2. Quarter'),
 
 381                  '43'  => $locale->text('3. Quarter'),
 
 382                  '44'  => $locale->text('4. Quarter'),
 
 383                  '13' => $locale->text('Yearly'),);
 
 385     my $yy = $form->{year} * 10000;
 
 386     $yymmdd = "$form->{year}$form->{month}$form->{day}" * 1;
 
 388     my $dfv = '';    # Offset für Dauerfristverlängerung
 
 389     $dfv = '100' if ($form->{FA_dauerfrist} eq '1');
 
 392       $yymmdd <= ($yy + 110 + $dfv) && do {
 
 393         $form->{year} = $form->{year} - 1;
 
 397       $yymmdd <= ($yy + 410 + $dfv) && do {
 
 401       $yymmdd <= ($yy + 710 + $dfv) && do {
 
 405       $yymmdd <= ($yy + 1010 + $dfv) && do {
 
 409       $yymmdd <= ($yy + 1231) && do {
 
 414     $select_vorauswahl .= qq|<select id="zeitraum" name="period" title="|
 
 415       . $locale->text('Select a period') . qq|" >|;
 
 417     foreach $key (sort keys %liste) {
 
 419       $selected = 'selected' if ($sel eq $key);
 
 420       $select_vorauswahl .= qq|
 
 421          <option value="$key" $selected>$liste{$key}</option>
 
 424     $select_vorauswahl .= qq|\n</select>
 
 429     # keine Vorauswahl bei Voranmeldungszeitraum
 
 430     $select_vorauswahl .= qq|<select id="zeitraum" name="period" title="|
 
 431       . $locale->text('Select a period') . qq|" >|;
 
 433     my %listea = ('41' => '1. Quarter',
 
 434                   '42' => '2. Quarter',
 
 435                   '43' => '3. Quarter',
 
 436                   '44' => '4. Quarter',);
 
 438     my %listeb = ('01' => 'January',
 
 452     foreach $key (sort keys %listea) {
 
 453       $select_vorauswahl .= qq|
 
 454          <option value="$key">|
 
 455         . $locale->text("$listea{$key}")
 
 459     foreach $key (sort keys %listeb) {
 
 460       $select_vorauswahl .= qq|
 
 461          <option value="$key">|
 
 462         . $locale->text("$listeb{$key}")
 
 465     $select_vorauswahl .= qq|</select>|;
 
 467   $lxdebug->leave_sub();
 
 469   return $select_vorauswahl;
 
 473 #  $lxdebug->enter_sub();
 
 475 #  $lxdebug->leave_sub();
 
 479   $lxdebug->enter_sub();
 
 481   $lxdebug->leave_sub();
 
 485   $lxdebug->enter_sub();
 
 487   #  $form->{PD}{$form->{type}} = "selected";
 
 488   #  $form->{DF}{$form->{format}} = "selected";
 
 489   #  $form->{OP}{$form->{media}} = "selected";
 
 490   #  $form->{SM}{$form->{sendmode}} = "selected";
 
 491   my $type   = qq|      <input type=hidden name="type" value="ustva">|;
 
 492   my $media  = qq|      <input type=hidden name="media" value="screen">|;
 
 494       qq|       <option value=html selected>|
 
 495     . $locale->text('Preview')
 
 497   if ($latex_templates) {
 
 499         qq|    <option value=pdf>|
 
 500       . $locale->text('UStVA (PDF-Dokument)')
 
 504   #my $disabled= qq|disabled="disabled"|;
 
 505   #$disabled='' if ($form->{elster} eq '1' );
 
 506   if ($form->{elster} eq '1') {
 
 508         qq|<option value=elsterwinston>|
 
 509       . $locale->text('ELSTER Export (Winston)')
 
 511       . qq|<option value=elstertaxbird>|
 
 512       . $locale->text('ELSTER Export (Taxbird)')
 
 516   #$format .= qq|<option value=elster>|.$locale->text('ELSTER Export nach Winston').qq|</option>|;
 
 517   my $show_options = qq|
 
 520     <select name=format title = "|
 
 521     . $locale->text('Choose Outputformat') . qq|">$format</select>
 
 523   $lxdebug->leave_sub();
 
 525   return $show_options;
 
 529   $lxdebug->enter_sub();
 
 531   # Aufruf von get_config zum Einlesen der Finanzamtdaten aus finanzamt.ini
 
 533   USTVA->get_config($userspath, 'finanzamt.ini');
 
 535   # init some form vars
 
 536   my @anmeldungszeitraum =
 
 537     qw('0401' '0402' '0403' 
 
 541        '0441' '0442' '0443' '0444');
 
 543   foreach my $item (@anmeldungszeitraum) {
 
 547     #forgotten the year --> thisyear
 
 548     if ($form->{year} !~ m/^\d\d\d\d$/) {
 
 549       $form->{year} = substr(
 
 551                                     $form->current_date(\%myconfig), \%myconfig
 
 554       $lxdebug->message(LXDebug::DEBUG1,
 
 555                         qq|Actual year from Database: $form->{year}\n|);
 
 559     # using dates in ISO-8601 format: yyyymmmdd  for Postgres...
 
 563     if ($form->{period} eq "13") {
 
 564       $form->{fromdate} = "$form->{year}0101";
 
 565       $form->{todate}   = "$form->{year}1231";
 
 569     if ($form->{period} eq "41") {
 
 570       $form->{fromdate} = "$form->{year}0101";
 
 571       $form->{todate}   = "$form->{year}0331";
 
 572       $form->{'0441'}   = "X";
 
 574     if ($form->{period} eq "42") {
 
 575       $form->{fromdate} = "$form->{year}0401";
 
 576       $form->{todate}   = "$form->{year}0630";
 
 577       $form->{'0442'}   = "X";
 
 579     if ($form->{period} eq "43") {
 
 580       $form->{fromdate} = "$form->{year}0701";
 
 581       $form->{todate}   = "$form->{year}0930";
 
 582       $form->{'0443'}   = "X";
 
 584     if ($form->{period} eq "44") {
 
 585       $form->{fromdate} = "$form->{year}1001";
 
 586       $form->{todate}   = "$form->{year}1231";
 
 587       $form->{'0444'}   = "X";
 
 592       $form->{period} eq "01" && do {
 
 593         $form->{fromdate} = "$form->{year}0101";
 
 594         $form->{todate}   = "$form->{year}0131";
 
 595         $form->{'0401'}   = "X";
 
 598       $form->{period} eq "02" && do {
 
 599         $form->{fromdate} = "$form->{year}0201";
 
 601         #this works from 1901 to 2099, 1900 and 2100 fail.
 
 602         my $leap = ($form->{year} % 4 == 0) ? "29" : "28";
 
 603         $form->{todate} = "$form->{year}02$leap";
 
 604         $form->{"0402"} = "X";
 
 607       $form->{period} eq "03" && do {
 
 608         $form->{fromdate} = "$form->{year}0301";
 
 609         $form->{todate}   = "$form->{year}0331";
 
 610         $form->{"0403"}   = "X";
 
 613       $form->{period} eq "04" && do {
 
 614         $form->{fromdate} = "$form->{year}0401";
 
 615         $form->{todate}   = "$form->{year}0430";
 
 616         $form->{"0404"}   = "X";
 
 619       $form->{period} eq "05" && do {
 
 620         $form->{fromdate} = "$form->{year}0501";
 
 621         $form->{todate}   = "$form->{year}0531";
 
 622         $form->{"0405"}   = "X";
 
 625       $form->{period} eq "06" && do {
 
 626         $form->{fromdate} = "$form->{year}0601";
 
 627         $form->{todate}   = "$form->{year}0630";
 
 628         $form->{"0406"}   = "X";
 
 631       $form->{period} eq "07" && do {
 
 632         $form->{fromdate} = "$form->{year}0701";
 
 633         $form->{todate}   = "$form->{year}0731";
 
 634         $form->{"0407"}   = "X";
 
 637       $form->{period} eq "08" && do {
 
 638         $form->{fromdate} = "$form->{year}0801";
 
 639         $form->{todate}   = "$form->{year}0831";
 
 640         $form->{"0408"}   = "X";
 
 643       $form->{period} eq "09" && do {
 
 644         $form->{fromdate} = "$form->{year}0901";
 
 645         $form->{todate}   = "$form->{year}0930";
 
 646         $form->{"0409"}   = "X";
 
 649       $form->{period} eq "10" && do {
 
 650         $form->{fromdate} = "$form->{year}1001";
 
 651         $form->{todate}   = "$form->{year}1031";
 
 652         $form->{"0410"}   = "X";
 
 655       $form->{period} eq "11" && do {
 
 656         $form->{fromdate} = "$form->{year}1101";
 
 657         $form->{todate}   = "$form->{year}1130";
 
 658         $form->{"0411"}   = "X";
 
 661       $form->{period} eq "12" && do {
 
 662         $form->{fromdate} = "$form->{year}1201";
 
 663         $form->{todate}   = "$form->{year}1231";
 
 664         $form->{"0412"}   = "X";
 
 669   # Kontrollvariable für die Templates 
 
 670   $form->{'year2007'} = ($form->{year} >= 2007 ) ? "1":"0";
 
 674   USTVA->ustva(\%myconfig, \%$form);
 
 676   # reformat Dates to dateformat
 
 677   $form->{fromdate} = $locale->date(\%myconfig, $form->{fromdate}, 0, 0, 0);
 
 679   $form->{todate} = $form->current_date(\%myconfig) unless $form->{todate};
 
 680   $form->{todate} = $locale->date(\%myconfig, $form->{todate}, 0, 0, 0);
 
 682   $form->{longperiod} =
 
 683     $locale->date(\%myconfig, $form->current_date(\%myconfig), 1, 0, 0);
 
 685   # if there are any dates construct a where
 
 686   if ($form->{fromdate} || $form->{todate}) {
 
 688     $form->{todate} = $form->current_date($myconfig)  unless ($form->{todate});
 
 690     my $longtodate  = $locale->date($myconfig, $form->{todate}, 1, 0, 0);
 
 691     my $shorttodate = $locale->date($myconfig, $form->{todate}, 0, 0, 0);
 
 693     my $longfromdate  = $locale->date($myconfig, $form->{fromdate}, 1, 0, 0);
 
 694     my $shortfromdate = $locale->date($myconfig, $form->{fromdate}, 0, 0, 0);
 
 696     $form->{this_period} = "$shortfromdate<br>\n$shorttodate";
 
 697     $form->{longperiod}      =
 
 698         $locale->text('for Period')
 
 699       . qq|<br>\n$longfromdate |
 
 700       . $locale->text('to (date)')
 
 704   if ($form->{comparefromdate} || $form->{comparetodate}) {
 
 705     my $longcomparefromdate =
 
 706       $locale->date(\%myconfig, $form->{comparefromdate}, 1, 0, 0);
 
 707     my $shortcomparefromdate =
 
 708       $locale->date(\%myconfig, $form->{comparefromdate}, 0, 0, 0);
 
 710     my $longcomparetodate =
 
 711       $locale->date(\%myconfig, $form->{comparetodate}, 1, 0, 0);
 
 712     my $shortcomparetodate =
 
 713       $locale->date(\%myconfig, $form->{comparetodate}, 0, 0, 0);
 
 715     $form->{last_period} = "$shortcomparefromdate<br>\n$shortcomparetodate";
 
 716     $form->{longperiod} .=
 
 717         "<br>\n$longcomparefromdate "
 
 718       . $locale->text('to (date)')
 
 719       . qq| $longcomparetodate|;
 
 722   $form->{Datum_heute} =
 
 723     $locale->date(\%myconfig, $form->current_date(\%myconfig), 0, 0, 0);
 
 725   # setup variables for the form
 
 726   my @a = qw(company businessnumber tel fax email
 
 727     co_chief co_department co_custom1 co_custom2 co_custom3 co_custom4 co_custom5
 
 728     co_name1 co_name2  co_street co_street1 co_zip co_city co_city1 co_country co_tel co_tel1 co_tel2
 
 729     co_fax co_fax1 co_email co_email1 co_url co_url1 ustid duns
 
 730     co_bankname co_bankname1 co_bankname2 co_bankname3 co_blz co_blz1
 
 731     co_blz2 co_blz3 co_accountnr co_accountnr1 co_accountnr2 co_accountnr3);
 
 733   map { $form->{$_} = $myconfig{$_} } @a;
 
 735   if ($form->{address} ne '') {
 
 736     my $temp = $form->{address};
 
 737     $temp =~ s/\\n/<br \/>/;
 
 738     ($form->{co_street}, $form->{co_city}) = split("<br \/>", $temp);
 
 739     $form->{co_city} =~ s/\\n//g;
 
 742   ################################
 
 744   # Nation specific customisations
 
 746   ################################
 
 750   if ( $form->{coa} eq 'Germany-DATEV-SKR03EU' or $form->{coa} eq 'Germany-DATEV-SKR04EU') {
 
 753     # Outputformat specific customisation's
 
 756     my @category_cent = qw(
 
 757       511 861 36   80   971  931  98   96   53   74
 
 758       85  65  66   61   62   67   63   64   59   69 
 
 759       39  83  811  891  Z43  Z45  Z53  Z62  Z65  Z67
 
 763     my @category_euro = qw(
 
 764       41 44 49 43 48 51 86 35 77 76 91 89
 
 765       97 93 95 94 42 60 45 52 73 84 81 
 
 769     $form->{amount} = [];
 
 771     if ( $form->{format} eq 'pdf' or $form->{format} eq 'postscript') {
 
 773       $form->{IN} = "$form->{type}-$form->{year}.tex";
 
 774       $form->{padding} = "~~";
 
 775       $form->{bold}    = "\textbf{";
 
 776       $form->{endbold} = "}";
 
 777       $form->{br}      = '\\\\';
 
 779       # Zahlenformatierung für Latex USTVA Formulare
 
 781       foreach my $number (@category_euro) {
 
 782         $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '0', '');
 
 785       my ${decimal_comma} = ( $myconfig{numberformat} eq '1.000,00'
 
 786            or $myconfig{numberformat} eq '1000,00' ) ? ',':'.';
 
 788       foreach my $number (@category_cent) {
 
 789         $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '');
 
 790         $form->{$number} =~ s/${decimal_comma}/~~/g;
 
 793     } elsif ( $form->{format} eq 'html') { # Formatierungen für HTML Ausgabe
 
 795       $form->{IN} = $form->{type} . '.html';
 
 796       $form->{padding} = "  ";
 
 797       $form->{bold}    = "<b>";
 
 798       $form->{endbold} = "</b>";
 
 799       $form->{br}      = "<br>";
 
 800       $form->{address} =~ s/\\n/\n/g;
 
 802       foreach $number (@category_cent) {
 
 803         $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '0');
 
 806       foreach $number (@category_euro) {
 
 807         $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '0', '0');
 
 810     } elsif ( $form->{format} eq 'elsterwinston' ) {
 
 812       $form->{IN} = 'winston.xml';
 
 815       # Build Winston filename
 
 818       my $file = 'U';     # 1. char 'U' = USTVA
 
 819       $file .= $form->{period};
 
 820       #4. and 5. char = year modulo 100
 
 821       $file .= sprintf("%02d", $form->{year} % 100);
 
 822       #6. to 18. char = Elstersteuernummer
 
 823       #Beispiel: Steuernummer in Bayern
 
 824       #111/222/33334 ergibt für UStVA Jan 2004: U01049111022233334
 
 825       $file .= $form->{elsterFFFF};
 
 826       $file .= $form->{elstersteuernummer};
 
 829       $form->{tmpfile} = "$userspath/$file";
 
 831       $form->{attachment_filename} = "$file";
 
 833       # Zahlenformatierung für Winston
 
 835       my $temp_numberformat = $myconfig{numberformat};
 
 837       # Numberformat must be '1000.00' for Winston
 
 839       $myconfig{numberformat} = '1000.00';
 
 841       foreach my $number (@category_cent) {
 
 842         $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '2', '') : '';
 
 845       foreach my $number (@category_euro) {
 
 846         $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '0', '') : '';
 
 848       # Re-set Numberformat
 
 849       $myconfig{numberformat} = $temp_numberformat;
 
 852       # push Kennziffern to <%foreach Array fo easyer
 
 853       # output in xml format. Thx to Moritz.
 
 854       my %winston_id_for = (
 
 859       foreach my $kennziffer (@category_cent, @category_euro) {
 
 861         next if ( $kennziffer =~ m/Z\d\d/);
 
 862         next if (   $form->{$kennziffer} == 0 );
 
 864         if (defined $winston_id_for{$kennziffer} ) {
 
 865           push(@{ $form->{id}}, $winston_id_for{$kennziffer});
 
 867           push(@{ $form->{id}}, "$kennziffer"); 
 
 869         push(@{ $form->{amount}}, $form->{$kennziffer});
 
 873     } elsif ( $form->{format} eq 'elstertaxbird' ) {
 
 875       # Define serveral filenames
 
 876       $form->{IN} = 'taxbird.txb';
 
 878       $form->{attachment_filename} = "USTVA-" . $form->{period} 
 
 879       . sprintf("%02d", $form->{year} % 100) . ".txb";
 
 881       $form->{tmpfile} = "$userspath/" . $form->{attachment_filename};
 
 883       # TODO: set Output to UTF-8 or system Preference
 
 884       #$form->{"iconv"} = Text::Iconv->new($myconfig{dbcharset}, "UTF-8");
 
 885       #my $iconv = $self->{"iconv"};
 
 886       #$iconv->convert($variable);
 
 887       if ($form->{period} =~ /^[4]\d$/ ){
 
 888         my %periods = ( # Lx => taxbird
 
 895         foreach my $quarter ( keys %periods ) {
 
 896           $form->{taxbird_period} = $periods{$quarter} if ( $form->{period} eq $quarter);
 
 898       } elsif ($form->{period} =~ /^\d+$/ ) {
 
 899         $form->{period} =~ s/^0//g;
 
 900         my $period = $form->{period};
 
 903         $form->{period} = $period;
 
 906         USTVA::error( $locale->text('Wrong Period' ));
 
 910       my %lands = ( # Lx => taxbird # TODO: besser als array...
 
 911                   'Baden Würtemberg'       => '0',
 
 914                   'Brandenburg'            => '3',
 
 918                   'Mecklenburg Vorpommern' => '7',
 
 919                   'Niedersachsen'          => '8',
 
 920                   'Nordrhein Westfalen'    => '9',
 
 921                   'Rheinland Pfalz'        => '10',
 
 924                   'Sachsen Anhalt'         => '13',
 
 925                   'Schleswig Holstein'     => '14',
 
 928       foreach my $land ( keys %lands ){
 
 929         $form->{taxbird_land_nr} = $lands{$land} if ($form->{elsterland} eq $land );
 
 932       $form->{co_zip} = $form->{co_city};
 
 933       $form->{co_zip} =~ s/\D//g;
 
 934       $form->{co_city} =~ s/\d//g;
 
 935       $form->{co_city} =~ s/^\s//g;
 
 937       ($form->{co_phone_prefix}, $form->{co_phone}) = split("-", $form->{tel});
 
 938       $form->{co_phone_prefix} =~ s/\s//g;
 
 939       $form->{co_phone} =~ s/\s//g;
 
 941        $form->{taxbird_steuernummer} = $form->{steuernummer};
 
 942       #      $form->{taxbird_steuernummer} =~ s/\D//g;
 
 943       $form->{taxbird_steuernummer} =~ s/\///; # ersten Querstrich ersetzen
 
 945       # Numberformatting for Taxbird
 
 946       my $temp_numberformat = $myconfig{numberformat};
 
 947       # Numberformat must be '1000,00' for Taxbird ?!
 
 948       $myconfig{numberformat} = '1000,00';
 
 949       foreach my $number (@category_cent) {
 
 950         $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '2', '') : '';
 
 953       foreach my $number (@category_euro) {
 
 954         $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '0', '') : '';
 
 956       # Re-set Numberformat
 
 957       $myconfig{numberformat} = $temp_numberformat;
 
 959       # push Kennziffern to <%foreach Array fo easyer
 
 960       # output in xml format. Thx to Moritz.
 
 961       my %taxbird_id_for = (
 
 963           '511'  =>  'Kz51-calc',
 
 964           '861'  =>  'Kz86-calc',
 
 965           '971'  =>  'Kz97-calc',
 
 966           '931'  =>  'Kz93-calc',
 
 967           '811'  =>  'Kz81-calc',
 
 968           '891'  =>  'Kz89-calc',
 
 969           'Z45'  =>  'uebertrag',
 
 971           'Z62'  =>  'ust-minus-vost',
 
 972           'Z65'  =>  'ust-sum+69',
 
 977       for my $kennziffer (@category_cent, @category_euro) {
 
 979         next if ($kennziffer eq 'Z43');
 
 981         if ($form->{$kennziffer} != 0){
 
 982           if (defined $taxbird_id_for{$kennziffer}) {
 
 983             push(@{ $form->{id}}, $taxbird_id_for{$kennziffer});
 
 985             push(@{ $form->{id}}, "Kz$kennziffer"); 
 
 987           push(@{ $form->{amount}}, $form->{$kennziffer});
 
 991     } elsif ( $form->{format} eq '' ){ # No format error.
 
 993       USTVA::error( $locale->text('Application Error. No Format given' ) . "!");
 
 996     } else { # All other Formats are wrong
 
 998       USTVA::error( $locale->text('Application Error. Wrong Format') . ": " . $form->{format} );
 
1003   } elsif ($form->{coa} eq 'Austria') {
 
1006     # Outputformat specific customisation's
 
1009     my @category_euro = qw(
 
1010       511 861 36   80   971  931  98   96   53   74
 
1011       85  65  66   61   62   67   63   64   59   69 
 
1012       39  83  811  891  Z43  Z45  Z53  Z62  Z65  Z67
 
1013       41 44 49 43 48 51 86 35 77 76 91 89
 
1014       97 93 95 94 42 60 45 52 73 84 81 
 
1018     if ( $form->{format} eq 'html') { # Formatierungen für HTML Ausgabe
 
1020       $form->{IN} = $form->{type} . '.html';
 
1021       $form->{padding} = "  ";
 
1022       $form->{bold}    = "<b>";
 
1023       $form->{endbold} = "</b>";
 
1024       $form->{br}      = "<br>";
 
1025       $form->{address} =~ s/\\n/\n/g;
 
1027       foreach $number (@category_euro) {
 
1028         $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '0');
 
1034   # end nation specific customisations
 
1036   if ( $form->{period} eq '13' and $form->{format} ne 'html') {
 
1040       'Yearly taxreport not yet implemented')
 
1044   $form->{templates} = $myconfig{templates};
 
1045   $form->{templates} = "doc" if ( $form->{type} eq 'help' );
 
1047   $form->parse_template(\%myconfig, $userspath);
 
1049   $lxdebug->leave_sub();
 
1053   $lxdebug->enter_sub();
 
1055   # edit all taxauthority prefs
 
1058   USTVA->get_config($userspath, 'finanzamt.ini');
 
1060   my $land = $form->{elsterland};
 
1061   my $amt  = $form->{elsterFFFF};
 
1064   if ($form->{cbscript} ne '' and $form->{cblogin} ne '') {
 
1065     $callback =  qq|$form->{cbscript}|
 
1066                 .qq|?action="config_step1"|
 
1067                 .qq|&login="$form->{cblogin}"|
 
1068                 .qq|&path="$form->{cbpath}"|
 
1069                 .qq|&root="$form->{cbroot}"|
 
1070                 .qq|&rpw="$form->{cbrpw}"|;
 
1073   $form->{title} = $locale->text('Tax Office Preferences');
 
1076   my $select_tax_office = USTVA->fa_auswahl($land, $amt, &elster_hash());
 
1077   my $checked_accrual = q|checked="checked"| if ($form->{method} eq 'accrual');
 
1078   my $checked_cash = q|checked="checked"| if ($form->{method} eq 'cash');
 
1079   my $checked_monthly = "checked" if ($form->{FA_voranmeld} eq 'month');
 
1080   my $checked_quarterly = "checked" if ($form->{FA_voranmeld} eq 'quarter');
 
1081   my $checked_dauerfristverlaengerung = "checked" if ($form->{FA_dauerfrist} eq '1');
 
1082   my $checked_kz_71 = "checked" if ($form->{FA_71} eq 'X');
 
1084   my $_hidden_variables_ref;
 
1086   my %_hidden_local_variables = (    
 
1087     'saved'       => $locale->text('Check Details'),
 
1088     'nextsub'     => 'config_step2',
 
1092   foreach my $variable (keys %_hidden_local_variables) {
 
1093     push @{ $_hidden_variables_ref }, 
 
1094         { 'variable' => $variable, 'value' => $_hidden_local_variables{$variable} };
 
1097   my @_hidden_form_variables = qw(
 
1098     FA_Name             FA_Strasse        FA_PLZ             
 
1099     FA_Ort              FA_Telefon        FA_Fax           
 
1100     FA_PLZ_Grosskunden  FA_PLZ_Postfach   FA_Postfach 
 
1101     FA_BLZ_1            FA_Kontonummer_1  FA_Bankbezeichnung_1  
 
1102     FA_BLZ_2            FA_Kontonummer_2  FA_Bankbezeichnung_oertlich
 
1103     FA_Oeffnungszeiten  FA_Email          FA_Internet
 
1104     steuernummer        elsterland        elstersteuernummer
 
1105     elsterFFFF          path              login
 
1109   foreach my $variable (@_hidden_form_variables) {
 
1110     push @{ $_hidden_variables_ref}, 
 
1111         { 'variable' => $variable, 'value' => $form->{$variable} };
 
1115   my $steuernummer_new = '';
 
1117   # Variablen für das Template zur Verfügung stellen
 
1118   my $template_ref = {
 
1119      select_tax_office               => $select_tax_office,
 
1120      checked_accrual                 => $checked_accrual,
 
1121      checked_cash                    => $checked_cash,
 
1122      checked_monthly                 => $checked_monthly,
 
1123      checked_quarterly               => $checked_quarterly,
 
1124      checked_dauerfristverlaengerung => $checked_dauerfristverlaengerung,
 
1125      hidden_variables                => $_hidden_variables_ref,
 
1129   # Ausgabe des Templates
 
1130   print($form->parse_html_template('ustva/config_step1', $template_ref));
 
1132   $lxdebug->leave_sub();
 
1136   $lxdebug->enter_sub();
 
1143   my $elsterland         = '';
 
1144   my $elster_amt         = '';
 
1145   my $elsterFFFF         = '';
 
1146   my $elstersteuernummer = '';
 
1147   USTVA->get_config($userspath, 'finanzamt.ini')
 
1148     if ($form->{saved} eq $locale->text('saved'));
 
1150   # Auf Übergabefehler checken
 
1151   USTVA::info(  $locale->text('Missing Tax Authoritys Preferences') . "\n"
 
1152               . $locale->text('USTVA-Hint: Tax Authoritys'))
 
1153     if (   $form->{elsterFFFF_new} eq 'Auswahl'
 
1154         || $form->{elsterland_new} eq 'Auswahl');
 
1155   USTVA::info(  $locale->text('Missing Method!') . "\n"
 
1156               . $locale->text('USTVA-Hint: Method'))
 
1157     if ($form->{method} eq '');
 
1159   # Klären, ob Variablen bereits befüllt sind UND ob veräderungen auf
 
1160   # der vorherigen Maske stattfanden: $change = 1(in der edit sub,
 
1161   # mittels get_config)
 
1163   my $change = $form->{elsterland} eq $form->{elsterland_new}
 
1164     && $form->{elsterFFFF} eq $form->{elsterFFFF_new} ? '0' : '1';
 
1165   $change = '0' if ($form->{saved} eq $locale->text('saved'));
 
1166   my $elster_init = &elster_hash();
 
1168   my %elster_init = %$elster_init;
 
1170   if ($change eq '1') {
 
1173     $elsterland           = $form->{elsterland_new};
 
1174     $elsterFFFF           = $form->{elsterFFFF_new};
 
1175     $form->{elsterland}   = $elsterland;
 
1176     $form->{elsterFFFF}   = $elsterFFFF;
 
1177     $form->{steuernummer} = '';
 
1179     create_steuernummer();
 
1181     # rebuild elster_amt
 
1183     foreach $amt (keys %{ $elster_init{ $form->{elsterland} } }) {
 
1185         if ($elster_init{ $form->{elsterland}{$amt} eq $form->{elsterFFFF} });
 
1188     # load the predefined hash data into the FA_* Vars
 
1189     my @variables = qw(FA_Name FA_Strasse FA_PLZ FA_Ort
 
1190       FA_Telefon FA_Fax FA_PLZ_Grosskunden FA_PLZ_Postfach
 
1192       FA_BLZ_1 FA_Kontonummer_1 FA_Bankbezeichnung_1
 
1193       FA_BLZ_2 FA_Kontonummer_2 FA_Bankbezeichnung_oertlich
 
1194       FA_Oeffnungszeiten FA_Email FA_Internet);
 
1196     for (my $i = 0; $i <= 20; $i++) {
 
1197       $form->{ $variables[$i] } =
 
1198         $elster_init->{$elsterland}->{$elsterFFFF}->[$i];
 
1203     $elsterland = $form->{elsterland};
 
1204     $elsterFFFF = $form->{elsterFFFF};
 
1207   my $stnr = $form->{steuernummer};
 
1209   my $patterncount   = $form->{patterncount};
 
1210   my $elster_pattern = $form->{elster_pattern};
 
1211   my $delimiter      = $form->{delimiter};
 
1212   my $steuernummer = $form->{steuernummer} if ($steuernummer eq '');
 
1214   $form->{FA_Oeffnungszeiten} =~ s/\\\\n/\n/g;
 
1218   my $input_steuernummer = USTVA->steuernummer_input(
 
1219                              $form->{elsterland}, 
 
1220                              $form->{elsterFFFF},
 
1221                              $form->{steuernummer}
 
1224   $lxdebug->message(LXDebug::DEBUG1, qq|$input_steuernummer|);
 
1227   my $_hidden_variables_ref;
 
1229   my %_hidden_local_variables = (
 
1230       'elsterland'          => $elsterland,
 
1231       'elsterFFFF'          => $elsterFFFF,
 
1232       'warnung'             => $warnung,
 
1233       'elstersteuernummer'  => $elstersteuernummer,
 
1234       'steuernummer'        => $stnr,
 
1235       'lastsub'             => 'config_step1',
 
1236       'nextsub'             => 'save',
 
1240   foreach my $variable (keys %_hidden_local_variables) {
 
1241     push @{ $_hidden_variables_ref }, 
 
1242         { 'variable' => $variable, 'value' => $_hidden_local_variables{$variable} };
 
1245   my @_hidden_form_variables = qw(
 
1246     FA_steuerberater_name   FA_steuerberater_street 
 
1247     FA_steuerberater_city   FA_steuerberater_tel
 
1258   foreach my $variable (@_hidden_form_variables) {
 
1259     push @{ $_hidden_variables_ref}, 
 
1260         { 'variable' => $variable, 'value' => $form->{$variable} };
 
1263   my $template_ref = {
 
1264      tax_office_data                 => $tax_office_data,
 
1265      input_steuernummer              => $input_steuernummer,
 
1266      readonly                        => '', #q|disabled="disabled"|,
 
1267      callback                        => $callback,
 
1268      hidden_variables                => $_hidden_variables_ref,
 
1271   # Ausgabe des Templates
 
1272   print($form->parse_html_template('ustva/config_step2', $template_ref));
 
1275   $lxdebug->leave_sub();
 
1278 sub create_steuernummer {
 
1279   $lxdebug->enter_sub();
 
1280   my $part           = $form->{part};
 
1281   my $patterncount   = $form->{patterncount};
 
1282   my $delimiter      = $form->{delimiter};
 
1283   my $elster_pattern = $form->{elster_pattern};
 
1285   # rebuild steuernummer and elstersteuernummer
 
1286   # es gibt eine gespeicherte steuernummer $form->{steuernummer}
 
1287   # und die parts und delimiter
 
1292   my $steuernummer_new       = $part;
 
1293   my $elstersteuernummer_new = $form->{elster_FFFF};
 
1294   $elstersteuernummer_new .= '0';
 
1296   for ($h = 1; $h < $patterncount; $h++) {
 
1297     $steuernummer_new .= qq|$delimiter|;
 
1298     for (my $i = 1; $i <= length($elster_pattern); $i++) {
 
1299       $steuernummer_new       .= $form->{"part_$h\_$i"};
 
1300       $elstersteuernummer_new .= $form->{"part_$h\_$i"};
 
1303   if ($form->{steuernummer} ne $steuernummer_new) {
 
1304     $form->{steuernummer}       = $steuernummer_new;
 
1305     $form->{elstersteuernummer} = $elstersteuernummer_new;
 
1306     $form->{steuernummer_new}   = $steuernummer_new;
 
1308     $form->{steuernummer_new}       = '';
 
1309     $form->{elstersteuernummer_new} = '';
 
1311   $lxdebug->leave_sub();
 
1315   $lxdebug->enter_sub();
 
1316   my $filename = "$form->{login}_$form->{filename}";
 
1318   #zuerst die steuernummer aus den part, parts_X_Y und delimiter herstellen
 
1319   create_steuernummer();
 
1321   # Textboxen formatieren: Linebreaks entfernen
 
1323   $form->{FA_Oeffnungszeiten} =~ s/\r\n/\\n/g;
 
1325   #URL mit http:// davor?
 
1326   $form->{FA_Internet} =~ s/^http:\/\///;
 
1327   $form->{FA_Internet} = 'http://' . $form->{FA_Internet};
 
1330     elster              elsterland            elstersteuernummer  steuernummer
 
1331     elsteramt           elsterFFFF            FA_Name             FA_Strasse
 
1332     FA_PLZ              FA_Ort                FA_Telefon          FA_Fax 
 
1333     FA_PLZ_Grosskunden  FA_PLZ_Postfach       FA_Postfach         FA_BLZ_1 
 
1334     FA_Kontonummer_1    FA_Bankbezeichnung_1  FA_BLZ_2            FA_Kontonummer_2
 
1335     FA_Bankbezeichnung_oertlich FA_Oeffnungszeiten
 
1336     FA_Email FA_Internet FA_voranmeld method FA_steuerberater_name
 
1337     FA_steuerberater_street FA_steuerberater_city FA_steuerberater_tel
 
1338     FA_71 FA_dauerfrist);
 
1340   # Hier kommt dann die Plausibilitätsprüfung der ELSTERSteuernummer
 
1341   if ($form->{elstersteuernummer} ne '000000000') {
 
1342     $form->{elster} = '1';
 
1343     open(CONF, ">$userspath/$filename") or $form->error("$filename : $!");
 
1345     # create the config file
 
1346     print CONF qq|# Configuration file for USTVA\n\n|;
 
1348     foreach $key (sort @config) {
 
1349       $form->{$key} =~ s/\\/\\\\/g;
 
1351       $form->{$key} =~ s/\r\n/\n/g;
 
1353       print CONF qq|$key=|;
 
1354       if ($form->{$key} ne 'Y') {
 
1355         print CONF qq|$form->{$key}\n|;
 
1357       if ($form->{$key} eq 'Y') {
 
1358         print CONF qq|checked \n|;
 
1361     print CONF qq|\n\n|;
 
1363     $form->{saved} = $locale->text('saved');
 
1367     $form->{saved} = $locale->text('Choose a Tax Number');
 
1371   $lxdebug->leave_sub();
 
1376   $lxdebug->enter_sub();
 
1378   # allow Symbolic references just here:
 
1380   &{ $form->{nextsub} };
 
1382   $lxdebug->leave_sub();
 
1386   $lxdebug->enter_sub();
 
1387   &{ $form->{lastsub} };
 
1388   $lxdebug->leave_sub();
 
1392   $lxdebug->enter_sub();
 
1393   my $finanzamt = USTVA->query_finanzamt(\%myconfig, \%$form);
 
1394   $lxdebug->leave_sub();