fc1b5e126d0f51351ccdea1a4d20497f2441c249
[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   USTVA->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 zum Einlesen der Finanzamtdaten aus finanzamt.ini
532
533   USTVA->get_config($userspath, 'finanzamt.ini');
534
535   # init some form vars
536   my @anmeldungszeitraum =
537     qw('0401' '0402' '0403' 
538        '0404' '0405' '0406' 
539        '0407' '0408' '0409' 
540        '0410' '0411' '0412' 
541        '0441' '0442' '0443' '0444');
542
543   foreach my $item (@anmeldungszeitraum) {
544     $form->{$item} = "";
545   }
546
547     #forgotten the year --> thisyear
548     if ($form->{year} !~ m/^\d\d\d\d$/) {
549       $form->{year} = substr(
550                              $form->datetonum(
551                                     $form->current_date(\%myconfig), \%myconfig
552                              ),
553                              0, 4);
554       $lxdebug->message(LXDebug::DEBUG1,
555                         qq|Actual year from Database: $form->{year}\n|);
556     }
557
558     #
559     # using dates in ISO-8601 format: yyyymmmdd  for Postgres...
560     #
561     
562     #yearly report
563     if ($form->{period} eq "13") {
564       $form->{fromdate} = "$form->{year}0101";
565       $form->{todate}   = "$form->{year}1231";
566     }
567
568     #Quater reports
569     if ($form->{period} eq "41") {
570       $form->{fromdate} = "$form->{year}0101";
571       $form->{todate}   = "$form->{year}0331";
572       $form->{'0441'}   = "X";
573     }
574     if ($form->{period} eq "42") {
575       $form->{fromdate} = "$form->{year}0401";
576       $form->{todate}   = "$form->{year}0630";
577       $form->{'0442'}   = "X";
578     }
579     if ($form->{period} eq "43") {
580       $form->{fromdate} = "$form->{year}0701";
581       $form->{todate}   = "$form->{year}0930";
582       $form->{'0443'}   = "X";
583     }
584     if ($form->{period} eq "44") {
585       $form->{fromdate} = "$form->{year}1001";
586       $form->{todate}   = "$form->{year}1231";
587       $form->{'0444'}   = "X";
588     }
589
590     #Monthly reports
591   SWITCH: {
592       $form->{period} eq "01" && do {
593         $form->{fromdate} = "$form->{year}0101";
594         $form->{todate}   = "$form->{year}0131";
595         $form->{'0401'}   = "X";
596         last SWITCH;
597       };
598       $form->{period} eq "02" && do {
599         $form->{fromdate} = "$form->{year}0201";
600
601         #this works from 1901 to 2099, 1900 and 2100 fail.
602         my $leap = ($form->{year} % 4 == 0) ? "29" : "28";
603         $form->{todate} = "$form->{year}02$leap";
604         $form->{"0402"} = "X";
605         last SWITCH;
606       };
607       $form->{period} eq "03" && do {
608         $form->{fromdate} = "$form->{year}0301";
609         $form->{todate}   = "$form->{year}0331";
610         $form->{"0403"}   = "X";
611         last SWITCH;
612       };
613       $form->{period} eq "04" && do {
614         $form->{fromdate} = "$form->{year}0401";
615         $form->{todate}   = "$form->{year}0430";
616         $form->{"0404"}   = "X";
617         last SWITCH;
618       };
619       $form->{period} eq "05" && do {
620         $form->{fromdate} = "$form->{year}0501";
621         $form->{todate}   = "$form->{year}0531";
622         $form->{"0405"}   = "X";
623         last SWITCH;
624       };
625       $form->{period} eq "06" && do {
626         $form->{fromdate} = "$form->{year}0601";
627         $form->{todate}   = "$form->{year}0630";
628         $form->{"0406"}   = "X";
629         last SWITCH;
630       };
631       $form->{period} eq "07" && do {
632         $form->{fromdate} = "$form->{year}0701";
633         $form->{todate}   = "$form->{year}0731";
634         $form->{"0407"}   = "X";
635         last SWITCH;
636       };
637       $form->{period} eq "08" && do {
638         $form->{fromdate} = "$form->{year}0801";
639         $form->{todate}   = "$form->{year}0831";
640         $form->{"0408"}   = "X";
641         last SWITCH;
642       };
643       $form->{period} eq "09" && do {
644         $form->{fromdate} = "$form->{year}0901";
645         $form->{todate}   = "$form->{year}0930";
646         $form->{"0409"}   = "X";
647         last SWITCH;
648       };
649       $form->{period} eq "10" && do {
650         $form->{fromdate} = "$form->{year}1001";
651         $form->{todate}   = "$form->{year}1031";
652         $form->{"0410"}   = "X";
653         last SWITCH;
654       };
655       $form->{period} eq "11" && do {
656         $form->{fromdate} = "$form->{year}1101";
657         $form->{todate}   = "$form->{year}1130";
658         $form->{"0411"}   = "X";
659         last SWITCH;
660       };
661       $form->{period} eq "12" && do {
662         $form->{fromdate} = "$form->{year}1201";
663         $form->{todate}   = "$form->{year}1231";
664         $form->{"0412"}   = "X";
665         last SWITCH;
666       };
667     }
668
669   # Kontrollvariable für die Templates 
670   $form->{'year2007'} = ($form->{year} >= 2007 ) ? "1":"0";
671
672
673   # Get the USTVA
674   USTVA->ustva(\%myconfig, \%$form);
675
676   # reformat Dates to dateformat
677   $form->{fromdate} = $locale->date(\%myconfig, $form->{fromdate}, 0, 0, 0);
678
679   $form->{todate} = $form->current_date(\%myconfig) unless $form->{todate};
680   $form->{todate} = $locale->date(\%myconfig, $form->{todate}, 0, 0, 0);
681
682   $form->{longperiod} =
683     $locale->date(\%myconfig, $form->current_date(\%myconfig), 1, 0, 0);
684
685   # if there are any dates construct a where
686   if ($form->{fromdate} || $form->{todate}) {
687
688     $form->{todate} = $form->current_date($myconfig)  unless ($form->{todate});
689
690     my $longtodate  = $locale->date($myconfig, $form->{todate}, 1, 0, 0);
691     my $shorttodate = $locale->date($myconfig, $form->{todate}, 0, 0, 0);
692
693     my $longfromdate  = $locale->date($myconfig, $form->{fromdate}, 1, 0, 0);
694     my $shortfromdate = $locale->date($myconfig, $form->{fromdate}, 0, 0, 0);
695
696     $form->{this_period} = "$shortfromdate<br>\n$shorttodate";
697     $form->{longperiod}      =
698         $locale->text('for Period')
699       . qq|<br>\n$longfromdate |
700       . $locale->text('to (date)')
701       . qq| $longtodate|;
702   }
703
704   if ($form->{comparefromdate} || $form->{comparetodate}) {
705     my $longcomparefromdate =
706       $locale->date(\%myconfig, $form->{comparefromdate}, 1, 0, 0);
707     my $shortcomparefromdate =
708       $locale->date(\%myconfig, $form->{comparefromdate}, 0, 0, 0);
709
710     my $longcomparetodate =
711       $locale->date(\%myconfig, $form->{comparetodate}, 1, 0, 0);
712     my $shortcomparetodate =
713       $locale->date(\%myconfig, $form->{comparetodate}, 0, 0, 0);
714
715     $form->{last_period} = "$shortcomparefromdate<br>\n$shortcomparetodate";
716     $form->{longperiod} .=
717         "<br>\n$longcomparefromdate "
718       . $locale->text('to (date)')
719       . qq| $longcomparetodate|;
720   }
721
722   $form->{Datum_heute} =
723     $locale->date(\%myconfig, $form->current_date(\%myconfig), 0, 0, 0);
724
725   # setup variables for the form
726   my @a = qw(company businessnumber tel fax email
727     co_chief co_department co_custom1 co_custom2 co_custom3 co_custom4 co_custom5
728     co_name1 co_name2  co_street co_street1 co_zip co_city co_city1 co_country co_tel co_tel1 co_tel2
729     co_fax co_fax1 co_email co_email1 co_url co_url1 ustid duns
730     co_bankname co_bankname1 co_bankname2 co_bankname3 co_blz co_blz1
731     co_blz2 co_blz3 co_accountnr co_accountnr1 co_accountnr2 co_accountnr3);
732
733   map { $form->{$_} = $myconfig{$_} } @a;
734
735   if ($form->{address} ne '') {
736     my $temp = $form->{address};
737     $temp =~ s/\\n/<br \/>/;
738     ($form->{co_street}, $form->{co_city}) = split("<br \/>", $temp);
739     $form->{co_city} =~ s/\\n//g;
740   }
741
742   ################################
743   #
744   # Nation specific customisations
745   #
746   ################################
747   
748   # Germany
749   
750   if ( $form->{coa} eq 'Germany-DATEV-SKR03EU' or $form->{coa} eq 'Germany-DATEV-SKR04EU') {
751       
752     #
753     # Outputformat specific customisation's
754     #
755
756     my @category_cent = qw(
757       511 861 36   80   971  931  98   96   53   74
758       85  65  66   61   62   67   63   64   59   69 
759       39  83  811  891  Z43  Z45  Z53  Z62  Z65  Z67
760       
761     );
762
763     my @category_euro = qw(
764       41 44 49 43 48 51 86 35 77 76 91 89
765       97 93 95 94 42 60 45 52 73 84 81 
766     );
767     
768     $form->{id} = [];
769     $form->{amount} = [];
770
771     if ( $form->{format} eq 'pdf' or $form->{format} eq 'postscript') {
772
773       $form->{IN} = "$form->{type}-$form->{year}.tex";
774       $form->{padding} = "~~";
775       $form->{bold}    = "\textbf{";
776       $form->{endbold} = "}";
777       $form->{br}      = '\\\\';
778
779       # Zahlenformatierung für Latex USTVA Formulare
780
781       foreach my $number (@category_euro) {
782         $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '0', '');
783       }
784
785       my ${decimal_comma} = ( $myconfig{numberformat} eq '1.000,00'
786            or $myconfig{numberformat} eq '1000,00' ) ? ',':'.';
787
788       foreach my $number (@category_cent) {
789         $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '');
790         $form->{$number} =~ s/${decimal_comma}/~~/g;
791       }
792
793     } elsif ( $form->{format} eq 'html') { # Formatierungen für HTML Ausgabe
794
795       $form->{IN} = $form->{type} . '.html';
796       $form->{padding} = "&nbsp;&nbsp;";
797       $form->{bold}    = "<b>";
798       $form->{endbold} = "</b>";
799       $form->{br}      = "<br>";
800       $form->{address} =~ s/\\n/\n/g;
801
802       foreach $number (@category_cent) {
803         $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '0');
804       }
805       
806       foreach $number (@category_euro) {
807         $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '0', '0');
808       }
809
810     } elsif ( $form->{format} eq 'elsterwinston' ) {
811
812       $form->{IN} = 'winston.xml';
813       
814       #
815       # Build Winston filename
816       #
817       
818       my $file = 'U';     # 1. char 'U' = USTVA
819       $file .= $form->{period};
820       #4. and 5. char = year modulo 100
821       $file .= sprintf("%02d", $form->{year} % 100);
822       #6. to 18. char = Elstersteuernummer
823       #Beispiel: Steuernummer in Bayern
824       #111/222/33334 ergibt für UStVA Jan 2004: U01049111022233334
825       $file .= $form->{elsterFFFF};
826       $file .= $form->{elstersteuernummer};
827       #file suffix
828       $file .= '.xml';
829       $form->{tmpfile} = "$userspath/$file";
830
831       $form->{attachment_filename} = "$file";
832    
833       # Zahlenformatierung für Winston
834
835       my $temp_numberformat = $myconfig{numberformat};
836
837       # Numberformat must be '1000.00' for Winston
838
839       $myconfig{numberformat} = '1000.00';
840
841       foreach my $number (@category_cent) {
842         $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '2', '') : '';
843       }
844       
845       foreach my $number (@category_euro) {
846         $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '0', '') : '';
847       }
848       # Re-set Numberformat
849       $myconfig{numberformat} = $temp_numberformat;
850
851
852       # push Kennziffern to <%foreach Array fo easyer
853       # output in xml format. Thx to Moritz.
854       my %winston_id_for = (
855        # No Winston remap?!
856       );
857             
858
859       foreach my $kennziffer (@category_cent, @category_euro) {
860
861         next if ( $kennziffer =~ m/Z\d\d/);
862         next if (   $form->{$kennziffer} == 0 );
863         
864         if (defined $winston_id_for{$kennziffer} ) {
865           push(@{ $form->{id}}, $winston_id_for{$kennziffer});
866         } else {
867           push(@{ $form->{id}}, "$kennziffer"); 
868         }
869         push(@{ $form->{amount}}, $form->{$kennziffer});
870       }    
871
872
873     } elsif ( $form->{format} eq 'elstertaxbird' ) {
874
875       # Define serveral filenames
876       $form->{IN} = 'taxbird.txb';
877
878       $form->{attachment_filename} = "USTVA-" . $form->{period} 
879       . sprintf("%02d", $form->{year} % 100) . ".txb";
880       
881       $form->{tmpfile} = "$userspath/" . $form->{attachment_filename};
882
883       # TODO: set Output to UTF-8 or system Preference
884       #$form->{"iconv"} = Text::Iconv->new($myconfig{dbcharset}, "UTF-8");
885       #my $iconv = $self->{"iconv"};
886       #$iconv->convert($variable);
887       if ($form->{period} =~ /^[4]\d$/ ){
888         my %periods = ( # Lx => taxbird
889                      '41' => '12',
890                      '42' => '13',
891                      '43' => '14',
892                      '44' => '15',
893                    );
894       
895         foreach my $quarter ( keys %periods ) {
896           $form->{taxbird_period} = $periods{$quarter} if ( $form->{period} eq $quarter);
897         }
898       } elsif ($form->{period} =~ /^\d+$/ ) {
899         $form->{period} =~ s/^0//g;
900         my $period = $form->{period};
901         $period * 1;
902         $period--;
903         $form->{period} = $period;
904       } else {
905         $form->header;
906         USTVA::error( $locale->text('Wrong Period' ));
907         exit(0);
908       }
909       
910       my %lands = ( # Lx => taxbird # TODO: besser als array...
911                   'Baden Würtemberg'       => '0',
912                   'Bayern'                 => '1',
913                   'Berlin'                 => '2',
914                   'Brandenburg'            => '3',
915                   'Bremen'                 => '4',
916                   'Hamburg'                => '5',
917                   'Hessen'                 => '6',
918                   'Mecklenburg Vorpommern' => '7',
919                   'Niedersachsen'          => '8',
920                   'Nordrhein Westfalen'    => '9',
921                   'Rheinland Pfalz'        => '10',
922                   'Saarland'               => '11',
923                   'Sachsen'                => '12',
924                   'Sachsen Anhalt'         => '13',
925                   'Schleswig Holstein'     => '14',
926                   'Thüringen'              => '15',
927             );
928       foreach my $land ( keys %lands ){
929         $form->{taxbird_land_nr} = $lands{$land} if ($form->{elsterland} eq $land );
930       }
931       
932       $form->{co_zip} = $form->{co_city};
933       $form->{co_zip} =~ s/\D//g;
934       $form->{co_city} =~ s/\d//g;
935       $form->{co_city} =~ s/^\s//g;
936       
937       ($form->{co_phone_prefix}, $form->{co_phone}) = split("-", $form->{tel});
938       $form->{co_phone_prefix} =~ s/\s//g;
939       $form->{co_phone} =~ s/\s//g;
940       
941        $form->{taxbird_steuernummer} = $form->{steuernummer};
942       #      $form->{taxbird_steuernummer} =~ s/\D//g;
943       $form->{taxbird_steuernummer} =~ s/\///; # ersten Querstrich ersetzen
944       
945       # Numberformatting for Taxbird
946       my $temp_numberformat = $myconfig{numberformat};
947       # Numberformat must be '1000,00' for Taxbird ?!
948       $myconfig{numberformat} = '1000,00';
949       foreach my $number (@category_cent) {
950         $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '2', '') : '';
951       }
952       
953       foreach my $number (@category_euro) {
954         $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '0', '') : '';
955       }
956       # Re-set Numberformat
957       $myconfig{numberformat} = $temp_numberformat;
958       
959       # push Kennziffern to <%foreach Array fo easyer
960       # output in xml format. Thx to Moritz.
961       my %taxbird_id_for = (
962            
963           '511'  =>  'Kz51-calc',
964           '861'  =>  'Kz86-calc',
965           '971'  =>  'Kz97-calc',
966           '931'  =>  'Kz93-calc',
967           '811'  =>  'Kz81-calc',
968           '891'  =>  'Kz89-calc',
969           'Z45'  =>  'uebertrag',
970           'Z53'  =>  'ust-sum',
971           'Z62'  =>  'ust-minus-vost',
972           'Z65'  =>  'ust-sum+69',
973           'Z67'  =>  'ust-vz',
974       );
975             
976       
977       for my $kennziffer (@category_cent, @category_euro) {
978
979         next if ($kennziffer eq 'Z43');
980
981         if ($form->{$kennziffer} != 0){
982           if (defined $taxbird_id_for{$kennziffer}) {
983             push(@{ $form->{id}}, $taxbird_id_for{$kennziffer});
984           } else {
985             push(@{ $form->{id}}, "Kz$kennziffer"); 
986           }
987           push(@{ $form->{amount}}, $form->{$kennziffer});
988         }
989       }    
990       
991     } elsif ( $form->{format} eq '' ){ # No format error.
992       $form->header;
993       USTVA::error( $locale->text('Application Error. No Format given' ) . "!");
994       exit(0);
995    
996     } else { # All other Formats are wrong
997       $form->header;
998       USTVA::error( $locale->text('Application Error. Wrong Format') . ": " . $form->{format} );
999       exit(0);
1000     }
1001
1002   # Austria
1003   } elsif ($form->{coa} eq 'Austria') {
1004
1005     #
1006     # Outputformat specific customisation's
1007     #
1008
1009     my @category_euro = qw(
1010       511 861 36   80   971  931  98   96   53   74
1011       85  65  66   61   62   67   63   64   59   69 
1012       39  83  811  891  Z43  Z45  Z53  Z62  Z65  Z67
1013       41 44 49 43 48 51 86 35 77 76 91 89
1014       97 93 95 94 42 60 45 52 73 84 81 
1015     );
1016     
1017
1018     if ( $form->{format} eq 'html') { # Formatierungen für HTML Ausgabe
1019
1020       $form->{IN} = $form->{type} . '.html';
1021       $form->{padding} = "&nbsp;&nbsp;";
1022       $form->{bold}    = "<b>";
1023       $form->{endbold} = "</b>";
1024       $form->{br}      = "<br>";
1025       $form->{address} =~ s/\\n/\n/g;
1026
1027       foreach $number (@category_euro) {
1028         $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '0');
1029       }
1030     }
1031     
1032   }
1033
1034   # end nation specific customisations
1035   
1036   if ( $form->{period} eq '13' and $form->{format} ne 'html') {
1037     $form->header;
1038     USTVA::info(
1039       $locale->text(
1040       'Yearly taxreport not yet implemented')
1041       . '!');
1042   }
1043     
1044   $form->{templates} = $myconfig{templates};
1045   $form->{templates} = "doc" if ( $form->{type} eq 'help' );
1046
1047   $form->parse_template(\%myconfig, $userspath);
1048
1049   $lxdebug->leave_sub();
1050 }
1051
1052 sub config_step1 {
1053   $lxdebug->enter_sub();
1054
1055   # edit all taxauthority prefs
1056
1057   $form->header;
1058   USTVA->get_config($userspath, 'finanzamt.ini');
1059
1060   my $land = $form->{elsterland};
1061   my $amt  = $form->{elsterFFFF};
1062
1063
1064   if ($form->{cbscript} ne '' and $form->{cblogin} ne '') {
1065     $callback =  qq|$form->{cbscript}|
1066                 .qq|?action="config_step1"|
1067                 .qq|&login="$form->{cblogin}"|
1068                 .qq|&path="$form->{cbpath}"|
1069                 .qq|&root="$form->{cbroot}"|
1070                 .qq|&rpw="$form->{cbrpw}"|;
1071   }
1072
1073   $form->{title} = $locale->text('Tax Office Preferences');
1074
1075
1076   my $select_tax_office = USTVA->fa_auswahl($land, $amt, &elster_hash());
1077   my $checked_accrual = q|checked="checked"| if ($form->{method} eq 'accrual');
1078   my $checked_cash = q|checked="checked"| if ($form->{method} eq 'cash');
1079   my $checked_monthly = "checked" if ($form->{FA_voranmeld} eq 'month');
1080   my $checked_quarterly = "checked" if ($form->{FA_voranmeld} eq 'quarter');
1081   my $checked_dauerfristverlaengerung = "checked" if ($form->{FA_dauerfrist} eq '1');
1082   my $checked_kz_71 = "checked" if ($form->{FA_71} eq 'X');
1083
1084   my $_hidden_variables_ref;
1085
1086   my %_hidden_local_variables = (    
1087     'saved'       => $locale->text('Check Details'),
1088     'nextsub'     => 'config_step2',
1089     'warnung'     => '0',
1090   );
1091
1092   foreach my $variable (keys %_hidden_local_variables) {
1093     push @{ $_hidden_variables_ref }, 
1094         { 'variable' => $variable, 'value' => $_hidden_local_variables{$variable} };
1095   }
1096
1097   my @_hidden_form_variables = qw(
1098     FA_Name             FA_Strasse        FA_PLZ             
1099     FA_Ort              FA_Telefon        FA_Fax           
1100     FA_PLZ_Grosskunden  FA_PLZ_Postfach   FA_Postfach 
1101     FA_BLZ_1            FA_Kontonummer_1  FA_Bankbezeichnung_1  
1102     FA_BLZ_2            FA_Kontonummer_2  FA_Bankbezeichnung_oertlich
1103     FA_Oeffnungszeiten  FA_Email          FA_Internet
1104     steuernummer        elsterland        elstersteuernummer
1105     elsterFFFF          path              login
1106     password
1107   );
1108
1109   foreach my $variable (@_hidden_form_variables) {
1110     push @{ $_hidden_variables_ref}, 
1111         { 'variable' => $variable, 'value' => $form->{$variable} };
1112   }
1113
1114   # hä? kann die weg?
1115   my $steuernummer_new = '';
1116
1117   # Variablen für das Template zur Verfügung stellen
1118   my $template_ref = {
1119      select_tax_office               => $select_tax_office,
1120      checked_accrual                 => $checked_accrual,
1121      checked_cash                    => $checked_cash,
1122      checked_monthly                 => $checked_monthly,
1123      checked_quarterly               => $checked_quarterly,
1124      checked_dauerfristverlaengerung => $checked_dauerfristverlaengerung,
1125      hidden_variables                => $_hidden_variables_ref,
1126      
1127   };
1128   
1129   # Ausgabe des Templates
1130   print($form->parse_html_template('ustva/config_step1', $template_ref));
1131
1132   $lxdebug->leave_sub();
1133 }
1134
1135 sub config_step2 {
1136   $lxdebug->enter_sub();
1137   $form->header();
1138
1139 #  print qq|
1140 #    <body>
1141 #  |;
1142
1143   my $elsterland         = '';
1144   my $elster_amt         = '';
1145   my $elsterFFFF         = '';
1146   my $elstersteuernummer = '';
1147   USTVA->get_config($userspath, 'finanzamt.ini')
1148     if ($form->{saved} eq $locale->text('saved'));
1149
1150   # Auf Übergabefehler checken
1151   USTVA::info(  $locale->text('Missing Tax Authoritys Preferences') . "\n"
1152               . $locale->text('USTVA-Hint: Tax Authoritys'))
1153     if (   $form->{elsterFFFF_new} eq 'Auswahl'
1154         || $form->{elsterland_new} eq 'Auswahl');
1155   USTVA::info(  $locale->text('Missing Method!') . "\n"
1156               . $locale->text('USTVA-Hint: Method'))
1157     if ($form->{method} eq '');
1158
1159   # Klären, ob Variablen bereits befüllt sind UND ob veräderungen auf
1160   # der vorherigen Maske stattfanden: $change = 1(in der edit sub,
1161   # mittels get_config)
1162
1163   my $change = $form->{elsterland} eq $form->{elsterland_new}
1164     && $form->{elsterFFFF} eq $form->{elsterFFFF_new} ? '0' : '1';
1165   $change = '0' if ($form->{saved} eq $locale->text('saved'));
1166   my $elster_init = &elster_hash();
1167
1168   my %elster_init = %$elster_init;
1169
1170   if ($change eq '1') {
1171
1172     # Daten ändern
1173     $elsterland           = $form->{elsterland_new};
1174     $elsterFFFF           = $form->{elsterFFFF_new};
1175     $form->{elsterland}   = $elsterland;
1176     $form->{elsterFFFF}   = $elsterFFFF;
1177     $form->{steuernummer} = '';
1178     
1179     create_steuernummer();
1180
1181     # rebuild elster_amt
1182     my $amt = '';
1183     foreach $amt (keys %{ $elster_init{ $form->{elsterland} } }) {
1184       $elster_amt = $amt
1185         if ($elster_init{ $form->{elsterland}{$amt} eq $form->{elsterFFFF} });
1186     }
1187
1188     # load the predefined hash data into the FA_* Vars
1189     my @variables = qw(FA_Name FA_Strasse FA_PLZ FA_Ort
1190       FA_Telefon FA_Fax FA_PLZ_Grosskunden FA_PLZ_Postfach
1191       FA_Postfach
1192       FA_BLZ_1 FA_Kontonummer_1 FA_Bankbezeichnung_1
1193       FA_BLZ_2 FA_Kontonummer_2 FA_Bankbezeichnung_oertlich
1194       FA_Oeffnungszeiten FA_Email FA_Internet);
1195
1196     for (my $i = 0; $i <= 20; $i++) {
1197       $form->{ $variables[$i] } =
1198         $elster_init->{$elsterland}->{$elsterFFFF}->[$i];
1199     }
1200
1201   } else {
1202
1203     $elsterland = $form->{elsterland};
1204     $elsterFFFF = $form->{elsterFFFF};
1205
1206   }
1207   my $stnr = $form->{steuernummer};
1208   $stnr =~ s/\D+//g;
1209   my $patterncount   = $form->{patterncount};
1210   my $elster_pattern = $form->{elster_pattern};
1211   my $delimiter      = $form->{delimiter};
1212   my $steuernummer = $form->{steuernummer} if ($steuernummer eq '');
1213
1214   $form->{FA_Oeffnungszeiten} =~ s/\\\\n/\n/g;
1215   
1216   
1217
1218   my $input_steuernummer = USTVA->steuernummer_input(
1219                              $form->{elsterland}, 
1220                              $form->{elsterFFFF},
1221                              $form->{steuernummer}
1222   );
1223
1224   $lxdebug->message(LXDebug::DEBUG1, qq|$input_steuernummer|);
1225  
1226
1227   my $_hidden_variables_ref;
1228
1229   my %_hidden_local_variables = (
1230       'elsterland'          => $elsterland,
1231       'elsterFFFF'          => $elsterFFFF,
1232       'warnung'             => $warnung,
1233       'elstersteuernummer'  => $elstersteuernummer,
1234       'steuernummer'        => $stnr,
1235       'lastsub'             => 'config_step1',
1236       'nextsub'             => 'save',
1237       
1238   );
1239   
1240   foreach my $variable (keys %_hidden_local_variables) {
1241     push @{ $_hidden_variables_ref }, 
1242         { 'variable' => $variable, 'value' => $_hidden_local_variables{$variable} };
1243   }
1244  
1245   my @_hidden_form_variables = qw(
1246     FA_steuerberater_name   FA_steuerberater_street 
1247     FA_steuerberater_city   FA_steuerberater_tel
1248     FA_voranmeld            method
1249     FA_dauerfrist           FA_71 
1250     elster                  path 
1251     login                   password 
1252     type                    elster_init 
1253     saved                   callback
1254   );
1255
1256
1257
1258   foreach my $variable (@_hidden_form_variables) {
1259     push @{ $_hidden_variables_ref}, 
1260         { 'variable' => $variable, 'value' => $form->{$variable} };
1261   }
1262
1263   my $template_ref = {
1264      tax_office_data                 => $tax_office_data,
1265      input_steuernummer              => $input_steuernummer,
1266      readonly                        => '', #q|disabled="disabled"|,
1267      callback                        => $callback,
1268      hidden_variables                => $_hidden_variables_ref,
1269   };
1270   
1271   # Ausgabe des Templates
1272   print($form->parse_html_template('ustva/config_step2', $template_ref));
1273
1274
1275   $lxdebug->leave_sub();
1276 }
1277
1278 sub create_steuernummer {
1279   $lxdebug->enter_sub();
1280   my $part           = $form->{part};
1281   my $patterncount   = $form->{patterncount};
1282   my $delimiter      = $form->{delimiter};
1283   my $elster_pattern = $form->{elster_pattern};
1284
1285   # rebuild steuernummer and elstersteuernummer
1286   # es gibt eine gespeicherte steuernummer $form->{steuernummer}
1287   # und die parts und delimiter
1288
1289   my $h = 0;
1290   my $i = 0;
1291
1292   my $steuernummer_new       = $part;
1293   my $elstersteuernummer_new = $form->{elster_FFFF};
1294   $elstersteuernummer_new .= '0';
1295
1296   for ($h = 1; $h < $patterncount; $h++) {
1297     $steuernummer_new .= qq|$delimiter|;
1298     for (my $i = 1; $i <= length($elster_pattern); $i++) {
1299       $steuernummer_new       .= $form->{"part_$h\_$i"};
1300       $elstersteuernummer_new .= $form->{"part_$h\_$i"};
1301     }
1302   }
1303   if ($form->{steuernummer} ne $steuernummer_new) {
1304     $form->{steuernummer}       = $steuernummer_new;
1305     $form->{elstersteuernummer} = $elstersteuernummer_new;
1306     $form->{steuernummer_new}   = $steuernummer_new;
1307   } else {
1308     $form->{steuernummer_new}       = '';
1309     $form->{elstersteuernummer_new} = '';
1310   }
1311   $lxdebug->leave_sub();
1312 }
1313
1314 sub save {
1315   $lxdebug->enter_sub();
1316   my $filename = "$form->{login}_$form->{filename}";
1317
1318   #zuerst die steuernummer aus den part, parts_X_Y und delimiter herstellen
1319   create_steuernummer();
1320
1321   # Textboxen formatieren: Linebreaks entfernen
1322   #
1323   $form->{FA_Oeffnungszeiten} =~ s/\r\n/\\n/g;
1324
1325   #URL mit http:// davor?
1326   $form->{FA_Internet} =~ s/^http:\/\///;
1327   $form->{FA_Internet} = 'http://' . $form->{FA_Internet};
1328
1329   my @config = qw(
1330     elster              elsterland            elstersteuernummer  steuernummer
1331     elsteramt           elsterFFFF            FA_Name             FA_Strasse
1332     FA_PLZ              FA_Ort                FA_Telefon          FA_Fax 
1333     FA_PLZ_Grosskunden  FA_PLZ_Postfach       FA_Postfach         FA_BLZ_1 
1334     FA_Kontonummer_1    FA_Bankbezeichnung_1  FA_BLZ_2            FA_Kontonummer_2
1335     FA_Bankbezeichnung_oertlich FA_Oeffnungszeiten
1336     FA_Email FA_Internet FA_voranmeld method FA_steuerberater_name
1337     FA_steuerberater_street FA_steuerberater_city FA_steuerberater_tel
1338     FA_71 FA_dauerfrist);
1339
1340   # Hier kommt dann die Plausibilitätsprüfung der ELSTERSteuernummer
1341   if ($form->{elstersteuernummer} ne '000000000') {
1342     $form->{elster} = '1';
1343     open(CONF, ">$userspath/$filename") or $form->error("$filename : $!");
1344
1345     # create the config file
1346     print CONF qq|# Configuration file for USTVA\n\n|;
1347     my $key = '';
1348     foreach $key (sort @config) {
1349       $form->{$key} =~ s/\\/\\\\/g;
1350       # strip M
1351       $form->{$key} =~ s/\r\n/\n/g;
1352
1353       print CONF qq|$key=|;
1354       if ($form->{$key} ne 'Y') {
1355         print CONF qq|$form->{$key}\n|;
1356       }
1357       if ($form->{$key} eq 'Y') {
1358         print CONF qq|checked \n|;
1359       }
1360     }
1361     print CONF qq|\n\n|;
1362     close CONF;
1363     $form->{saved} = $locale->text('saved');
1364
1365   } else {
1366
1367     $form->{saved} = $locale->text('Choose a Tax Number');
1368   }
1369
1370   config_step2();
1371   $lxdebug->leave_sub();
1372 }
1373
1374
1375 sub continue {
1376   $lxdebug->enter_sub();
1377
1378   # allow Symbolic references just here:
1379   no strict 'refs';
1380   &{ $form->{nextsub} };
1381   use strict 'refs';
1382   $lxdebug->leave_sub();
1383 }
1384
1385 sub back {
1386   $lxdebug->enter_sub();
1387   &{ $form->{lastsub} };
1388   $lxdebug->leave_sub();
1389 }
1390
1391 sub elster_hash {
1392   $lxdebug->enter_sub();
1393   my $finanzamt = USTVA->query_finanzamt(\%myconfig, \%$form);
1394   $lxdebug->leave_sub();
1395   return $finanzamt;
1396 }
1397
1398