2368545f132ef99938189e4c88f483e15729d527
[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
856     if ($form->{period} =~ /^[4]\d$/ ){
857       my %periods = ( # Lx => taxbird
858                    '41' => '12',
859                    '42' => '13',
860                    '43' => '14',
861                    '44' => '15',
862                  );
863     
864       foreach my $quarter ( keys %periods ) {
865         $form->{taxbird_period} = $periods{$quarter} if ( $form->{period} eq $quarter);
866       }
867       
868       my %lands = ( # Lx => taxbird # TODO: besser als array...
869                   'Baden Würtemberg'       => '0',
870                   'Bayern'                 => '1',
871                   'Berlin'                 => '2',
872                   'Brandenburg'            => '3',
873                   'Bremen'                 => '4',
874                   'Hamburg'                => '5',
875                   'Hessen'                 => '6',
876                   'Mecklenburg Vorpommern' => '7',
877                   'Niedersachsen'          => '8',
878                   'Nordrhein Westfalen'    => '9',
879                   'Rheinland Pfalz'        => '10',
880                   'Saarland'               => '11',
881                   'Sachsen'                => '12',
882                   'Sachsen Anhalt'         => '13',
883                   'Schleswig Holstein'     => '14',
884                   'Thüringen'              => '15',
885             );
886
887       foreach my $land ( keys %lands ){
888         $form->{taxbird_land_nr} = $lands{$land} if ($form->{elsterland} eq $land );
889       }
890       
891       $form->{co_zip} = $form->{co_city};
892       $form->{co_zip} =~ s/\D//g;
893       $form->{co_city} =~ s/\d//g;
894       $form->{co_city} =~ s/^\s//g;
895       
896       ($form->{co_phone_prefix}, $form->{co_phone}) = split("-", $form->{tel});
897       $form->{co_phone_prefix} =~ s/\s//g;
898       $form->{co_phone} =~ s/\s//g;
899       
900        $form->{taxbird_steuernummer} = $form->{steuernummer};
901 #      $form->{taxbird_steuernummer} =~ s/\D//g;
902       $form->{taxbird_steuernummer} =~ s/\///; # ersten Querstrich ersetzen
903       
904       # Numberformatting for Taxbird
905       my $temp_numberformat = $myconfig{numberformat};
906
907       # Numberformat must be '1000,00' for Taxbird ?!
908       $myconfig{numberformat} = '1000,00';
909
910       foreach my $number (@category_cent) {
911         $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '2', '') : '';
912       }
913       
914       foreach my $number (@category_euro) {
915         $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '0', '') : '';
916       }
917       # Re-set Numberformat
918       $myconfig{numberformat} = $temp_numberformat;
919       
920     } elsif ($form->{period} =~ /^\d+$/ ) {
921       $form->{period} =~ s/^0//g;
922       my $period = $form->{period};
923       $period * 1;
924       $period--;
925       $form->{period} = $period;
926     } else {
927       $form->header;
928       USTVA::error( $locale->text('Wrong Period' ));
929       exit(0);
930     }
931     
932   } elsif ( $form->{format} eq '' ){ # No format error.
933     $form->header;
934     USTVA::error( $locale->text('Application Error. No Format given' ) . "!");
935     exit(0);
936  
937   } else { # All other Formats are wrong
938     $form->header;
939     USTVA::error( $locale->text('Application Error. Wrong Format') . ": " . $form->{format} );
940     exit(0);
941   }
942
943   if ( $form->{period} eq '13' and $form->{format} ne 'html') {
944     $form->header;
945     USTVA::info(
946       $locale->text(
947       'Yearly taxreport not yet implemented')
948       . '!');
949   }
950     
951   $form->{templates} = $myconfig{templates};
952   $form->{templates} = "doc" if ( $form->{type} eq 'help' );
953
954   $form->parse_template(\%myconfig, $userspath);
955
956   $lxdebug->leave_sub();
957 }
958
959 sub config_step1 {
960   $lxdebug->enter_sub();
961
962   # edit all taxauthority prefs
963
964   $form->header;
965   &get_config($userspath, 'finanzamt.ini');
966
967   my $land = $form->{elsterland};
968   my $amt  = $form->{elsterFFFF};
969
970
971   if ($form->{cbscript} ne '' and $form->{cblogin} ne '') {
972     $callback =  qq|$form->{cbscript}|
973                 .qq|?action="config_step1"|
974                 .qq|&login="$form->{cblogin}"|
975                 .qq|&path="$form->{cbpath}"|
976                 .qq|&root="$form->{cbroot}"|
977                 .qq|&rpw="$form->{cbrpw}"|;
978   }
979
980   $form->{title} = $locale->text('Tax Office Preferences');
981
982
983   my $select_tax_office = USTVA->fa_auswahl($land, $amt, &elster_hash());
984   my $checked_accrual = q|checked="checked"| if ($form->{method} eq 'accrual');
985   my $checked_cash = q|checked="checked"| if ($form->{method} eq 'cash');
986   my $checked_monthly = "checked" if ($form->{FA_voranmeld} eq 'month');
987   my $checked_quarterly = "checked" if ($form->{FA_voranmeld} eq 'quarter');
988   my $checked_dauerfristverlaengerung = "checked" if ($form->{FA_dauerfrist} eq '1');
989   my $checked_kz_71 = "checked" if ($form->{FA_71} eq 'X');
990
991   my $_hidden_variables_ref;
992
993   my %_hidden_local_variables = (    
994     'saved'       => $locale->text('Check Details'),
995     'nextsub'     => 'config_step2',
996     'warnung'     => '0',
997   );
998
999   foreach my $variable (keys %_hidden_local_variables) {
1000     push @{ $_hidden_variables_ref }, 
1001         { 'variable' => $variable, 'value' => $_hidden_local_variables{$variable} };
1002   }
1003
1004   my @_hidden_form_variables = qw(
1005     FA_Name             FA_Strasse        FA_PLZ             
1006     FA_Ort              FA_Telefon        FA_Fax           
1007     FA_PLZ_Grosskunden  FA_PLZ_Postfach   FA_Postfach 
1008     FA_BLZ_1            FA_Kontonummer_1  FA_Bankbezeichnung_1  
1009     FA_BLZ_2            FA_Kontonummer_2  FA_Bankbezeichnung_oertlich
1010     FA_Oeffnungszeiten  FA_Email          FA_Internet
1011     steuernummer        elsterland        elstersteuernummer
1012     elsterFFFF          path              login
1013     password
1014   );
1015
1016   foreach my $variable (@_hidden_form_variables) {
1017     push @{ $_hidden_variables_ref}, 
1018         { 'variable' => $variable, 'value' => $form->{$variable} };
1019   }
1020
1021   # hä? kann die weg?
1022   my $steuernummer_new = '';
1023
1024   # Variablen für das Template zur Verfügung stellen
1025   my $template_ref = {
1026      select_tax_office               => $select_tax_office,
1027      checked_accrual                 => $checked_accrual,
1028      checked_cash                    => $checked_cash,
1029      checked_monthly                 => $checked_monthly,
1030      checked_quarterly               => $checked_quarterly,
1031      checked_dauerfristverlaengerung => $checked_dauerfristverlaengerung,
1032      hidden_variables                => $_hidden_variables_ref,
1033      
1034   };
1035   
1036   # Ausgabe des Templates
1037   print($form->parse_html_template('ustva/config_step1', $template_ref));
1038
1039   $lxdebug->leave_sub();
1040 }
1041
1042 sub config_step2 {
1043   $lxdebug->enter_sub();
1044   $form->header();
1045
1046 #  print qq|
1047 #    <body>
1048 #  |;
1049
1050   my $elsterland         = '';
1051   my $elster_amt         = '';
1052   my $elsterFFFF         = '';
1053   my $elstersteuernummer = '';
1054   &get_config($userspath, 'finanzamt.ini')
1055     if ($form->{saved} eq $locale->text('saved'));
1056
1057   # Auf Übergabefehler checken
1058   USTVA::info(  $locale->text('Missing Tax Authoritys Preferences') . "\n"
1059               . $locale->text('USTVA-Hint: Tax Authoritys'))
1060     if (   $form->{elsterFFFF_new} eq 'Auswahl'
1061         || $form->{elsterland_new} eq 'Auswahl');
1062   USTVA::info(  $locale->text('Missing Method!') . "\n"
1063               . $locale->text('USTVA-Hint: Method'))
1064     if ($form->{method} eq '');
1065
1066   # Klären, ob Variablen bereits befüllt sind UND ob veräderungen auf
1067   # der vorherigen Maske stattfanden: $change = 1(in der edit sub,
1068   # mittels get_config)
1069
1070   my $change = $form->{elsterland} eq $form->{elsterland_new}
1071     && $form->{elsterFFFF} eq $form->{elsterFFFF_new} ? '0' : '1';
1072   $change = '0' if ($form->{saved} eq $locale->text('saved'));
1073   my $elster_init = &elster_hash();
1074
1075   my %elster_init = %$elster_init;
1076
1077   if ($change eq '1') {
1078
1079     # Daten ändern
1080     $elsterland           = $form->{elsterland_new};
1081     $elsterFFFF           = $form->{elsterFFFF_new};
1082     $form->{elsterland}   = $elsterland;
1083     $form->{elsterFFFF}   = $elsterFFFF;
1084     $form->{steuernummer} = '';
1085     
1086     create_steuernummer();
1087
1088     # rebuild elster_amt
1089     my $amt = '';
1090     foreach $amt (keys %{ $elster_init{ $form->{elsterland} } }) {
1091       $elster_amt = $amt
1092         if ($elster_init{ $form->{elsterland}{$amt} eq $form->{elsterFFFF} });
1093     }
1094
1095     # load the predefined hash data into the FA_* Vars
1096     my @variables = qw(FA_Name FA_Strasse FA_PLZ FA_Ort
1097       FA_Telefon FA_Fax FA_PLZ_Grosskunden FA_PLZ_Postfach
1098       FA_Postfach
1099       FA_BLZ_1 FA_Kontonummer_1 FA_Bankbezeichnung_1
1100       FA_BLZ_2 FA_Kontonummer_2 FA_Bankbezeichnung_oertlich
1101       FA_Oeffnungszeiten FA_Email FA_Internet);
1102
1103     for (my $i = 0; $i <= 20; $i++) {
1104       $form->{ $variables[$i] } =
1105         $elster_init->{$elsterland}->{$elsterFFFF}->[$i];
1106     }
1107
1108   } else {
1109
1110     $elsterland = $form->{elsterland};
1111     $elsterFFFF = $form->{elsterFFFF};
1112
1113   }
1114   my $stnr = $form->{steuernummer};
1115   $stnr =~ s/\D+//g;
1116   my $patterncount   = $form->{patterncount};
1117   my $elster_pattern = $form->{elster_pattern};
1118   my $delimiter      = $form->{delimiter};
1119   my $steuernummer = $form->{steuernummer} if ($steuernummer eq '');
1120
1121   $form->{FA_Oeffnungszeiten} =~ s/\\\\n/\n/g;
1122   
1123   
1124
1125   my $input_steuernummer = USTVA->steuernummer_input(
1126                              $form->{elsterland}, 
1127                              $form->{elsterFFFF},
1128                              $form->{steuernummer}
1129   );
1130
1131   $lxdebug->message(LXDebug::DEBUG1, qq|$input_steuernummer|);
1132  
1133
1134   my $_hidden_variables_ref;
1135
1136   my %_hidden_local_variables = (
1137       'elsterland'          => $elsterland,
1138       'elsterFFFF'          => $elsterFFFF,
1139       'warnung'             => $warnung,
1140       'elstersteuernummer'  => $elstersteuernummer,
1141       'steuernummer'        => $stnr,
1142       'lastsub'             => 'config_step1',
1143       'nextsub'             => 'save',
1144       
1145   );
1146   
1147   foreach my $variable (keys %_hidden_local_variables) {
1148     push @{ $_hidden_variables_ref }, 
1149         { 'variable' => $variable, 'value' => $_hidden_local_variables{$variable} };
1150   }
1151  
1152   my @_hidden_form_variables = qw(
1153     FA_steuerberater_name   FA_steuerberater_street 
1154     FA_steuerberater_city   FA_steuerberater_tel
1155     FA_voranmeld            method
1156     FA_dauerfrist           FA_71 
1157     elster                  path 
1158     login                   password 
1159     type                    elster_init 
1160     saved                   callback
1161   );
1162
1163
1164
1165   foreach my $variable (@_hidden_form_variables) {
1166     push @{ $_hidden_variables_ref}, 
1167         { 'variable' => $variable, 'value' => $form->{$variable} };
1168   }
1169
1170   my $template_ref = {
1171      tax_office_data                 => $tax_office_data,
1172      input_steuernummer              => $input_steuernummer,
1173      readonly                        => '', #q|disabled="disabled"|,
1174      callback                        => $callback,
1175      hidden_variables                => $_hidden_variables_ref,
1176   };
1177   
1178   # Ausgabe des Templates
1179   print($form->parse_html_template('ustva/config_step2', $template_ref));
1180
1181
1182   $lxdebug->leave_sub();
1183 }
1184
1185 sub create_steuernummer {
1186   $lxdebug->enter_sub();
1187   my $part           = $form->{part};
1188   my $patterncount   = $form->{patterncount};
1189   my $delimiter      = $form->{delimiter};
1190   my $elster_pattern = $form->{elster_pattern};
1191
1192   # rebuild steuernummer and elstersteuernummer
1193   # es gibt eine gespeicherte steuernummer $form->{steuernummer}
1194   # und die parts und delimiter
1195
1196   my $h = 0;
1197   my $i = 0;
1198
1199   my $steuernummer_new       = $part;
1200   my $elstersteuernummer_new = $form->{elster_FFFF};
1201   $elstersteuernummer_new .= '0';
1202
1203   for ($h = 1; $h < $patterncount; $h++) {
1204     $steuernummer_new .= qq|$delimiter|;
1205     for (my $i = 1; $i <= length($elster_pattern); $i++) {
1206       $steuernummer_new       .= $form->{"part_$h\_$i"};
1207       $elstersteuernummer_new .= $form->{"part_$h\_$i"};
1208     }
1209   }
1210   if ($form->{steuernummer} ne $steuernummer_new) {
1211     $form->{steuernummer}       = $steuernummer_new;
1212     $form->{elstersteuernummer} = $elstersteuernummer_new;
1213     $form->{steuernummer_new}   = $steuernummer_new;
1214   } else {
1215     $form->{steuernummer_new}       = '';
1216     $form->{elstersteuernummer_new} = '';
1217   }
1218   $lxdebug->leave_sub();
1219 }
1220
1221 sub get_config {
1222   $lxdebug->enter_sub();
1223
1224   my ($userpath, $filename) = @_;
1225   my ($key,      $value)    = '';
1226   open(FACONF, "$userpath/$form->{login}_$filename")
1227     or    #falls Datei nicht vorhanden ist
1228     sub {
1229     open(FANEW, ">$userpath/$form->{login}_$filename")
1230       or $form->error("$userpath/$filename : $!");
1231     close FANEW;
1232     open(FACONF, "$userpath/$form->{login}_$filename")
1233       or $form->error("$userpath/$form->{username}_$filename : $!");
1234     };
1235   while (<FACONF>) {
1236     last if /^\[/;
1237     next if /^(#|\s)/;
1238
1239     # remove comments
1240     s/\s#.*//g;
1241
1242     # remove any trailing whitespace
1243     s/^\s*(.*?)\s*$/$1/;
1244     ($key, $value) = split /=/, $_, 2;
1245
1246     $form->{$key} = "$value";
1247
1248   }
1249   close FACONF;
1250
1251   $lxdebug->leave_sub();
1252 }
1253
1254 sub save {
1255   $lxdebug->enter_sub();
1256   my $filename = "$form->{login}_$form->{filename}";
1257
1258   #zuerst die steuernummer aus den part, parts_X_Y und delimiter herstellen
1259   create_steuernummer();
1260
1261   # Textboxen formatieren: Linebreaks entfernen
1262   #
1263   $form->{FA_Oeffnungszeiten} =~ s/\r\n/\\n/g;
1264
1265   #URL mit http:// davor?
1266   $form->{FA_Internet} =~ s/^http:\/\///;
1267   $form->{FA_Internet} = 'http://' . $form->{FA_Internet};
1268
1269   my @config = qw(
1270     elster              elsterland            elstersteuernummer  steuernummer
1271     elsteramt           elsterFFFF            FA_Name             FA_Strasse
1272     FA_PLZ              FA_Ort                FA_Telefon          FA_Fax 
1273     FA_PLZ_Grosskunden  FA_PLZ_Postfach       FA_Postfach         FA_BLZ_1 
1274     FA_Kontonummer_1    FA_Bankbezeichnung_1  FA_BLZ_2            FA_Kontonummer_2
1275     FA_Bankbezeichnung_oertlich FA_Oeffnungszeiten
1276     FA_Email FA_Internet FA_voranmeld method FA_steuerberater_name
1277     FA_steuerberater_street FA_steuerberater_city FA_steuerberater_tel
1278     FA_71 FA_dauerfrist);
1279
1280   # Hier kommt dann die Plausibilitätsprüfung der ELSTERSteuernummer
1281   if ($form->{elstersteuernummer} ne '000000000') {
1282     $form->{elster} = '1';
1283     open(CONF, ">$userspath/$filename") or $form->error("$filename : $!");
1284
1285     # create the config file
1286     print CONF qq|# Configuration file for USTVA\n\n|;
1287     my $key = '';
1288     foreach $key (sort @config) {
1289       $form->{$key} =~ s/\\/\\\\/g;
1290       # strip M
1291       $form->{$key} =~ s/\r\n/\n/g;
1292
1293       print CONF qq|$key=|;
1294       if ($form->{$key} ne 'Y') {
1295         print CONF qq|$form->{$key}\n|;
1296       }
1297       if ($form->{$key} eq 'Y') {
1298         print CONF qq|checked \n|;
1299       }
1300     }
1301     print CONF qq|\n\n|;
1302     close CONF;
1303     $form->{saved} = $locale->text('saved');
1304
1305   } else {
1306
1307     $form->{saved} = $locale->text('Choose a Tax Number');
1308   }
1309
1310   config_step2();
1311   $lxdebug->leave_sub();
1312 }
1313
1314
1315 sub continue {
1316   $lxdebug->enter_sub();
1317
1318   # allow Symbolic references just here:
1319   no strict 'refs';
1320   &{ $form->{nextsub} };
1321   use strict 'refs';
1322   $lxdebug->leave_sub();
1323 }
1324
1325 sub back {
1326   $lxdebug->enter_sub();
1327   &{ $form->{lastsub} };
1328   $lxdebug->leave_sub();
1329 }
1330
1331 sub elster_hash {
1332   $lxdebug->enter_sub();
1333   my $finanzamt = USTVA->query_finanzamt(\%myconfig, \%$form);
1334   $lxdebug->leave_sub();
1335   return $finanzamt;
1336 }
1337
1338