USTVA: Ausgabeformat Winston an 16%/19% angepasst. Winston Kennziffern werden ueber...
[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   $form->{id} = [];
760   $form->{amount} = [];
761
762   if ( $form->{format} eq 'pdf' or $form->{format} eq 'postscript') {
763
764     $form->{IN} = "$form->{type}-$form->{year}.tex";
765     $form->{padding} = "~~";
766     $form->{bold}    = "\textbf{";
767     $form->{endbold} = "}";
768     $form->{br}      = '\\\\';
769
770     # Zahlenformatierung für Latex USTVA Formulare
771
772     foreach my $number (@category_euro) {
773       $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '0', '');
774     }
775
776     my ${decimal_comma} = ( $myconfig{numberformat} eq '1.000,00'
777          or $myconfig{numberformat} eq '1000,00' ) ? ',':'.';
778
779     foreach my $number (@category_cent) {
780       $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '');
781       $form->{$number} =~ s/${decimal_comma}/~~/g;
782     }
783
784   } elsif ( $form->{format} eq 'html') { # Formatierungen für HTML Ausgabe
785
786     $form->{IN} = $form->{type} . '.html';
787     $form->{padding} = "&nbsp;&nbsp;";
788     $form->{bold}    = "<b>";
789     $form->{endbold} = "</b>";
790     $form->{br}      = "<br>";
791     $form->{address} =~ s/\\n/\n/g;
792
793     foreach $number (@category_cent) {
794       $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '0');
795     }
796     
797     foreach $number (@category_euro) {
798       $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '0', '0');
799     }
800
801   } elsif ( $form->{format} eq 'elsterwinston' ) {
802
803     $form->{IN} = 'winston.xml';
804     
805     #
806     # Build Winston filename
807     #
808     
809     my $file = 'U';     # 1. char 'U' = USTVA
810     $file .= $form->{period};
811     #4. and 5. char = year modulo 100
812     $file .= sprintf("%02d", $form->{year} % 100);
813     #6. to 18. char = Elstersteuernummer
814     #Beispiel: Steuernummer in Bayern
815     #111/222/33334 ergibt für UStVA Jan 2004: U01049111022233334
816     $file .= $form->{elsterFFFF};
817     $file .= $form->{elstersteuernummer};
818     #file suffix
819     $file .= '.xml';
820     $form->{tmpfile} = "$userspath/$file";
821
822     $form->{attachment_filename} = "$file";
823  
824     # Zahlenformatierung für Winston
825
826     my $temp_numberformat = $myconfig{numberformat};
827
828     # Numberformat must be '1000.00' for Winston
829
830     $myconfig{numberformat} = '1000.00';
831
832     foreach my $number (@category_cent) {
833       $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '2', '') : '';
834     }
835     
836     foreach my $number (@category_euro) {
837       $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '0', '') : '';
838     }
839     # Re-set Numberformat
840     $myconfig{numberformat} = $temp_numberformat;
841
842
843     # push Kennziffern to <%foreach Array fo easyer
844     # output in xml format. Thx to Moritz.
845     my %winston_id_for = (
846      # No Winston remap?!
847     );
848           
849
850     foreach my $kennziffer (@category_cent, @category_euro) {
851
852       next if ( $kennziffer =~ m/Z\d\d/);
853       next if (   $form->{$kennziffer} == 0 );
854       
855       if (defined $winston_id_for{$kennziffer} ) {
856         push(@{ $form->{id}}, $winston_id_for{$kennziffer});
857       } else {
858         push(@{ $form->{id}}, "$kennziffer"); 
859       }
860       push(@{ $form->{amount}}, $form->{$kennziffer});
861     }    
862
863
864   } elsif ( $form->{format} eq 'elstertaxbird' ) {
865
866     # Define serveral filenames
867     $form->{IN} = 'taxbird.txb';
868
869     $form->{attachment_filename} = "USTVA-" . $form->{period} 
870     . sprintf("%02d", $form->{year} % 100) . ".txb";
871     
872     $form->{tmpfile} = "$userspath/" . $form->{attachment_filename};
873
874     # TODO: set Output to UTF-8 or system Preference
875     #$form->{"iconv"} = Text::Iconv->new($myconfig{dbcharset}, "UTF-8");
876     #my $iconv = $self->{"iconv"};
877     #$iconv->convert($variable);
878     if ($form->{period} =~ /^[4]\d$/ ){
879       my %periods = ( # Lx => taxbird
880                    '41' => '12',
881                    '42' => '13',
882                    '43' => '14',
883                    '44' => '15',
884                  );
885     
886       foreach my $quarter ( keys %periods ) {
887         $form->{taxbird_period} = $periods{$quarter} if ( $form->{period} eq $quarter);
888       }
889     } elsif ($form->{period} =~ /^\d+$/ ) {
890       $form->{period} =~ s/^0//g;
891       my $period = $form->{period};
892       $period * 1;
893       $period--;
894       $form->{period} = $period;
895     } else {
896       $form->header;
897       USTVA::error( $locale->text('Wrong Period' ));
898       exit(0);
899     }
900     
901     my %lands = ( # Lx => taxbird # TODO: besser als array...
902                 'Baden Würtemberg'       => '0',
903                 'Bayern'                 => '1',
904                 'Berlin'                 => '2',
905                 'Brandenburg'            => '3',
906                 'Bremen'                 => '4',
907                 'Hamburg'                => '5',
908                 'Hessen'                 => '6',
909                 'Mecklenburg Vorpommern' => '7',
910                 'Niedersachsen'          => '8',
911                 'Nordrhein Westfalen'    => '9',
912                 'Rheinland Pfalz'        => '10',
913                 'Saarland'               => '11',
914                 'Sachsen'                => '12',
915                 'Sachsen Anhalt'         => '13',
916                 'Schleswig Holstein'     => '14',
917                 'Thüringen'              => '15',
918           );
919     foreach my $land ( keys %lands ){
920       $form->{taxbird_land_nr} = $lands{$land} if ($form->{elsterland} eq $land );
921     }
922     
923     $form->{co_zip} = $form->{co_city};
924     $form->{co_zip} =~ s/\D//g;
925     $form->{co_city} =~ s/\d//g;
926     $form->{co_city} =~ s/^\s//g;
927     
928     ($form->{co_phone_prefix}, $form->{co_phone}) = split("-", $form->{tel});
929     $form->{co_phone_prefix} =~ s/\s//g;
930     $form->{co_phone} =~ s/\s//g;
931     
932      $form->{taxbird_steuernummer} = $form->{steuernummer};
933     #      $form->{taxbird_steuernummer} =~ s/\D//g;
934     $form->{taxbird_steuernummer} =~ s/\///; # ersten Querstrich ersetzen
935     
936     # Numberformatting for Taxbird
937     my $temp_numberformat = $myconfig{numberformat};
938     # Numberformat must be '1000,00' for Taxbird ?!
939     $myconfig{numberformat} = '1000,00';
940     foreach my $number (@category_cent) {
941       $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '2', '') : '';
942     }
943     
944     foreach my $number (@category_euro) {
945       $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '0', '') : '';
946     }
947     # Re-set Numberformat
948     $myconfig{numberformat} = $temp_numberformat;
949     
950     # push Kennziffern to <%foreach Array fo easyer
951     # output in xml format. Thx to Moritz.
952     my %taxbird_id_for = (
953          
954         '511'  =>  'Kz51-calc',
955         '861'  =>  'Kz86-calc',
956         '971'  =>  'Kz97-calc',
957         '931'  =>  'Kz93-calc',
958         '811'  =>  'Kz81-calc',
959         '891'  =>  'Kz89-calc',
960         'Z45'  =>  'uebertrag',
961         'Z53'  =>  'ust-sum',
962         'Z62'  =>  'ust-minus-vost',
963         'Z65'  =>  'ust-sum+69',
964         'Z67'  =>  'ust-vz',
965     );
966           
967     
968     for my $kennziffer (@category_cent, @category_euro) {
969
970       next if ($kennziffer eq 'Z43');
971
972       if ($form->{$kennziffer} != 0){
973         if (defined $taxbird_id_for{$kennziffer}) {
974           push(@{ $form->{id}}, $taxbird_id_for{$kennziffer});
975         } else {
976           push(@{ $form->{id}}, "Kz$kennziffer"); 
977         }
978         push(@{ $form->{amount}}, $form->{$kennziffer});
979       }
980     }    
981     
982   } elsif ( $form->{format} eq '' ){ # No format error.
983     $form->header;
984     USTVA::error( $locale->text('Application Error. No Format given' ) . "!");
985     exit(0);
986  
987   } else { # All other Formats are wrong
988     $form->header;
989     USTVA::error( $locale->text('Application Error. Wrong Format') . ": " . $form->{format} );
990     exit(0);
991   }
992
993   
994   if ( $form->{period} eq '13' and $form->{format} ne 'html') {
995     $form->header;
996     USTVA::info(
997       $locale->text(
998       'Yearly taxreport not yet implemented')
999       . '!');
1000   }
1001     
1002   $form->{templates} = $myconfig{templates};
1003   $form->{templates} = "doc" if ( $form->{type} eq 'help' );
1004
1005   $form->parse_template(\%myconfig, $userspath);
1006
1007   $lxdebug->leave_sub();
1008 }
1009
1010 sub config_step1 {
1011   $lxdebug->enter_sub();
1012
1013   # edit all taxauthority prefs
1014
1015   $form->header;
1016   &get_config($userspath, 'finanzamt.ini');
1017
1018   my $land = $form->{elsterland};
1019   my $amt  = $form->{elsterFFFF};
1020
1021
1022   if ($form->{cbscript} ne '' and $form->{cblogin} ne '') {
1023     $callback =  qq|$form->{cbscript}|
1024                 .qq|?action="config_step1"|
1025                 .qq|&login="$form->{cblogin}"|
1026                 .qq|&path="$form->{cbpath}"|
1027                 .qq|&root="$form->{cbroot}"|
1028                 .qq|&rpw="$form->{cbrpw}"|;
1029   }
1030
1031   $form->{title} = $locale->text('Tax Office Preferences');
1032
1033
1034   my $select_tax_office = USTVA->fa_auswahl($land, $amt, &elster_hash());
1035   my $checked_accrual = q|checked="checked"| if ($form->{method} eq 'accrual');
1036   my $checked_cash = q|checked="checked"| if ($form->{method} eq 'cash');
1037   my $checked_monthly = "checked" if ($form->{FA_voranmeld} eq 'month');
1038   my $checked_quarterly = "checked" if ($form->{FA_voranmeld} eq 'quarter');
1039   my $checked_dauerfristverlaengerung = "checked" if ($form->{FA_dauerfrist} eq '1');
1040   my $checked_kz_71 = "checked" if ($form->{FA_71} eq 'X');
1041
1042   my $_hidden_variables_ref;
1043
1044   my %_hidden_local_variables = (    
1045     'saved'       => $locale->text('Check Details'),
1046     'nextsub'     => 'config_step2',
1047     'warnung'     => '0',
1048   );
1049
1050   foreach my $variable (keys %_hidden_local_variables) {
1051     push @{ $_hidden_variables_ref }, 
1052         { 'variable' => $variable, 'value' => $_hidden_local_variables{$variable} };
1053   }
1054
1055   my @_hidden_form_variables = qw(
1056     FA_Name             FA_Strasse        FA_PLZ             
1057     FA_Ort              FA_Telefon        FA_Fax           
1058     FA_PLZ_Grosskunden  FA_PLZ_Postfach   FA_Postfach 
1059     FA_BLZ_1            FA_Kontonummer_1  FA_Bankbezeichnung_1  
1060     FA_BLZ_2            FA_Kontonummer_2  FA_Bankbezeichnung_oertlich
1061     FA_Oeffnungszeiten  FA_Email          FA_Internet
1062     steuernummer        elsterland        elstersteuernummer
1063     elsterFFFF          path              login
1064     password
1065   );
1066
1067   foreach my $variable (@_hidden_form_variables) {
1068     push @{ $_hidden_variables_ref}, 
1069         { 'variable' => $variable, 'value' => $form->{$variable} };
1070   }
1071
1072   # hä? kann die weg?
1073   my $steuernummer_new = '';
1074
1075   # Variablen für das Template zur Verfügung stellen
1076   my $template_ref = {
1077      select_tax_office               => $select_tax_office,
1078      checked_accrual                 => $checked_accrual,
1079      checked_cash                    => $checked_cash,
1080      checked_monthly                 => $checked_monthly,
1081      checked_quarterly               => $checked_quarterly,
1082      checked_dauerfristverlaengerung => $checked_dauerfristverlaengerung,
1083      hidden_variables                => $_hidden_variables_ref,
1084      
1085   };
1086   
1087   # Ausgabe des Templates
1088   print($form->parse_html_template('ustva/config_step1', $template_ref));
1089
1090   $lxdebug->leave_sub();
1091 }
1092
1093 sub config_step2 {
1094   $lxdebug->enter_sub();
1095   $form->header();
1096
1097 #  print qq|
1098 #    <body>
1099 #  |;
1100
1101   my $elsterland         = '';
1102   my $elster_amt         = '';
1103   my $elsterFFFF         = '';
1104   my $elstersteuernummer = '';
1105   &get_config($userspath, 'finanzamt.ini')
1106     if ($form->{saved} eq $locale->text('saved'));
1107
1108   # Auf Übergabefehler checken
1109   USTVA::info(  $locale->text('Missing Tax Authoritys Preferences') . "\n"
1110               . $locale->text('USTVA-Hint: Tax Authoritys'))
1111     if (   $form->{elsterFFFF_new} eq 'Auswahl'
1112         || $form->{elsterland_new} eq 'Auswahl');
1113   USTVA::info(  $locale->text('Missing Method!') . "\n"
1114               . $locale->text('USTVA-Hint: Method'))
1115     if ($form->{method} eq '');
1116
1117   # Klären, ob Variablen bereits befüllt sind UND ob veräderungen auf
1118   # der vorherigen Maske stattfanden: $change = 1(in der edit sub,
1119   # mittels get_config)
1120
1121   my $change = $form->{elsterland} eq $form->{elsterland_new}
1122     && $form->{elsterFFFF} eq $form->{elsterFFFF_new} ? '0' : '1';
1123   $change = '0' if ($form->{saved} eq $locale->text('saved'));
1124   my $elster_init = &elster_hash();
1125
1126   my %elster_init = %$elster_init;
1127
1128   if ($change eq '1') {
1129
1130     # Daten ändern
1131     $elsterland           = $form->{elsterland_new};
1132     $elsterFFFF           = $form->{elsterFFFF_new};
1133     $form->{elsterland}   = $elsterland;
1134     $form->{elsterFFFF}   = $elsterFFFF;
1135     $form->{steuernummer} = '';
1136     
1137     create_steuernummer();
1138
1139     # rebuild elster_amt
1140     my $amt = '';
1141     foreach $amt (keys %{ $elster_init{ $form->{elsterland} } }) {
1142       $elster_amt = $amt
1143         if ($elster_init{ $form->{elsterland}{$amt} eq $form->{elsterFFFF} });
1144     }
1145
1146     # load the predefined hash data into the FA_* Vars
1147     my @variables = qw(FA_Name FA_Strasse FA_PLZ FA_Ort
1148       FA_Telefon FA_Fax FA_PLZ_Grosskunden FA_PLZ_Postfach
1149       FA_Postfach
1150       FA_BLZ_1 FA_Kontonummer_1 FA_Bankbezeichnung_1
1151       FA_BLZ_2 FA_Kontonummer_2 FA_Bankbezeichnung_oertlich
1152       FA_Oeffnungszeiten FA_Email FA_Internet);
1153
1154     for (my $i = 0; $i <= 20; $i++) {
1155       $form->{ $variables[$i] } =
1156         $elster_init->{$elsterland}->{$elsterFFFF}->[$i];
1157     }
1158
1159   } else {
1160
1161     $elsterland = $form->{elsterland};
1162     $elsterFFFF = $form->{elsterFFFF};
1163
1164   }
1165   my $stnr = $form->{steuernummer};
1166   $stnr =~ s/\D+//g;
1167   my $patterncount   = $form->{patterncount};
1168   my $elster_pattern = $form->{elster_pattern};
1169   my $delimiter      = $form->{delimiter};
1170   my $steuernummer = $form->{steuernummer} if ($steuernummer eq '');
1171
1172   $form->{FA_Oeffnungszeiten} =~ s/\\\\n/\n/g;
1173   
1174   
1175
1176   my $input_steuernummer = USTVA->steuernummer_input(
1177                              $form->{elsterland}, 
1178                              $form->{elsterFFFF},
1179                              $form->{steuernummer}
1180   );
1181
1182   $lxdebug->message(LXDebug::DEBUG1, qq|$input_steuernummer|);
1183  
1184
1185   my $_hidden_variables_ref;
1186
1187   my %_hidden_local_variables = (
1188       'elsterland'          => $elsterland,
1189       'elsterFFFF'          => $elsterFFFF,
1190       'warnung'             => $warnung,
1191       'elstersteuernummer'  => $elstersteuernummer,
1192       'steuernummer'        => $stnr,
1193       'lastsub'             => 'config_step1',
1194       'nextsub'             => 'save',
1195       
1196   );
1197   
1198   foreach my $variable (keys %_hidden_local_variables) {
1199     push @{ $_hidden_variables_ref }, 
1200         { 'variable' => $variable, 'value' => $_hidden_local_variables{$variable} };
1201   }
1202  
1203   my @_hidden_form_variables = qw(
1204     FA_steuerberater_name   FA_steuerberater_street 
1205     FA_steuerberater_city   FA_steuerberater_tel
1206     FA_voranmeld            method
1207     FA_dauerfrist           FA_71 
1208     elster                  path 
1209     login                   password 
1210     type                    elster_init 
1211     saved                   callback
1212   );
1213
1214
1215
1216   foreach my $variable (@_hidden_form_variables) {
1217     push @{ $_hidden_variables_ref}, 
1218         { 'variable' => $variable, 'value' => $form->{$variable} };
1219   }
1220
1221   my $template_ref = {
1222      tax_office_data                 => $tax_office_data,
1223      input_steuernummer              => $input_steuernummer,
1224      readonly                        => '', #q|disabled="disabled"|,
1225      callback                        => $callback,
1226      hidden_variables                => $_hidden_variables_ref,
1227   };
1228   
1229   # Ausgabe des Templates
1230   print($form->parse_html_template('ustva/config_step2', $template_ref));
1231
1232
1233   $lxdebug->leave_sub();
1234 }
1235
1236 sub create_steuernummer {
1237   $lxdebug->enter_sub();
1238   my $part           = $form->{part};
1239   my $patterncount   = $form->{patterncount};
1240   my $delimiter      = $form->{delimiter};
1241   my $elster_pattern = $form->{elster_pattern};
1242
1243   # rebuild steuernummer and elstersteuernummer
1244   # es gibt eine gespeicherte steuernummer $form->{steuernummer}
1245   # und die parts und delimiter
1246
1247   my $h = 0;
1248   my $i = 0;
1249
1250   my $steuernummer_new       = $part;
1251   my $elstersteuernummer_new = $form->{elster_FFFF};
1252   $elstersteuernummer_new .= '0';
1253
1254   for ($h = 1; $h < $patterncount; $h++) {
1255     $steuernummer_new .= qq|$delimiter|;
1256     for (my $i = 1; $i <= length($elster_pattern); $i++) {
1257       $steuernummer_new       .= $form->{"part_$h\_$i"};
1258       $elstersteuernummer_new .= $form->{"part_$h\_$i"};
1259     }
1260   }
1261   if ($form->{steuernummer} ne $steuernummer_new) {
1262     $form->{steuernummer}       = $steuernummer_new;
1263     $form->{elstersteuernummer} = $elstersteuernummer_new;
1264     $form->{steuernummer_new}   = $steuernummer_new;
1265   } else {
1266     $form->{steuernummer_new}       = '';
1267     $form->{elstersteuernummer_new} = '';
1268   }
1269   $lxdebug->leave_sub();
1270 }
1271
1272 sub get_config {
1273   $lxdebug->enter_sub();
1274
1275   my ($userpath, $filename) = @_;
1276   my ($key,      $value)    = '';
1277   open(FACONF, "$userpath/$form->{login}_$filename")
1278     or    #falls Datei nicht vorhanden ist
1279     sub {
1280     open(FANEW, ">$userpath/$form->{login}_$filename")
1281       or $form->error("$userpath/$filename : $!");
1282     close FANEW;
1283     open(FACONF, "$userpath/$form->{login}_$filename")
1284       or $form->error("$userpath/$form->{username}_$filename : $!");
1285     };
1286   while (<FACONF>) {
1287     last if /^\[/;
1288     next if /^(#|\s)/;
1289
1290     # remove comments
1291     s/\s#.*//g;
1292
1293     # remove any trailing whitespace
1294     s/^\s*(.*?)\s*$/$1/;
1295     ($key, $value) = split /=/, $_, 2;
1296
1297     $form->{$key} = "$value";
1298
1299   }
1300   close FACONF;
1301
1302   $lxdebug->leave_sub();
1303 }
1304
1305 sub save {
1306   $lxdebug->enter_sub();
1307   my $filename = "$form->{login}_$form->{filename}";
1308
1309   #zuerst die steuernummer aus den part, parts_X_Y und delimiter herstellen
1310   create_steuernummer();
1311
1312   # Textboxen formatieren: Linebreaks entfernen
1313   #
1314   $form->{FA_Oeffnungszeiten} =~ s/\r\n/\\n/g;
1315
1316   #URL mit http:// davor?
1317   $form->{FA_Internet} =~ s/^http:\/\///;
1318   $form->{FA_Internet} = 'http://' . $form->{FA_Internet};
1319
1320   my @config = qw(
1321     elster              elsterland            elstersteuernummer  steuernummer
1322     elsteramt           elsterFFFF            FA_Name             FA_Strasse
1323     FA_PLZ              FA_Ort                FA_Telefon          FA_Fax 
1324     FA_PLZ_Grosskunden  FA_PLZ_Postfach       FA_Postfach         FA_BLZ_1 
1325     FA_Kontonummer_1    FA_Bankbezeichnung_1  FA_BLZ_2            FA_Kontonummer_2
1326     FA_Bankbezeichnung_oertlich FA_Oeffnungszeiten
1327     FA_Email FA_Internet FA_voranmeld method FA_steuerberater_name
1328     FA_steuerberater_street FA_steuerberater_city FA_steuerberater_tel
1329     FA_71 FA_dauerfrist);
1330
1331   # Hier kommt dann die Plausibilitätsprüfung der ELSTERSteuernummer
1332   if ($form->{elstersteuernummer} ne '000000000') {
1333     $form->{elster} = '1';
1334     open(CONF, ">$userspath/$filename") or $form->error("$filename : $!");
1335
1336     # create the config file
1337     print CONF qq|# Configuration file for USTVA\n\n|;
1338     my $key = '';
1339     foreach $key (sort @config) {
1340       $form->{$key} =~ s/\\/\\\\/g;
1341       # strip M
1342       $form->{$key} =~ s/\r\n/\n/g;
1343
1344       print CONF qq|$key=|;
1345       if ($form->{$key} ne 'Y') {
1346         print CONF qq|$form->{$key}\n|;
1347       }
1348       if ($form->{$key} eq 'Y') {
1349         print CONF qq|checked \n|;
1350       }
1351     }
1352     print CONF qq|\n\n|;
1353     close CONF;
1354     $form->{saved} = $locale->text('saved');
1355
1356   } else {
1357
1358     $form->{saved} = $locale->text('Choose a Tax Number');
1359   }
1360
1361   config_step2();
1362   $lxdebug->leave_sub();
1363 }
1364
1365
1366 sub continue {
1367   $lxdebug->enter_sub();
1368
1369   # allow Symbolic references just here:
1370   no strict 'refs';
1371   &{ $form->{nextsub} };
1372   use strict 'refs';
1373   $lxdebug->leave_sub();
1374 }
1375
1376 sub back {
1377   $lxdebug->enter_sub();
1378   &{ $form->{lastsub} };
1379   $lxdebug->leave_sub();
1380 }
1381
1382 sub elster_hash {
1383   $lxdebug->enter_sub();
1384   my $finanzamt = USTVA->query_finanzamt(\%myconfig, \%$form);
1385   $lxdebug->leave_sub();
1386   return $finanzamt;
1387 }
1388
1389