Bug 528 solved. Better Taxbird export for USTVA.
[kivitendo-erp.git] / bin / mozilla / ustva.pl
1 #!/bin/perl
2 #=====================================================================
3 # Lx-Office ERP
4 # Copyright (c) 2004 by Udo Spallek, Aachen
5 #
6 #  Author: Udo Spallek
7 #   Email: udono@gmx.net
8 #     Web: http://www.lx-office.org
9 #
10 #
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.
15 #
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 #======================================================================
26
27 require "$form->{path}/arap.pl";
28
29 #use strict;
30 #no strict 'refs';
31 #use diagnostics;
32 #use warnings; # FATAL=> 'all';
33 #use vars qw($locale $form %myconfig);
34 #our ($myconfig);
35 #use CGI::Carp "fatalsToBrowser";
36
37 use SL::PE;
38 use SL::RP;
39 use SL::USTVA;
40 use SL::User;
41 1;
42
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')
56
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')
70
71 # $form->parse_html_template('generic/util_hidden_variables');
72
73 #############################
74
75 sub report {
76   $lxdebug->enter_sub();
77
78   my $myconfig = \%myconfig;
79
80   $form->{title} = $locale->text('UStVA');
81   $form->{kz10}  = '';                       #Berichtigte Anmeldung? Ja =1 Nein=0
82
83   my $year = substr($form->datetonum($form->current_date(\%myconfig), \%myconfig ),
84              0, 4);
85
86   my $department = '';
87   local $hide = '';
88   $form->header;
89
90   # Einlesen der Finanzamtdaten
91   &get_config($userspath, 'finanzamt.ini');
92
93   # Hier Einlesen der user-config
94   # steuernummer entfernt für prerelease
95   my @a = qw(
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 
105     co_accountnr3
106   );
107
108   map { $form->{$_} = $myconfig->{$_} } @a;
109
110   my $openings = $form->{FA_Oeffnungszeiten};
111   $openings =~ s/\\\\n/<br>/g;
112
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>|;
119
120
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;
128   }
129
130
131   my $address_given = 
132     ($form->{co_street} ne '' 
133       and ( 
134         $form->{co_zip} ne ''
135           or $form->{co_city} ne ''
136       )
137     ) 
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') 
145         . qq|!</a>\n|;
146
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};
151
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!|
157       . qq|</a><br>|;
158
159   my $ustva_vorauswahl = &ustva_vorauswahl();
160
161   my @all_years = $form->all_years(\%myconfig);
162
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>|;
169   }
170   $select_year   .=  qq|</select>|;
171
172   my $_checked = '';
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)')
177     . qq|">| 
178     . $locale->text('Amended Advance Turnover Tax Return'); 
179
180   my $method_local = ($form->{method} eq 'accrual') ? $locale->text('accrual') 
181                    : ($form->{method} eq 'cash')    ? $locale->text('cash')
182                    : '';
183
184   my $period_local = ( $form->{FA_voranmeld} eq 'month')   ? $locale->text('month')
185                    : ( $form->{FA_voranmeld} eq 'quarter') ? $locale->text('quarter')
186                    : '';  
187
188   my $tax_office_banks_ref = [
189     { BLZ             => $form->{FA_BLZ_1},
190       Kontonummer     => $form->{FA_Kontonummer_1},
191       Bankbezeichnung => $form->{FA_Bankbezeichnung_1}
192     },
193     { BLZ             => $form->{FA_BLZ_2},
194       Kontonummer     => $form->{FA_Kontonummer_2},
195       Bankbezeichnung => $form->{FA_Bankbezeichnung_oertlich}
196     }
197   ];
198  
199   
200   my $template_ref = {
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,    
212   };
213   
214   print($form->parse_html_template('ustva/report', $template_ref));
215
216
217
218   $lxdebug->leave_sub();
219 }
220
221
222
223 sub help {
224   $lxdebug->enter_sub();
225
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';
232   &generate_ustva();
233
234   #$form->{templates} = $tmp;
235   $lxdebug->leave_sub();
236 }
237
238 sub show {
239   $lxdebug->enter_sub();
240
241   #&generate_ustva();
242   no strict 'refs';
243   $lxdebug->leave_sub();
244   &{ $form->{nextsub} };
245   use strict 'refs';
246 }
247
248 sub ustva_vorauswahl {
249   $lxdebug->enter_sub();
250
251   my $select_vorauswahl;
252
253   #Aktuelles Datum zerlegen:
254   my $date = $form->datetonum($form->current_date(\%myconfig), \%myconfig);
255
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|);
265
266   my $sel    = '';
267   my $yymmdd = '';
268
269   # Testdaten erzeugen:
270   #$form->{day}= '11';
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>
278   |;
279
280   if ($form->{FA_voranmeld} eq 'month') {
281
282     # Vorauswahl bei monatlichem Voranmeldungszeitraum
283
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'),
297                 );
298
299     my $yy = $form->{year} * 10000;
300     $yymmdd = "$form->{year}$form->{month}$form->{day}" * 1;
301     $sel    = '';
302     my $dfv = '';
303
304     # Offset für Dauerfristverlängerung
305     $dfv = '100' if ($form->{FA_dauerfrist} eq '1');
306
307   SWITCH: {
308       $yymmdd <= ($yy + 110 + $dfv) && do {
309         $form->{year} = $form->{year} - 1;
310         $sel = '12';
311         last SWITCH;
312       };
313       $yymmdd <= ($yy + 210 + $dfv) && do {
314         $sel = '01';
315         last SWITCH;
316       };
317       $yymmdd <= ($yy + 310 + $dfv) && do {
318         $sel = '02';
319         last SWITCH;
320       };
321       $yymmdd <= ($yy + 410 + $dfv) && do {
322         $sel = '03';
323         last SWITCH;
324       };
325       $yymmdd <= ($yy + 510 + $dfv) && do {
326         $sel = '04';
327         last SWITCH;
328       };
329       $yymmdd <= ($yy + 610 + $dfv) && do {
330         $sel = '05';
331         last SWITCH;
332       };
333       $yymmdd <= ($yy + 710 + $dfv) && do {
334         $sel = '06';
335         last SWITCH;
336       };
337       $yymmdd <= ($yy + 810 + $dfv) && do {
338         $sel = '07';
339         last SWITCH;
340       };
341       $yymmdd <= ($yy + 910 + $dfv) && do {
342         $sel = '08';
343         last SWITCH;
344       };
345       $yymmdd <= ($yy + 1010 + $dfv) && do {
346         $sel = '09';
347         last SWITCH;
348       };
349       $yymmdd <= ($yy + 1110 + $dfv) && do {
350         $sel = '10';
351         last SWITCH;
352       };
353       $yymmdd <= ($yy + 1210) && do {
354         $sel = '11';
355         last SWITCH;
356       };
357       $yymmdd <= ($yy + 1231) && do {
358         $sel = '12';
359         last SWITCH;
360       };
361
362     }
363     $select_vorauswahl .= qq|<select id="zeitraum" name="period" title="|
364   . $locale->text('Select a period') . qq|" >|;
365
366     my $key = '';
367     foreach $key (sort keys %liste) {
368       my $selected = '';
369       $selected = 'selected' if ($sel eq $key);
370       $select_vorauswahl .= qq|
371          <option value="$key" $selected> $liste{$key}</option>
372       |;
373     }
374     $select_vorauswahl .= qq|</select>|;
375
376   } elsif ($form->{FA_voranmeld} eq 'quarter') {
377
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'),);
384
385     my $yy = $form->{year} * 10000;
386     $yymmdd = "$form->{year}$form->{month}$form->{day}" * 1;
387     $sel    = '';
388     my $dfv = '';    # Offset für Dauerfristverlängerung
389     $dfv = '100' if ($form->{FA_dauerfrist} eq '1');
390
391   SWITCH: {
392       $yymmdd <= ($yy + 110 + $dfv) && do {
393         $form->{year} = $form->{year} - 1;
394         $sel = '44';
395         last SWITCH;
396       };
397       $yymmdd <= ($yy + 410 + $dfv) && do {
398         $sel = '41';
399         last SWITCH;
400       };
401       $yymmdd <= ($yy + 710 + $dfv) && do {
402         $sel = '42';
403         last SWITCH;
404       };
405       $yymmdd <= ($yy + 1010 + $dfv) && do {
406         $sel = '43';
407         last SWITCH;
408       };
409       $yymmdd <= ($yy + 1231) && do {
410         $sel = '44';
411       };
412     }
413
414     $select_vorauswahl .= qq|<select id="zeitraum" name="period" title="|
415       . $locale->text('Select a period') . qq|" >|;
416     my $key = '';
417     foreach $key (sort keys %liste) {
418       my $selected = '';
419       $selected = 'selected' if ($sel eq $key);
420       $select_vorauswahl .= qq|
421          <option value="$key" $selected>$liste{$key}</option>
422      |;
423     }
424     $select_vorauswahl .= qq|\n</select>
425    |;
426
427   } else {
428
429     # keine Vorauswahl bei Voranmeldungszeitraum
430     $select_vorauswahl .= qq|<select id="zeitraum" name="period" title="|
431       . $locale->text('Select a period') . qq|" >|;
432
433     my %listea = ('41' => '1. Quarter',
434                   '42' => '2. Quarter',
435                   '43' => '3. Quarter',
436                   '44' => '4. Quarter',);
437
438     my %listeb = ('01' => 'January',
439                   '02' => 'February',
440                   '03' => 'March',
441                   '04' => 'April',
442                   '05' => 'May',
443                   '06' => 'June',
444                   '07' => 'July',
445                   '08' => 'August',
446                   '09' => 'September',
447                   '10' => 'October',
448                   '11' => 'November',
449                   '12' => 'December',
450                   '13' => 'Yearly',);
451     my $key = '';
452     foreach $key (sort keys %listea) {
453       $select_vorauswahl .= qq|
454          <option value="$key">|
455         . $locale->text("$listea{$key}")
456         . qq|</option>\n|;
457     }
458
459     foreach $key (sort keys %listeb) {
460       $select_vorauswahl .= qq|
461          <option value="$key">|
462         . $locale->text("$listeb{$key}")
463         . qq|</option>\n|;
464     }
465     $select_vorauswahl .= qq|</select>|;
466   }
467   $lxdebug->leave_sub();
468   
469   return $select_vorauswahl;
470 }
471
472 #sub config {
473 #  $lxdebug->enter_sub();
474 #  config_step1();
475 #  $lxdebug->leave_sub();
476 #}
477
478 sub debug {
479   $lxdebug->enter_sub();
480   $form->debug();
481   $lxdebug->leave_sub();
482 }
483
484 sub show_options {
485   $lxdebug->enter_sub();
486
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">|;
493   my $format =
494       qq|       <option value=html selected>|
495     . $locale->text('Preview')
496     . qq|</option>|;
497   if ($latex_templates) {
498     $format .=
499         qq|    <option value=pdf>|
500       . $locale->text('UStVA (PDF-Dokument)')
501       . qq|</option>|;
502   }
503
504   #my $disabled= qq|disabled="disabled"|;
505   #$disabled='' if ($form->{elster} eq '1' );
506   if ($form->{elster} eq '1') {
507     $format .=
508         qq|<option value=elsterwinston>|
509       . $locale->text('ELSTER Export (Winston)')
510       . qq|</option>|
511       . qq|<option value=elstertaxbird>|
512       . $locale->text('ELSTER Export (Taxbird)')
513       . qq|</option>|;      
514   }
515
516   #$format .= qq|<option value=elster>|.$locale->text('ELSTER Export nach Winston').qq|</option>|;
517   my $show_options = qq|
518     $type
519     $media
520     <select name=format title = "|
521     . $locale->text('Choose Outputformat') . qq|">$format</select>
522   |;
523   $lxdebug->leave_sub();
524   
525   return $show_options;
526 }
527
528 sub generate_ustva {
529   $lxdebug->enter_sub();
530
531   # Aufruf von get_config aus bin/mozilla/ustva.pl zum
532   # Einlesen der Finanzamtdaten aus finanzamt.ini
533
534   get_config($userspath, 'finanzamt.ini');
535
536   # init some form vars
537   my @anmeldungszeitraum =
538     qw('0401' '0402' '0403' 
539        '0404' '0405' '0406' 
540        '0407' '0408' '0409' 
541        '0410' '0411' '0412' 
542        '0441' '0442' '0443' '0444');
543
544   foreach my $item (@anmeldungszeitraum) {
545     $form->{$item} = "";
546   }
547
548     #forgotten the year --> thisyear
549     if ($form->{year} !~ m/^\d\d\d\d$/) {
550       $form->{year} = substr(
551                              $form->datetonum(
552                                     $form->current_date(\%myconfig), \%myconfig
553                              ),
554                              0, 4);
555       $lxdebug->message(LXDebug::DEBUG1,
556                         qq|Actual year from Database: $form->{year}\n|);
557     }
558
559     #
560     # using dates in ISO-8601 format: yyyymmmdd  for Postgres...
561     #
562     
563     #yearly report
564     if ($form->{period} eq "13") {
565       $form->{fromdate} = "$form->{year}0101";
566       $form->{todate}   = "$form->{year}1231";
567     }
568
569     #Quater reports
570     if ($form->{period} eq "41") {
571       $form->{fromdate} = "$form->{year}0101";
572       $form->{todate}   = "$form->{year}0331";
573       $form->{'0441'}   = "X";
574     }
575     if ($form->{period} eq "42") {
576       $form->{fromdate} = "$form->{year}0401";
577       $form->{todate}   = "$form->{year}0630";
578       $form->{'0442'}   = "X";
579     }
580     if ($form->{period} eq "43") {
581       $form->{fromdate} = "$form->{year}0701";
582       $form->{todate}   = "$form->{year}0930";
583       $form->{'0443'}   = "X";
584     }
585     if ($form->{period} eq "44") {
586       $form->{fromdate} = "$form->{year}1001";
587       $form->{todate}   = "$form->{year}1231";
588       $form->{'0444'}   = "X";
589     }
590
591     #Monthly reports
592   SWITCH: {
593       $form->{period} eq "01" && do {
594         $form->{fromdate} = "$form->{year}0101";
595         $form->{todate}   = "$form->{year}0131";
596         $form->{'0401'}   = "X";
597         last SWITCH;
598       };
599       $form->{period} eq "02" && do {
600         $form->{fromdate} = "$form->{year}0201";
601
602         #this works from 1901 to 2099, 1900 and 2100 fail.
603         my $leap = ($form->{year} % 4 == 0) ? "29" : "28";
604         $form->{todate} = "$form->{year}02$leap";
605         $form->{"0402"} = "X";
606         last SWITCH;
607       };
608       $form->{period} eq "03" && do {
609         $form->{fromdate} = "$form->{year}0301";
610         $form->{todate}   = "$form->{year}0331";
611         $form->{"0403"}   = "X";
612         last SWITCH;
613       };
614       $form->{period} eq "04" && do {
615         $form->{fromdate} = "$form->{year}0401";
616         $form->{todate}   = "$form->{year}0430";
617         $form->{"0404"}   = "X";
618         last SWITCH;
619       };
620       $form->{period} eq "05" && do {
621         $form->{fromdate} = "$form->{year}0501";
622         $form->{todate}   = "$form->{year}0531";
623         $form->{"0405"}   = "X";
624         last SWITCH;
625       };
626       $form->{period} eq "06" && do {
627         $form->{fromdate} = "$form->{year}0601";
628         $form->{todate}   = "$form->{year}0630";
629         $form->{"0406"}   = "X";
630         last SWITCH;
631       };
632       $form->{period} eq "07" && do {
633         $form->{fromdate} = "$form->{year}0701";
634         $form->{todate}   = "$form->{year}0731";
635         $form->{"0407"}   = "X";
636         last SWITCH;
637       };
638       $form->{period} eq "08" && do {
639         $form->{fromdate} = "$form->{year}0801";
640         $form->{todate}   = "$form->{year}0831";
641         $form->{"0408"}   = "X";
642         last SWITCH;
643       };
644       $form->{period} eq "09" && do {
645         $form->{fromdate} = "$form->{year}0901";
646         $form->{todate}   = "$form->{year}0930";
647         $form->{"0409"}   = "X";
648         last SWITCH;
649       };
650       $form->{period} eq "10" && do {
651         $form->{fromdate} = "$form->{year}1001";
652         $form->{todate}   = "$form->{year}1031";
653         $form->{"0410"}   = "X";
654         last SWITCH;
655       };
656       $form->{period} eq "11" && do {
657         $form->{fromdate} = "$form->{year}1101";
658         $form->{todate}   = "$form->{year}1130";
659         $form->{"0411"}   = "X";
660         last SWITCH;
661       };
662       $form->{period} eq "12" && do {
663         $form->{fromdate} = "$form->{year}1201";
664         $form->{todate}   = "$form->{year}1231";
665         $form->{"0412"}   = "X";
666         last SWITCH;
667       };
668     }
669
670   # Kontrollvariable für die Templates 
671   $form->{'year2007'} = ($form->{year} >= 2007 ) ? "1":"0";
672
673
674   # Get the USTVA
675   USTVA->ustva(\%myconfig, \%$form);
676
677   # reformat Dates to dateformat
678   $form->{fromdate} = $locale->date(\%myconfig, $form->{fromdate}, 0, 0, 0);
679
680   $form->{todate} = $form->current_date(\%myconfig) unless $form->{todate};
681   $form->{todate} = $locale->date(\%myconfig, $form->{todate}, 0, 0, 0);
682
683   $form->{longperiod} =
684     $locale->date(\%myconfig, $form->current_date(\%myconfig), 1, 0, 0);
685
686   # if there are any dates construct a where
687   if ($form->{fromdate} || $form->{todate}) {
688
689     $form->{todate} = $form->current_date($myconfig)  unless ($form->{todate});
690
691     my $longtodate  = $locale->date($myconfig, $form->{todate}, 1, 0, 0);
692     my $shorttodate = $locale->date($myconfig, $form->{todate}, 0, 0, 0);
693
694     my $longfromdate  = $locale->date($myconfig, $form->{fromdate}, 1, 0, 0);
695     my $shortfromdate = $locale->date($myconfig, $form->{fromdate}, 0, 0, 0);
696
697     $form->{this_period} = "$shortfromdate<br>\n$shorttodate";
698     $form->{longperiod}      =
699         $locale->text('for Period')
700       . qq|<br>\n$longfromdate |
701       . $locale->text('to (date)')
702       . qq| $longtodate|;
703   }
704
705   if ($form->{comparefromdate} || $form->{comparetodate}) {
706     my $longcomparefromdate =
707       $locale->date(\%myconfig, $form->{comparefromdate}, 1, 0, 0);
708     my $shortcomparefromdate =
709       $locale->date(\%myconfig, $form->{comparefromdate}, 0, 0, 0);
710
711     my $longcomparetodate =
712       $locale->date(\%myconfig, $form->{comparetodate}, 1, 0, 0);
713     my $shortcomparetodate =
714       $locale->date(\%myconfig, $form->{comparetodate}, 0, 0, 0);
715
716     $form->{last_period} = "$shortcomparefromdate<br>\n$shortcomparetodate";
717     $form->{longperiod} .=
718         "<br>\n$longcomparefromdate "
719       . $locale->text('to (date)')
720       . qq| $longcomparetodate|;
721   }
722
723   $form->{Datum_heute} =
724     $locale->date(\%myconfig, $form->current_date(\%myconfig), 0, 0, 0);
725
726   # setup variables for the form
727   my @a = qw(company businessnumber tel fax email
728     co_chief co_department co_custom1 co_custom2 co_custom3 co_custom4 co_custom5
729     co_name1 co_name2  co_street co_street1 co_zip co_city co_city1 co_country co_tel co_tel1 co_tel2
730     co_fax co_fax1 co_email co_email1 co_url co_url1 ustid duns
731     co_bankname co_bankname1 co_bankname2 co_bankname3 co_blz co_blz1
732     co_blz2 co_blz3 co_accountnr co_accountnr1 co_accountnr2 co_accountnr3);
733
734   map { $form->{$_} = $myconfig{$_} } @a;
735
736   if ($form->{address} ne '') {
737     my $temp = $form->{address};
738     $temp =~ s/\\n/<br \/>/;
739     ($form->{co_street}, $form->{co_city}) = split("<br \/>", $temp);
740     $form->{co_city} =~ s/\\n//g;
741   }
742
743   #
744   # Outputformat specific customisation's
745   #
746
747   my @category_cent = qw(
748     511 861 36   80   971  931  98   96   53   74
749     85  65  66   61   62   67   63   64   59   69 
750     39  83  811  891  Z43  Z45  Z53  Z62  Z65  Z67
751     
752   );
753
754   my @category_euro = qw(
755     41 44 49 43 48 51 86 35 77 76 91 89
756     97 93 95 94 42 60 45 52 73 84 81 
757   );
758
759   if ( $form->{format} eq 'pdf' or $form->{format} eq 'postscript') {
760
761     $form->{IN} = "$form->{type}-$form->{year}.tex";
762     $form->{padding} = "~~";
763     $form->{bold}    = "\textbf{";
764     $form->{endbold} = "}";
765     $form->{br}      = '\\\\';
766
767     # Zahlenformatierung für Latex USTVA Formulare
768
769     foreach my $number (@category_euro) {
770       $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '0', '');
771     }
772
773     my ${decimal_comma} = ( $myconfig{numberformat} eq '1.000,00'
774          or $myconfig{numberformat} eq '1000,00' ) ? ',':'.';
775
776     foreach my $number (@category_cent) {
777       $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '');
778       $form->{$number} =~ s/${decimal_comma}/~~/g;
779     }
780
781   } elsif ( $form->{format} eq 'html') { # Formatierungen für HTML Ausgabe
782
783     $form->{IN} = $form->{type} . '.html';
784     $form->{padding} = "&nbsp;&nbsp;";
785     $form->{bold}    = "<b>";
786     $form->{endbold} = "</b>";
787     $form->{br}      = "<br>";
788     $form->{address} =~ s/\\n/\n/g;
789
790     foreach $number (@category_cent) {
791       $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '0');
792     }
793     
794     foreach $number (@category_euro) {
795       $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '0', '0');
796     }
797
798   } elsif ( $form->{format} eq 'elsterwinston' ) {
799
800     $form->{IN} = 'winston.xml';
801     
802     #
803     # Build Winston filename
804     #
805     
806     my $file = 'U';     # 1. char 'U' = USTVA
807     $file .= $form->{period};
808     #4. and 5. char = year modulo 100
809     $file .= sprintf("%02d", $form->{year} % 100);
810     #6. to 18. char = Elstersteuernummer
811     #Beispiel: Steuernummer in Bayern
812     #111/222/33334 ergibt für UStVA Jan 2004: U01049111022233334
813     $file .= $form->{elsterFFFF};
814     $file .= $form->{elstersteuernummer};
815     #file suffix
816     $file .= '.xml';
817     $form->{tmpfile} = "$userspath/$file";
818
819     $form->{attachment_filename} = "$file";
820  
821     # Zahlenformatierung für Winston
822
823     my $temp_numberformat = $myconfig{numberformat};
824
825     # Numberformat must be '1000.00' for Winston
826
827     $myconfig{numberformat} = '1000.00';
828
829     foreach my $number (@category_cent) {
830       $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '2', '') : '';
831     }
832     
833     foreach my $number (@category_euro) {
834       $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '0', '') : '';
835     }
836     # Re-set Numberformat
837     $myconfig{numberformat} = $temp_numberformat;
838
839   }
840
841   elsif ( $form->{format} eq 'elstertaxbird' ) {
842
843     # Define serveral filenames
844     $form->{IN} = 'taxbird.txb';
845
846     $form->{attachment_filename} = "USTVA-" . $form->{period} 
847     . sprintf("%02d", $form->{year} % 100) . ".txb";
848     
849     $form->{tmpfile} = "$userspath/" . $form->{attachment_filename};
850
851     # TODO: set Output to UTF-8 or system Preference
852     #$form->{"iconv"} = Text::Iconv->new($myconfig{dbcharset}, "UTF-8");
853     #my $iconv = $self->{"iconv"};
854     #$iconv->convert($variable);
855     if ($form->{period} =~ /^[4]\d$/ ){
856       my %periods = ( # Lx => taxbird
857                    '41' => '12',
858                    '42' => '13',
859                    '43' => '14',
860                    '44' => '15',
861                  );
862     
863       foreach my $quarter ( keys %periods ) {
864         $form->{taxbird_period} = $periods{$quarter} if ( $form->{period} eq $quarter);
865       }
866     } elsif ($form->{period} =~ /^\d+$/ ) {
867       $form->{period} =~ s/^0//g;
868       my $period = $form->{period};
869       $period * 1;
870       $period--;
871       $form->{period} = $period;
872     } else {
873       $form->header;
874       USTVA::error( $locale->text('Wrong Period' ));
875       exit(0);
876     }
877     
878     my %lands = ( # Lx => taxbird # TODO: besser als array...
879                 'Baden Würtemberg'       => '0',
880                 'Bayern'                 => '1',
881                 'Berlin'                 => '2',
882                 'Brandenburg'            => '3',
883                 'Bremen'                 => '4',
884                 'Hamburg'                => '5',
885                 'Hessen'                 => '6',
886                 'Mecklenburg Vorpommern' => '7',
887                 'Niedersachsen'          => '8',
888                 'Nordrhein Westfalen'    => '9',
889                 'Rheinland Pfalz'        => '10',
890                 'Saarland'               => '11',
891                 'Sachsen'                => '12',
892                 'Sachsen Anhalt'         => '13',
893                 'Schleswig Holstein'     => '14',
894                 'Thüringen'              => '15',
895           );
896     foreach my $land ( keys %lands ){
897       $form->{taxbird_land_nr} = $lands{$land} if ($form->{elsterland} eq $land );
898     }
899     
900     $form->{co_zip} = $form->{co_city};
901     $form->{co_zip} =~ s/\D//g;
902     $form->{co_city} =~ s/\d//g;
903     $form->{co_city} =~ s/^\s//g;
904     
905     ($form->{co_phone_prefix}, $form->{co_phone}) = split("-", $form->{tel});
906     $form->{co_phone_prefix} =~ s/\s//g;
907     $form->{co_phone} =~ s/\s//g;
908     
909      $form->{taxbird_steuernummer} = $form->{steuernummer};
910     #      $form->{taxbird_steuernummer} =~ s/\D//g;
911     $form->{taxbird_steuernummer} =~ s/\///; # ersten Querstrich ersetzen
912     
913     # Numberformatting for Taxbird
914     my $temp_numberformat = $myconfig{numberformat};
915     # Numberformat must be '1000,00' for Taxbird ?!
916     $myconfig{numberformat} = '1000,00';
917     foreach my $number (@category_cent) {
918       $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '2', '') : '';
919     }
920     
921     foreach my $number (@category_euro) {
922       $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '0', '') : '';
923     }
924     # Re-set Numberformat
925     $myconfig{numberformat} = $temp_numberformat;
926     
927     # push Kennziffern to <%foreach Array fo easyer
928     # output in xml format. Thx to Moritz.
929     my %taxbird_id_for = (
930          
931         '511'  =>  'Kz51-calc',
932         '861'  =>  'Kz86-calc',
933         '971'  =>  'Kz97-calc',
934         '931'  =>  'Kz93-calc',
935         '811'  =>  'Kz81-calc',
936         '891'  =>  'Kz89-calc',
937         'Z45'  =>  'uebertrag',
938         'Z53'  =>  'ust-sum',
939         'Z62'  =>  'ust-minus-vost',
940         'Z65'  =>  'ust-sum+69',
941         'Z67'  =>  'ust-vz',
942     );
943           
944     
945     for my $kennziffer (@category_cent, @category_euro) {
946
947       next if ($kennziffer eq 'Z43');
948
949       if ($form->{$kennziffer} != 0){
950         if (defined $taxbird_id_for{$kennziffer}) {
951           push(@{ $form->{id}}, $taxbird_id_for{$kennziffer});
952         } else {
953           push(@{ $form->{id}}, "Kz$kennziffer"); 
954         }
955         push(@{ $form->{amount}}, $form->{$kennziffer});
956       }
957     }    
958     
959   } elsif ( $form->{format} eq '' ){ # No format error.
960     $form->header;
961     USTVA::error( $locale->text('Application Error. No Format given' ) . "!");
962     exit(0);
963  
964   } else { # All other Formats are wrong
965     $form->header;
966     USTVA::error( $locale->text('Application Error. Wrong Format') . ": " . $form->{format} );
967     exit(0);
968   }
969
970   
971   if ( $form->{period} eq '13' and $form->{format} ne 'html') {
972     $form->header;
973     USTVA::info(
974       $locale->text(
975       'Yearly taxreport not yet implemented')
976       . '!');
977   }
978     
979   $form->{templates} = $myconfig{templates};
980   $form->{templates} = "doc" if ( $form->{type} eq 'help' );
981
982   $form->parse_template(\%myconfig, $userspath);
983
984   $lxdebug->leave_sub();
985 }
986
987 sub config_step1 {
988   $lxdebug->enter_sub();
989
990   # edit all taxauthority prefs
991
992   $form->header;
993   &get_config($userspath, 'finanzamt.ini');
994
995   my $land = $form->{elsterland};
996   my $amt  = $form->{elsterFFFF};
997
998
999   if ($form->{cbscript} ne '' and $form->{cblogin} ne '') {
1000     $callback =  qq|$form->{cbscript}|
1001                 .qq|?action="config_step1"|
1002                 .qq|&login="$form->{cblogin}"|
1003                 .qq|&path="$form->{cbpath}"|
1004                 .qq|&root="$form->{cbroot}"|
1005                 .qq|&rpw="$form->{cbrpw}"|;
1006   }
1007
1008   $form->{title} = $locale->text('Tax Office Preferences');
1009
1010
1011   my $select_tax_office = USTVA->fa_auswahl($land, $amt, &elster_hash());
1012   my $checked_accrual = q|checked="checked"| if ($form->{method} eq 'accrual');
1013   my $checked_cash = q|checked="checked"| if ($form->{method} eq 'cash');
1014   my $checked_monthly = "checked" if ($form->{FA_voranmeld} eq 'month');
1015   my $checked_quarterly = "checked" if ($form->{FA_voranmeld} eq 'quarter');
1016   my $checked_dauerfristverlaengerung = "checked" if ($form->{FA_dauerfrist} eq '1');
1017   my $checked_kz_71 = "checked" if ($form->{FA_71} eq 'X');
1018
1019   my $_hidden_variables_ref;
1020
1021   my %_hidden_local_variables = (    
1022     'saved'       => $locale->text('Check Details'),
1023     'nextsub'     => 'config_step2',
1024     'warnung'     => '0',
1025   );
1026
1027   foreach my $variable (keys %_hidden_local_variables) {
1028     push @{ $_hidden_variables_ref }, 
1029         { 'variable' => $variable, 'value' => $_hidden_local_variables{$variable} };
1030   }
1031
1032   my @_hidden_form_variables = qw(
1033     FA_Name             FA_Strasse        FA_PLZ             
1034     FA_Ort              FA_Telefon        FA_Fax           
1035     FA_PLZ_Grosskunden  FA_PLZ_Postfach   FA_Postfach 
1036     FA_BLZ_1            FA_Kontonummer_1  FA_Bankbezeichnung_1  
1037     FA_BLZ_2            FA_Kontonummer_2  FA_Bankbezeichnung_oertlich
1038     FA_Oeffnungszeiten  FA_Email          FA_Internet
1039     steuernummer        elsterland        elstersteuernummer
1040     elsterFFFF          path              login
1041     password
1042   );
1043
1044   foreach my $variable (@_hidden_form_variables) {
1045     push @{ $_hidden_variables_ref}, 
1046         { 'variable' => $variable, 'value' => $form->{$variable} };
1047   }
1048
1049   # hä? kann die weg?
1050   my $steuernummer_new = '';
1051
1052   # Variablen für das Template zur Verfügung stellen
1053   my $template_ref = {
1054      select_tax_office               => $select_tax_office,
1055      checked_accrual                 => $checked_accrual,
1056      checked_cash                    => $checked_cash,
1057      checked_monthly                 => $checked_monthly,
1058      checked_quarterly               => $checked_quarterly,
1059      checked_dauerfristverlaengerung => $checked_dauerfristverlaengerung,
1060      hidden_variables                => $_hidden_variables_ref,
1061      
1062   };
1063   
1064   # Ausgabe des Templates
1065   print($form->parse_html_template('ustva/config_step1', $template_ref));
1066
1067   $lxdebug->leave_sub();
1068 }
1069
1070 sub config_step2 {
1071   $lxdebug->enter_sub();
1072   $form->header();
1073
1074 #  print qq|
1075 #    <body>
1076 #  |;
1077
1078   my $elsterland         = '';
1079   my $elster_amt         = '';
1080   my $elsterFFFF         = '';
1081   my $elstersteuernummer = '';
1082   &get_config($userspath, 'finanzamt.ini')
1083     if ($form->{saved} eq $locale->text('saved'));
1084
1085   # Auf Übergabefehler checken
1086   USTVA::info(  $locale->text('Missing Tax Authoritys Preferences') . "\n"
1087               . $locale->text('USTVA-Hint: Tax Authoritys'))
1088     if (   $form->{elsterFFFF_new} eq 'Auswahl'
1089         || $form->{elsterland_new} eq 'Auswahl');
1090   USTVA::info(  $locale->text('Missing Method!') . "\n"
1091               . $locale->text('USTVA-Hint: Method'))
1092     if ($form->{method} eq '');
1093
1094   # Klären, ob Variablen bereits befüllt sind UND ob veräderungen auf
1095   # der vorherigen Maske stattfanden: $change = 1(in der edit sub,
1096   # mittels get_config)
1097
1098   my $change = $form->{elsterland} eq $form->{elsterland_new}
1099     && $form->{elsterFFFF} eq $form->{elsterFFFF_new} ? '0' : '1';
1100   $change = '0' if ($form->{saved} eq $locale->text('saved'));
1101   my $elster_init = &elster_hash();
1102
1103   my %elster_init = %$elster_init;
1104
1105   if ($change eq '1') {
1106
1107     # Daten ändern
1108     $elsterland           = $form->{elsterland_new};
1109     $elsterFFFF           = $form->{elsterFFFF_new};
1110     $form->{elsterland}   = $elsterland;
1111     $form->{elsterFFFF}   = $elsterFFFF;
1112     $form->{steuernummer} = '';
1113     
1114     create_steuernummer();
1115
1116     # rebuild elster_amt
1117     my $amt = '';
1118     foreach $amt (keys %{ $elster_init{ $form->{elsterland} } }) {
1119       $elster_amt = $amt
1120         if ($elster_init{ $form->{elsterland}{$amt} eq $form->{elsterFFFF} });
1121     }
1122
1123     # load the predefined hash data into the FA_* Vars
1124     my @variables = qw(FA_Name FA_Strasse FA_PLZ FA_Ort
1125       FA_Telefon FA_Fax FA_PLZ_Grosskunden FA_PLZ_Postfach
1126       FA_Postfach
1127       FA_BLZ_1 FA_Kontonummer_1 FA_Bankbezeichnung_1
1128       FA_BLZ_2 FA_Kontonummer_2 FA_Bankbezeichnung_oertlich
1129       FA_Oeffnungszeiten FA_Email FA_Internet);
1130
1131     for (my $i = 0; $i <= 20; $i++) {
1132       $form->{ $variables[$i] } =
1133         $elster_init->{$elsterland}->{$elsterFFFF}->[$i];
1134     }
1135
1136   } else {
1137
1138     $elsterland = $form->{elsterland};
1139     $elsterFFFF = $form->{elsterFFFF};
1140
1141   }
1142   my $stnr = $form->{steuernummer};
1143   $stnr =~ s/\D+//g;
1144   my $patterncount   = $form->{patterncount};
1145   my $elster_pattern = $form->{elster_pattern};
1146   my $delimiter      = $form->{delimiter};
1147   my $steuernummer = $form->{steuernummer} if ($steuernummer eq '');
1148
1149   $form->{FA_Oeffnungszeiten} =~ s/\\\\n/\n/g;
1150   
1151   
1152
1153   my $input_steuernummer = USTVA->steuernummer_input(
1154                              $form->{elsterland}, 
1155                              $form->{elsterFFFF},
1156                              $form->{steuernummer}
1157   );
1158
1159   $lxdebug->message(LXDebug::DEBUG1, qq|$input_steuernummer|);
1160  
1161
1162   my $_hidden_variables_ref;
1163
1164   my %_hidden_local_variables = (
1165       'elsterland'          => $elsterland,
1166       'elsterFFFF'          => $elsterFFFF,
1167       'warnung'             => $warnung,
1168       'elstersteuernummer'  => $elstersteuernummer,
1169       'steuernummer'        => $stnr,
1170       'lastsub'             => 'config_step1',
1171       'nextsub'             => 'save',
1172       
1173   );
1174   
1175   foreach my $variable (keys %_hidden_local_variables) {
1176     push @{ $_hidden_variables_ref }, 
1177         { 'variable' => $variable, 'value' => $_hidden_local_variables{$variable} };
1178   }
1179  
1180   my @_hidden_form_variables = qw(
1181     FA_steuerberater_name   FA_steuerberater_street 
1182     FA_steuerberater_city   FA_steuerberater_tel
1183     FA_voranmeld            method
1184     FA_dauerfrist           FA_71 
1185     elster                  path 
1186     login                   password 
1187     type                    elster_init 
1188     saved                   callback
1189   );
1190
1191
1192
1193   foreach my $variable (@_hidden_form_variables) {
1194     push @{ $_hidden_variables_ref}, 
1195         { 'variable' => $variable, 'value' => $form->{$variable} };
1196   }
1197
1198   my $template_ref = {
1199      tax_office_data                 => $tax_office_data,
1200      input_steuernummer              => $input_steuernummer,
1201      readonly                        => '', #q|disabled="disabled"|,
1202      callback                        => $callback,
1203      hidden_variables                => $_hidden_variables_ref,
1204   };
1205   
1206   # Ausgabe des Templates
1207   print($form->parse_html_template('ustva/config_step2', $template_ref));
1208
1209
1210   $lxdebug->leave_sub();
1211 }
1212
1213 sub create_steuernummer {
1214   $lxdebug->enter_sub();
1215   my $part           = $form->{part};
1216   my $patterncount   = $form->{patterncount};
1217   my $delimiter      = $form->{delimiter};
1218   my $elster_pattern = $form->{elster_pattern};
1219
1220   # rebuild steuernummer and elstersteuernummer
1221   # es gibt eine gespeicherte steuernummer $form->{steuernummer}
1222   # und die parts und delimiter
1223
1224   my $h = 0;
1225   my $i = 0;
1226
1227   my $steuernummer_new       = $part;
1228   my $elstersteuernummer_new = $form->{elster_FFFF};
1229   $elstersteuernummer_new .= '0';
1230
1231   for ($h = 1; $h < $patterncount; $h++) {
1232     $steuernummer_new .= qq|$delimiter|;
1233     for (my $i = 1; $i <= length($elster_pattern); $i++) {
1234       $steuernummer_new       .= $form->{"part_$h\_$i"};
1235       $elstersteuernummer_new .= $form->{"part_$h\_$i"};
1236     }
1237   }
1238   if ($form->{steuernummer} ne $steuernummer_new) {
1239     $form->{steuernummer}       = $steuernummer_new;
1240     $form->{elstersteuernummer} = $elstersteuernummer_new;
1241     $form->{steuernummer_new}   = $steuernummer_new;
1242   } else {
1243     $form->{steuernummer_new}       = '';
1244     $form->{elstersteuernummer_new} = '';
1245   }
1246   $lxdebug->leave_sub();
1247 }
1248
1249 sub get_config {
1250   $lxdebug->enter_sub();
1251
1252   my ($userpath, $filename) = @_;
1253   my ($key,      $value)    = '';
1254   open(FACONF, "$userpath/$form->{login}_$filename")
1255     or    #falls Datei nicht vorhanden ist
1256     sub {
1257     open(FANEW, ">$userpath/$form->{login}_$filename")
1258       or $form->error("$userpath/$filename : $!");
1259     close FANEW;
1260     open(FACONF, "$userpath/$form->{login}_$filename")
1261       or $form->error("$userpath/$form->{username}_$filename : $!");
1262     };
1263   while (<FACONF>) {
1264     last if /^\[/;
1265     next if /^(#|\s)/;
1266
1267     # remove comments
1268     s/\s#.*//g;
1269
1270     # remove any trailing whitespace
1271     s/^\s*(.*?)\s*$/$1/;
1272     ($key, $value) = split /=/, $_, 2;
1273
1274     $form->{$key} = "$value";
1275
1276   }
1277   close FACONF;
1278
1279   $lxdebug->leave_sub();
1280 }
1281
1282 sub save {
1283   $lxdebug->enter_sub();
1284   my $filename = "$form->{login}_$form->{filename}";
1285
1286   #zuerst die steuernummer aus den part, parts_X_Y und delimiter herstellen
1287   create_steuernummer();
1288
1289   # Textboxen formatieren: Linebreaks entfernen
1290   #
1291   $form->{FA_Oeffnungszeiten} =~ s/\r\n/\\n/g;
1292
1293   #URL mit http:// davor?
1294   $form->{FA_Internet} =~ s/^http:\/\///;
1295   $form->{FA_Internet} = 'http://' . $form->{FA_Internet};
1296
1297   my @config = qw(
1298     elster              elsterland            elstersteuernummer  steuernummer
1299     elsteramt           elsterFFFF            FA_Name             FA_Strasse
1300     FA_PLZ              FA_Ort                FA_Telefon          FA_Fax 
1301     FA_PLZ_Grosskunden  FA_PLZ_Postfach       FA_Postfach         FA_BLZ_1 
1302     FA_Kontonummer_1    FA_Bankbezeichnung_1  FA_BLZ_2            FA_Kontonummer_2
1303     FA_Bankbezeichnung_oertlich FA_Oeffnungszeiten
1304     FA_Email FA_Internet FA_voranmeld method FA_steuerberater_name
1305     FA_steuerberater_street FA_steuerberater_city FA_steuerberater_tel
1306     FA_71 FA_dauerfrist);
1307
1308   # Hier kommt dann die Plausibilitätsprüfung der ELSTERSteuernummer
1309   if ($form->{elstersteuernummer} ne '000000000') {
1310     $form->{elster} = '1';
1311     open(CONF, ">$userspath/$filename") or $form->error("$filename : $!");
1312
1313     # create the config file
1314     print CONF qq|# Configuration file for USTVA\n\n|;
1315     my $key = '';
1316     foreach $key (sort @config) {
1317       $form->{$key} =~ s/\\/\\\\/g;
1318       # strip M
1319       $form->{$key} =~ s/\r\n/\n/g;
1320
1321       print CONF qq|$key=|;
1322       if ($form->{$key} ne 'Y') {
1323         print CONF qq|$form->{$key}\n|;
1324       }
1325       if ($form->{$key} eq 'Y') {
1326         print CONF qq|checked \n|;
1327       }
1328     }
1329     print CONF qq|\n\n|;
1330     close CONF;
1331     $form->{saved} = $locale->text('saved');
1332
1333   } else {
1334
1335     $form->{saved} = $locale->text('Choose a Tax Number');
1336   }
1337
1338   config_step2();
1339   $lxdebug->leave_sub();
1340 }
1341
1342
1343 sub continue {
1344   $lxdebug->enter_sub();
1345
1346   # allow Symbolic references just here:
1347   no strict 'refs';
1348   &{ $form->{nextsub} };
1349   use strict 'refs';
1350   $lxdebug->leave_sub();
1351 }
1352
1353 sub back {
1354   $lxdebug->enter_sub();
1355   &{ $form->{lastsub} };
1356   $lxdebug->leave_sub();
1357 }
1358
1359 sub elster_hash {
1360   $lxdebug->enter_sub();
1361   my $finanzamt = USTVA->query_finanzamt(\%myconfig, \%$form);
1362   $lxdebug->leave_sub();
1363   return $finanzamt;
1364 }
1365
1366