Verlagern der USTVA Kennziffern auf einen zentralen Datenbankeintrag.
[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 "bin/mozilla/arap.pl";
28 require "bin/mozilla/common.pl";
29
30 #use strict;
31 #no strict 'refs';
32 #use diagnostics;
33 #use warnings; # FATAL=> 'all';
34 #use vars qw($locale $form %myconfig);
35 #our ($myconfig);
36 #use CGI::Carp "fatalsToBrowser";
37
38 use SL::PE;
39 use SL::RP;
40 use SL::USTVA;
41 use SL::User;
42 1;
43
44 # this is for our long dates
45 # $locale->text('January')
46 # $locale->text('February')
47 # $locale->text('March')
48 # $locale->text('April')
49 # $locale->text('May ')
50 # $locale->text('June')
51 # $locale->text('July')
52 # $locale->text('August')
53 # $locale->text('September')
54 # $locale->text('October')
55 # $locale->text('November')
56 # $locale->text('December')
57
58 # this is for our short month
59 # $locale->text('Jan')
60 # $locale->text('Feb')
61 # $locale->text('Mar')
62 # $locale->text('Apr')
63 # $locale->text('May')
64 # $locale->text('Jun')
65 # $locale->text('Jul')
66 # $locale->text('Aug')
67 # $locale->text('Sep')
68 # $locale->text('Oct')
69 # $locale->text('Nov')
70 # $locale->text('Dec')
71
72 # $form->parse_html_template('generic/util_hidden_variables');
73
74 #############################
75
76 sub report {
77   $lxdebug->enter_sub();
78
79   my $myconfig = \%myconfig;
80
81   $form->{title} = $locale->text('UStVA');
82   $form->{kz10}  = '';                       #Berichtigte Anmeldung? Ja =1 Nein=0
83
84   my $year = substr($form->datetonum($form->current_date(\%myconfig), \%myconfig ),
85              0, 4);
86
87   my $department = '';
88   local $hide = '';
89   $form->header;
90
91   # Einlesen der Finanzamtdaten
92   USTVA->get_config($userspath, 'finanzamt.ini');
93
94   # Hier Einlesen der user-config
95   # steuernummer entfernt für prerelease
96   my @a = qw(
97     signature      name          company       address        businessnumber 
98     tel            fax           email         co_chief       co_department 
99     co_custom1     co_custom2    co_custom3    co_custom4     co_custom5
100     co_name1       co_name2      co_street     co_street1     co_zip 
101     co_city        co_city1      co_country    co_tel         co_tel1 
102     co_tel2        co_fax        co_fax1       co_email       co_email1
103     co_url         co_url1       ustid         duns           co_bankname 
104     co_bankname1   co_bankname2  co_bankname3  co_blz         co_blz1
105     co_blz2        co_blz3       co_accountnr  co_accountnr1  co_accountnr2 
106     co_accountnr3
107   );
108
109   map { $form->{$_} = $myconfig->{$_} } @a;
110
111   my $openings = $form->{FA_Oeffnungszeiten};
112   $openings =~ s/\\\\n/<br>/g;
113
114   my $company_given = ($form->{company} ne '') 
115     ? qq|<h3>$form->{company}</h3>\n|
116     : qq|<a href=am.pl?action=config|
117       . qq|&level=Programm--Preferences&login=$form->{login}|
118       . qq|&password=$form->{password}>| 
119       . $locale->text('No Company Name given') . qq|!</a><br>|;
120
121
122   # Anpassungen der Variablennamen auf pre 2.1.1 Namen
123   # klären, ob $form->{company_street|_address} gesetzt sind
124   if ($form->{address} ne '') {
125     my $temp = $form->{address};
126     $temp =~ s/\\n/<br \/>/;
127     ($form->{co_street}, $form->{co_city}) = split("<br \/>", $temp);
128     $form->{co_city} =~ s/\\n//g;
129   }
130
131
132   my $address_given = 
133     ($form->{co_street} ne '' 
134       and ( 
135         $form->{co_zip} ne ''
136           or $form->{co_city} ne ''
137       )
138     ) 
139     ? qq|$form->{co_street}<br>|
140         . qq|$form->{co_street1}<br>|
141         . qq|$form->{co_zip} $form->{co_city}|
142     : qq|<a href=am.pl?action=config|
143         . qq|&level=Programm--Preferences&login=$form->{login}|
144         . qq|&password=$form->{password}>| 
145         . $locale->text('No Company Address given') 
146         . qq|!</a>\n|;
147
148   $form->{co_email} = $form->{email} unless $form->{co_email};
149   $form->{co_tel}   = $form->{tel}   unless $form->{co_tel};
150   $form->{co_fax}   = $form->{fax}   unless $form->{co_fax};
151   $form->{co_url}   = $form->{urlx}  unless $form->{co_url};
152
153   my $taxnumber_given = ($form->{steuernummer} ne '')
154     ? qq|$form->{steuernummer}|
155     : qq|<a href="ustva.pl?action="config_step1"|
156       . qq|&level=Programm--Finanzamteinstellungen&login=$form->{login}|
157       . qq|&password=$form->{password}">Keine Steuernummer hinterlegt!|
158       . qq|</a><br>|;
159
160   my $ustva_vorauswahl = &ustva_vorauswahl();
161
162   my @all_years = $form->all_years(\%myconfig);
163
164   my $select_year = qq|<select name=year title="| 
165     . $locale->text('Year') . qq|">|;
166   foreach my $key (@all_years) {
167     $select_year .= qq|<option |;
168     $select_year .= qq|selected| if ($key eq $form->{year});
169     $select_year .= qq| >$key</option>|;
170   }
171   $select_year   .=  qq|</select>|;
172
173   my $_checked = '';
174   $_checked = "checked" if ($form->{kz10} eq '1');
175   my $checkbox_kz_10 = qq|<input name="FA_10" id=FA_10 class=checkbox|
176     . qq| type=checkbox value="1" $_checked title = "|
177     . $locale->text('Amended Advance Turnover Tax Return (Nr. 10)')
178     . qq|">| 
179     . $locale->text('Amended Advance Turnover Tax Return'); 
180
181   my $method_local = ($form->{method} eq 'accrual') ? $locale->text('accrual') 
182                    : ($form->{method} eq 'cash')    ? $locale->text('cash')
183                    : '';
184
185   my $period_local = ( $form->{FA_voranmeld} eq 'month')   ? $locale->text('month')
186                    : ( $form->{FA_voranmeld} eq 'quarter') ? $locale->text('quarter')
187                    : '';  
188
189   my $tax_office_banks_ref = [
190     { BLZ             => $form->{FA_BLZ_1},
191       Kontonummer     => $form->{FA_Kontonummer_1},
192       Bankbezeichnung => $form->{FA_Bankbezeichnung_1}
193     },
194     { BLZ             => $form->{FA_BLZ_2},
195       Kontonummer     => $form->{FA_Kontonummer_2},
196       Bankbezeichnung => $form->{FA_Bankbezeichnung_oertlich}
197     }
198   ];
199  
200   
201   my $template_ref = {
202     openings         => $openings,  
203     company_given    => $company_given,
204     address_given    => $address_given,     
205     taxnumber_given  => $taxnumber_given,
206     select_year      => $select_year,      
207     period_local     => $period_local,
208     method_local     => $method_local,
209     ustva_vorauswahl => $ustva_vorauswahl,
210     checkbox_kz_10   => $checkbox_kz_10,
211     tax_office_banks => $tax_office_banks_ref,    
212     select_options   => &show_options,    
213   };
214   
215   print($form->parse_html_template('ustva/report', $template_ref));
216
217
218
219   $lxdebug->leave_sub();
220 }
221
222
223
224 sub help {
225   $lxdebug->enter_sub();
226
227   # parse help documents under doc
228   my $tmp = $form->{templates};
229   $form->{templates} = 'doc';
230   $form->{help}      = 'ustva';
231   $form->{type}      = 'help';
232   $form->{format}    = 'html';
233   &generate_ustva();
234
235   #$form->{templates} = $tmp;
236   $lxdebug->leave_sub();
237 }
238
239 sub show {
240   $lxdebug->enter_sub();
241
242   #&generate_ustva();
243   no strict 'refs';
244   $lxdebug->leave_sub();
245   call_sub($form->{"nextsub"});
246   use strict 'refs';
247 }
248
249 sub ustva_vorauswahl {
250   $lxdebug->enter_sub();
251
252   my $select_vorauswahl;
253
254   #Aktuelles Datum zerlegen:
255   my $date = $form->datetonum($form->current_date(\%myconfig), \%myconfig);
256
257   #$locale->date($myconfig, $form->current_date($myconfig), 0)=~ /(\d\d).(\d\d).(\d\d\d\d)/;
258   $form->{day}   = substr($date, 6, 2);
259   $form->{month} = substr($date, 4, 2);
260   $form->{year}  = substr($date, 0, 4);
261   $lxdebug->message(LXDebug::DEBUG1, qq|
262     Actual date from Database: $date\n    
263     Actual year from Database: $form->{year}\n
264     Actual day from Database: $form->{day}\n
265     Actual month from Database: $form->{month}\n|);
266
267   my $sel    = '';
268   my $yymmdd = '';
269
270   # Testdaten erzeugen:
271   #$form->{day}= '11';
272   #$form->{month}= '01';
273   #$form->{year}= 2004;
274   $select_vorauswahl = qq|
275      <input type=hidden name=day value=$form->{day}>
276      <input type=hidden name=month value=$form->{month}>
277      <input type=hidden name=yymmdd value=$yymmdd>
278      <input type=hidden name=sel value=$sel>
279   |;
280
281   if ($form->{FA_voranmeld} eq 'month') {
282
283     # Vorauswahl bei monatlichem Voranmeldungszeitraum
284
285     my %liste = ('01' => $locale->text('January'),
286                  '02' => $locale->text('February'),
287                  '03' => $locale->text('March'),
288                  '04' => $locale->text('April'),
289                  '05' => $locale->text('May'),
290                  '06' => $locale->text('June'),
291                  '07' => $locale->text('July'),
292                  '08' => $locale->text('August'),
293                  '09' => $locale->text('September'),
294                  '10' => $locale->text('October'),
295                  '11' => $locale->text('November'),
296                  '12' => $locale->text('December'),
297                  '13' => $locale->text('Yearly'),
298                 );
299
300     my $yy = $form->{year} * 10000;
301     $yymmdd = "$form->{year}$form->{month}$form->{day}" * 1;
302     $sel    = '';
303     my $dfv = '';
304
305     # Offset für Dauerfristverlängerung
306     $dfv = '100' if ($form->{FA_dauerfrist} eq '1');
307
308   SWITCH: {
309       $yymmdd <= ($yy + 110 + $dfv) && do {
310         $form->{year} = $form->{year} - 1;
311         $sel = '12';
312         last SWITCH;
313       };
314       $yymmdd <= ($yy + 210 + $dfv) && do {
315         $sel = '01';
316         last SWITCH;
317       };
318       $yymmdd <= ($yy + 310 + $dfv) && do {
319         $sel = '02';
320         last SWITCH;
321       };
322       $yymmdd <= ($yy + 410 + $dfv) && do {
323         $sel = '03';
324         last SWITCH;
325       };
326       $yymmdd <= ($yy + 510 + $dfv) && do {
327         $sel = '04';
328         last SWITCH;
329       };
330       $yymmdd <= ($yy + 610 + $dfv) && do {
331         $sel = '05';
332         last SWITCH;
333       };
334       $yymmdd <= ($yy + 710 + $dfv) && do {
335         $sel = '06';
336         last SWITCH;
337       };
338       $yymmdd <= ($yy + 810 + $dfv) && do {
339         $sel = '07';
340         last SWITCH;
341       };
342       $yymmdd <= ($yy + 910 + $dfv) && do {
343         $sel = '08';
344         last SWITCH;
345       };
346       $yymmdd <= ($yy + 1010 + $dfv) && do {
347         $sel = '09';
348         last SWITCH;
349       };
350       $yymmdd <= ($yy + 1110 + $dfv) && do {
351         $sel = '10';
352         last SWITCH;
353       };
354       $yymmdd <= ($yy + 1210) && do {
355         $sel = '11';
356         last SWITCH;
357       };
358       $yymmdd <= ($yy + 1231) && do {
359         $sel = '12';
360         last SWITCH;
361       };
362
363     }
364     $select_vorauswahl .= qq|<select id="zeitraum" name="period" title="|
365   . $locale->text('Select a period') . qq|" >|;
366
367     my $key = '';
368     foreach $key (sort keys %liste) {
369       my $selected = '';
370       $selected = 'selected' if ($sel eq $key);
371       $select_vorauswahl .= qq|
372          <option value="$key" $selected> $liste{$key}</option>
373       |;
374     }
375     $select_vorauswahl .= qq|</select>|;
376
377   } elsif ($form->{FA_voranmeld} eq 'quarter') {
378
379     # Vorauswahl bei quartalsweisem Voranmeldungszeitraum
380     my %liste = ('41'  => $locale->text('1. Quarter'),
381                  '42'  => $locale->text('2. Quarter'),
382                  '43'  => $locale->text('3. Quarter'),
383                  '44'  => $locale->text('4. Quarter'),
384                  '13' => $locale->text('Yearly'),);
385
386     my $yy = $form->{year} * 10000;
387     $yymmdd = "$form->{year}$form->{month}$form->{day}" * 1;
388     $sel    = '';
389     my $dfv = '';    # Offset für Dauerfristverlängerung
390     $dfv = '100' if ($form->{FA_dauerfrist} eq '1');
391
392   SWITCH: {
393       $yymmdd <= ($yy + 110 + $dfv) && do {
394         $form->{year} = $form->{year} - 1;
395         $sel = '44';
396         last SWITCH;
397       };
398       $yymmdd <= ($yy + 410 + $dfv) && do {
399         $sel = '41';
400         last SWITCH;
401       };
402       $yymmdd <= ($yy + 710 + $dfv) && do {
403         $sel = '42';
404         last SWITCH;
405       };
406       $yymmdd <= ($yy + 1010 + $dfv) && do {
407         $sel = '43';
408         last SWITCH;
409       };
410       $yymmdd <= ($yy + 1231) && do {
411         $sel = '44';
412       };
413     }
414
415     $select_vorauswahl .= qq|<select id="zeitraum" name="period" title="|
416       . $locale->text('Select a period') . qq|" >|;
417     my $key = '';
418     foreach $key (sort keys %liste) {
419       my $selected = '';
420       $selected = 'selected' if ($sel eq $key);
421       $select_vorauswahl .= qq|
422          <option value="$key" $selected>$liste{$key}</option>
423      |;
424     }
425     $select_vorauswahl .= qq|\n</select>
426    |;
427
428   } else {
429
430     # keine Vorauswahl bei Voranmeldungszeitraum
431     $select_vorauswahl .= qq|<select id="zeitraum" name="period" title="|
432       . $locale->text('Select a period') . qq|" >|;
433
434     my %listea = ('41' => '1. Quarter',
435                   '42' => '2. Quarter',
436                   '43' => '3. Quarter',
437                   '44' => '4. Quarter',);
438
439     my %listeb = ('01' => 'January',
440                   '02' => 'February',
441                   '03' => 'March',
442                   '04' => 'April',
443                   '05' => 'May',
444                   '06' => 'June',
445                   '07' => 'July',
446                   '08' => 'August',
447                   '09' => 'September',
448                   '10' => 'October',
449                   '11' => 'November',
450                   '12' => 'December',
451                   '13' => 'Yearly',);
452     my $key = '';
453     foreach $key (sort keys %listea) {
454       $select_vorauswahl .= qq|
455          <option value="$key">|
456         . $locale->text("$listea{$key}")
457         . qq|</option>\n|;
458     }
459
460     foreach $key (sort keys %listeb) {
461       $select_vorauswahl .= qq|
462          <option value="$key">|
463         . $locale->text("$listeb{$key}")
464         . qq|</option>\n|;
465     }
466     $select_vorauswahl .= qq|</select>|;
467   }
468   $lxdebug->leave_sub();
469   
470   return $select_vorauswahl;
471 }
472
473 #sub config {
474 #  $lxdebug->enter_sub();
475 #  config_step1();
476 #  $lxdebug->leave_sub();
477 #}
478
479 sub debug {
480   $lxdebug->enter_sub();
481   $form->debug();
482   $lxdebug->leave_sub();
483 }
484
485 sub show_options {
486   $lxdebug->enter_sub();
487
488   #  $form->{PD}{$form->{type}} = "selected";
489   #  $form->{DF}{$form->{format}} = "selected";
490   #  $form->{OP}{$form->{media}} = "selected";
491   #  $form->{SM}{$form->{sendmode}} = "selected";
492   my $type   = qq|      <input type=hidden name="type" value="ustva">|;
493   my $media  = qq|      <input type=hidden name="media" value="screen">|;
494   my $format =
495       qq|       <option value=html selected>|
496     . $locale->text('Preview')
497     . qq|</option>|;
498   if ($latex_templates) {
499     $format .=
500         qq|    <option value=pdf>|
501       . $locale->text('UStVA (PDF-Dokument)')
502       . qq|</option>|;
503   }
504
505   #my $disabled= qq|disabled="disabled"|;
506   #$disabled='' if ($form->{elster} eq '1' );
507   if ($form->{elster} eq '1') {
508     $format .=
509         qq|<option value=elsterwinston>|
510       . $locale->text('ELSTER Export (Winston)')
511       . qq|</option>|
512       . qq|<option value=elstertaxbird>|
513       . $locale->text('ELSTER Export (Taxbird)')
514       . qq|</option>|;      
515   }
516
517   #$format .= qq|<option value=elster>|.$locale->text('ELSTER Export nach Winston').qq|</option>|;
518   my $show_options = qq|
519     $type
520     $media
521     <select name=format title = "|
522     . $locale->text('Choose Outputformat') . qq|">$format</select>
523   |;
524   $lxdebug->leave_sub();
525   
526   return $show_options;
527 }
528
529 sub generate_ustva {
530   $lxdebug->enter_sub();
531
532   # Aufruf von get_config zum Einlesen der Finanzamtdaten aus finanzamt.ini
533
534   USTVA->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   #
745   # Nation specific customisations
746   #
747   ################################
748   
749   # Germany
750   
751   if ( $form->{coa} eq 'Germany-DATEV-SKR03EU' or $form->{coa} eq 'Germany-DATEV-SKR04EU') {
752       
753     #
754     # Outputformat specific customisation's
755     #
756
757     my @category_cent = USTVA->report_variables({
758         myconfig    => \%myconfig,
759         form        => $form,
760         type        => '',
761         attribute   => 'position',
762         dec_places  => '2',
763     });
764     
765     push @category_cent, qw(83  Z43  Z45  Z53  Z62  Z65  Z67);
766
767     my @category_euro = USTVA->report_variables({
768         myconfig    => \%myconfig,
769         form        => $form,
770         type        => '',
771         attribute   => 'position',
772         dec_places  => '0',
773     });
774
775     $form->{id} = [];
776     $form->{amount} = [];
777
778     if ( $form->{format} eq 'pdf' or $form->{format} eq 'postscript') {
779
780       $form->{IN} = "$form->{type}-$form->{year}.tex";
781       $form->{padding} = "~~";
782       $form->{bold}    = "\textbf{";
783       $form->{endbold} = "}";
784       $form->{br}      = '\\\\';
785
786       # Zahlenformatierung für Latex USTVA Formulare
787
788       foreach my $number (@category_euro) {
789         $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '0', '');
790       }
791
792       my ${decimal_comma} = ( $myconfig{numberformat} eq '1.000,00'
793            or $myconfig{numberformat} eq '1000,00' ) ? ',':'.';
794
795       foreach my $number (@category_cent) {
796         $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '');
797         $form->{$number} =~ s/${decimal_comma}/~~/g;
798       }
799
800     } elsif ( $form->{format} eq 'html') { # Formatierungen für HTML Ausgabe
801
802       $form->{IN} = $form->{type} . '.html';
803       $form->{padding} = "&nbsp;&nbsp;";
804       $form->{bold}    = "<b>";
805       $form->{endbold} = "</b>";
806       $form->{br}      = "<br>";
807       $form->{address} =~ s/\\n/\n/g;
808
809       foreach $number (@category_cent) {
810         $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '0');
811       }
812       
813       foreach $number (@category_euro) {
814         $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '0', '0');
815       }
816
817     } elsif ( $form->{format} eq 'elsterwinston' ) {
818
819       $form->{IN} = 'winston.xml';
820       
821       #
822       # Build Winston filename
823       #
824       
825       my $file = 'U';     # 1. char 'U' = USTVA
826       $file .= $form->{period};
827       #4. and 5. char = year modulo 100
828       $file .= sprintf("%02d", $form->{year} % 100);
829       #6. to 18. char = Elstersteuernummer
830       #Beispiel: Steuernummer in Bayern
831       #111/222/33334 ergibt für UStVA Jan 2004: U01049111022233334
832       $file .= $form->{elsterFFFF};
833       $file .= $form->{elstersteuernummer};
834       #file suffix
835       $file .= '.xml';
836       $form->{tmpfile} = "$userspath/$file";
837
838       $form->{attachment_filename} = "$file";
839    
840       # Zahlenformatierung für Winston
841
842       my $temp_numberformat = $myconfig{numberformat};
843
844       # Numberformat must be '1000.00' for Winston
845
846       $myconfig{numberformat} = '1000.00';
847
848       foreach my $number (@category_cent) {
849         $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '2', '') : '';
850       }
851       
852       foreach my $number (@category_euro) {
853         $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '0', '') : '';
854       }
855       # Re-set Numberformat
856       $myconfig{numberformat} = $temp_numberformat;
857
858
859       # push Kennziffern to <%foreach Array fo easyer
860       # output in xml format. Thx to Moritz.
861       my %winston_id_for = (
862        # No Winston remap?!
863       );
864             
865
866       foreach my $kennziffer (@category_cent, @category_euro) {
867
868         next if ( $kennziffer =~ m/Z\d\d/);
869         next if (   $form->{$kennziffer} == 0 );
870         
871         if (defined $winston_id_for{$kennziffer} ) {
872           push(@{ $form->{id}}, $winston_id_for{$kennziffer});
873         } else {
874           push(@{ $form->{id}}, "$kennziffer"); 
875         }
876         push(@{ $form->{amount}}, $form->{$kennziffer});
877       }    
878
879
880     } elsif ( $form->{format} eq 'elstertaxbird' ) {
881
882       # Define serveral filenames
883       $form->{IN} = 'taxbird.txb';
884
885       $form->{attachment_filename} = "USTVA-" . $form->{period} 
886       . sprintf("%02d", $form->{year} % 100) . ".txb";
887       
888       $form->{tmpfile} = "$userspath/" . $form->{attachment_filename};
889
890       # TODO: set Output to UTF-8 or system Preference
891       #$form->{"iconv"} = Text::Iconv->new($myconfig{dbcharset}, "UTF-8");
892       #my $iconv = $self->{"iconv"};
893       #$iconv->convert($variable);
894       if ($form->{period} =~ /^[4]\d$/ ){
895         my %periods = ( # Lx => taxbird
896                      '41' => '12',
897                      '42' => '13',
898                      '43' => '14',
899                      '44' => '15',
900                    );
901       
902         foreach my $quarter ( keys %periods ) {
903           $form->{taxbird_period} = $periods{$quarter} if ( $form->{period} eq $quarter);
904         }
905       } elsif ($form->{period} =~ /^\d+$/ ) {
906         $form->{period} =~ s/^0//g;
907         my $period = $form->{period};
908         $period * 1;
909         $period--;
910         $form->{period} = $period;
911       } else {
912         $form->header;
913         USTVA::error( $locale->text('Wrong Period' ));
914         exit(0);
915       }
916       
917       my %lands = ( # Lx => taxbird # TODO: besser als array...
918                   'Baden Würtemberg'       => '0',
919                   'Bayern'                 => '1',
920                   'Berlin'                 => '2',
921                   'Brandenburg'            => '3',
922                   'Bremen'                 => '4',
923                   'Hamburg'                => '5',
924                   'Hessen'                 => '6',
925                   'Mecklenburg Vorpommern' => '7',
926                   'Niedersachsen'          => '8',
927                   'Nordrhein Westfalen'    => '9',
928                   'Rheinland Pfalz'        => '10',
929                   'Saarland'               => '11',
930                   'Sachsen'                => '12',
931                   'Sachsen Anhalt'         => '13',
932                   'Schleswig Holstein'     => '14',
933                   'Thüringen'              => '15',
934             );
935       foreach my $land ( keys %lands ){
936         $form->{taxbird_land_nr} = $lands{$land} if ($form->{elsterland} eq $land );
937       }
938       
939       $form->{co_zip} = $form->{co_city};
940       $form->{co_zip} =~ s/\D//g;
941       $form->{co_city} =~ s/\d//g;
942       $form->{co_city} =~ s/^\s//g;
943       
944       ($form->{co_phone_prefix}, $form->{co_phone}) = split("-", $form->{tel});
945       $form->{co_phone_prefix} =~ s/\s//g;
946       $form->{co_phone} =~ s/\s//g;
947       
948        $form->{taxbird_steuernummer} = $form->{steuernummer};
949       #      $form->{taxbird_steuernummer} =~ s/\D//g;
950       $form->{taxbird_steuernummer} =~ s/\///; # ersten Querstrich ersetzen
951       
952       # Numberformatting for Taxbird
953       my $temp_numberformat = $myconfig{numberformat};
954       # Numberformat must be '1000,00' for Taxbird ?!
955       $myconfig{numberformat} = '1000,00';
956       foreach my $number (@category_cent) {
957         $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '2', '') : '';
958       }
959       
960       foreach my $number (@category_euro) {
961         $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '0', '') : '';
962       }
963       # Re-set Numberformat
964       $myconfig{numberformat} = $temp_numberformat;
965       
966       # push Kennziffern to <%foreach Array fo easyer
967       # output in xml format. Thx to Moritz.
968       my %taxbird_id_for = (
969            
970           '511'  =>  'Kz51-calc',
971           '861'  =>  'Kz86-calc',
972           '971'  =>  'Kz97-calc',
973           '931'  =>  'Kz93-calc',
974           '811'  =>  'Kz81-calc',
975           '891'  =>  'Kz89-calc',
976           'Z45'  =>  'uebertrag',
977           'Z53'  =>  'ust-sum',
978           'Z62'  =>  'ust-minus-vost',
979           'Z65'  =>  'ust-sum+69',
980           'Z67'  =>  'ust-vz',
981       );
982             
983       
984       for my $kennziffer (@category_cent, @category_euro) {
985
986         next if ($kennziffer eq 'Z43');
987
988         if ($form->{$kennziffer} != 0){
989           if (defined $taxbird_id_for{$kennziffer}) {
990             push(@{ $form->{id}}, $taxbird_id_for{$kennziffer});
991           } else {
992             push(@{ $form->{id}}, "Kz$kennziffer"); 
993           }
994           push(@{ $form->{amount}}, $form->{$kennziffer});
995         }
996       }    
997       
998     } elsif ( $form->{format} eq '' ){ # No format error.
999       $form->header;
1000       USTVA::error( $locale->text('Application Error. No Format given' ) . "!");
1001       exit(0);
1002    
1003     } else { # All other Formats are wrong
1004       $form->header;
1005       USTVA::error( $locale->text('Application Error. Wrong Format') . ": " . $form->{format} );
1006       exit(0);
1007     }
1008
1009   # Austria
1010   } elsif ($form->{coa} eq 'Austria') {
1011
1012     #
1013     # Outputformat specific customisation's
1014     #
1015
1016     my @category_euro = qw(
1017       511 861 36   80   971  931  98   96   53   74
1018       85  65  66   61   62   67   63   64   59   69 
1019       39  83  811  891  Z43  Z45  Z53  Z62  Z65  Z67
1020       41 44 49 43 48 51 86 35 77 76 91 89
1021       97 93 95 94 42 60 45 52 73 84 81 
1022     );
1023     
1024
1025     if ( $form->{format} eq 'html') { # Formatierungen für HTML Ausgabe
1026
1027       $form->{IN} = $form->{type} . '.html';
1028       $form->{padding} = "&nbsp;&nbsp;";
1029       $form->{bold}    = "<b>";
1030       $form->{endbold} = "</b>";
1031       $form->{br}      = "<br>";
1032       $form->{address} =~ s/\\n/\n/g;
1033
1034       foreach $number (@category_euro) {
1035         $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '0');
1036       }
1037     }
1038     
1039   }
1040
1041   # end nation specific customisations
1042   
1043   if ( $form->{period} eq '13' and $form->{format} ne 'html') {
1044     $form->header;
1045     USTVA::info(
1046       $locale->text(
1047       'Yearly taxreport not yet implemented')
1048       . '!');
1049   }
1050     
1051   $form->{templates} = $myconfig{templates};
1052   $form->{templates} = "doc" if ( $form->{type} eq 'help' );
1053
1054   $form->parse_template(\%myconfig, $userspath);
1055
1056   $lxdebug->leave_sub();
1057 }
1058
1059 sub config_step1 {
1060   $lxdebug->enter_sub();
1061
1062   # edit all taxauthority prefs
1063
1064   $form->header;
1065   USTVA->get_config($userspath, 'finanzamt.ini');
1066
1067   my $land = $form->{elsterland};
1068   my $amt  = $form->{elsterFFFF};
1069
1070
1071   if ($form->{cbscript} ne '' and $form->{cblogin} ne '') {
1072     $callback =  qq|$form->{cbscript}|
1073                 .qq|?action="config_step1"|
1074                 .qq|&login="$form->{cblogin}"|
1075                 .qq|&root="$form->{cbroot}"|
1076                 .qq|&rpw="$form->{cbrpw}"|;
1077   }
1078
1079   $form->{title} = $locale->text('Tax Office Preferences');
1080
1081
1082   my $select_tax_office = USTVA->fa_auswahl($land, $amt, &elster_hash());
1083   my $checked_accrual = q|checked="checked"| if ($form->{method} eq 'accrual');
1084   my $checked_cash = q|checked="checked"| if ($form->{method} eq 'cash');
1085   my $checked_monthly = "checked" if ($form->{FA_voranmeld} eq 'month');
1086   my $checked_quarterly = "checked" if ($form->{FA_voranmeld} eq 'quarter');
1087   my $checked_dauerfristverlaengerung = "checked" if ($form->{FA_dauerfrist} eq '1');
1088   my $checked_kz_71 = "checked" if ($form->{FA_71} eq 'X');
1089
1090   my $_hidden_variables_ref;
1091
1092   my %_hidden_local_variables = (    
1093     'saved'       => $locale->text('Check Details'),
1094     'nextsub'     => 'config_step2',
1095     'warnung'     => '0',
1096   );
1097
1098   foreach my $variable (keys %_hidden_local_variables) {
1099     push @{ $_hidden_variables_ref }, 
1100         { 'variable' => $variable, 'value' => $_hidden_local_variables{$variable} };
1101   }
1102
1103   my @_hidden_form_variables = qw(
1104     FA_Name             FA_Strasse        FA_PLZ             
1105     FA_Ort              FA_Telefon        FA_Fax           
1106     FA_PLZ_Grosskunden  FA_PLZ_Postfach   FA_Postfach 
1107     FA_BLZ_1            FA_Kontonummer_1  FA_Bankbezeichnung_1  
1108     FA_BLZ_2            FA_Kontonummer_2  FA_Bankbezeichnung_oertlich
1109     FA_Oeffnungszeiten  FA_Email          FA_Internet
1110     steuernummer        elsterland        elstersteuernummer
1111     elsterFFFF          login             password
1112   );
1113
1114   foreach my $variable (@_hidden_form_variables) {
1115     push @{ $_hidden_variables_ref}, 
1116         { 'variable' => $variable, 'value' => $form->{$variable} };
1117   }
1118
1119   # hä? kann die weg?
1120   my $steuernummer_new = '';
1121
1122   # Variablen für das Template zur Verfügung stellen
1123   my $template_ref = {
1124      select_tax_office               => $select_tax_office,
1125      checked_accrual                 => $checked_accrual,
1126      checked_cash                    => $checked_cash,
1127      checked_monthly                 => $checked_monthly,
1128      checked_quarterly               => $checked_quarterly,
1129      checked_dauerfristverlaengerung => $checked_dauerfristverlaengerung,
1130      hidden_variables                => $_hidden_variables_ref,
1131      
1132   };
1133   
1134   # Ausgabe des Templates
1135   print($form->parse_html_template('ustva/config_step1', $template_ref));
1136
1137   $lxdebug->leave_sub();
1138 }
1139
1140 sub config_step2 {
1141   $lxdebug->enter_sub();
1142   $form->header();
1143
1144 #  print qq|
1145 #    <body>
1146 #  |;
1147
1148   my $elsterland         = '';
1149   my $elster_amt         = '';
1150   my $elsterFFFF         = '';
1151   my $elstersteuernummer = '';
1152   USTVA->get_config($userspath, 'finanzamt.ini')
1153     if ($form->{saved} eq $locale->text('saved'));
1154
1155   # Auf Übergabefehler checken
1156   USTVA::info(  $locale->text('Missing Tax Authoritys Preferences') . "\n"
1157               . $locale->text('USTVA-Hint: Tax Authoritys'))
1158     if (   $form->{elsterFFFF_new} eq 'Auswahl'
1159         || $form->{elsterland_new} eq 'Auswahl');
1160   USTVA::info(  $locale->text('Missing Method!') . "\n"
1161               . $locale->text('USTVA-Hint: Method'))
1162     if ($form->{method} eq '');
1163
1164   # Klären, ob Variablen bereits befüllt sind UND ob veräderungen auf
1165   # der vorherigen Maske stattfanden: $change = 1(in der edit sub,
1166   # mittels get_config)
1167
1168   my $change = $form->{elsterland} eq $form->{elsterland_new}
1169     && $form->{elsterFFFF} eq $form->{elsterFFFF_new} ? '0' : '1';
1170   $change = '0' if ($form->{saved} eq $locale->text('saved'));
1171   my $elster_init = &elster_hash();
1172
1173   my %elster_init = %$elster_init;
1174
1175   if ($change eq '1') {
1176
1177     # Daten ändern
1178     $elsterland           = $form->{elsterland_new};
1179     $elsterFFFF           = $form->{elsterFFFF_new};
1180     $form->{elsterland}   = $elsterland;
1181     $form->{elsterFFFF}   = $elsterFFFF;
1182     $form->{steuernummer} = '';
1183     
1184     create_steuernummer();
1185
1186     # rebuild elster_amt
1187     my $amt = '';
1188     foreach $amt (keys %{ $elster_init{ $form->{elsterland} } }) {
1189       $elster_amt = $amt
1190         if ($elster_init{ $form->{elsterland}{$amt} eq $form->{elsterFFFF} });
1191     }
1192
1193     # load the predefined hash data into the FA_* Vars
1194     my @variables = qw(FA_Name FA_Strasse FA_PLZ FA_Ort
1195       FA_Telefon FA_Fax FA_PLZ_Grosskunden FA_PLZ_Postfach
1196       FA_Postfach
1197       FA_BLZ_1 FA_Kontonummer_1 FA_Bankbezeichnung_1
1198       FA_BLZ_2 FA_Kontonummer_2 FA_Bankbezeichnung_oertlich
1199       FA_Oeffnungszeiten FA_Email FA_Internet);
1200
1201     for (my $i = 0; $i <= 20; $i++) {
1202       $form->{ $variables[$i] } =
1203         $elster_init->{$elsterland}->{$elsterFFFF}->[$i];
1204     }
1205
1206   } else {
1207
1208     $elsterland = $form->{elsterland};
1209     $elsterFFFF = $form->{elsterFFFF};
1210
1211   }
1212   my $stnr = $form->{steuernummer};
1213   $stnr =~ s/\D+//g;
1214   my $patterncount   = $form->{patterncount};
1215   my $elster_pattern = $form->{elster_pattern};
1216   my $delimiter      = $form->{delimiter};
1217   my $steuernummer = $form->{steuernummer} if ($steuernummer eq '');
1218
1219   $form->{FA_Oeffnungszeiten} =~ s/\\\\n/\n/g;
1220   
1221   
1222
1223   my $input_steuernummer = USTVA->steuernummer_input(
1224                              $form->{elsterland}, 
1225                              $form->{elsterFFFF},
1226                              $form->{steuernummer}
1227   );
1228
1229   $lxdebug->message(LXDebug::DEBUG1, qq|$input_steuernummer|);
1230  
1231
1232   my $_hidden_variables_ref;
1233
1234   my %_hidden_local_variables = (
1235       'elsterland'          => $elsterland,
1236       'elsterFFFF'          => $elsterFFFF,
1237       'warnung'             => $warnung,
1238       'elstersteuernummer'  => $elstersteuernummer,
1239       'steuernummer'        => $stnr,
1240       'lastsub'             => 'config_step1',
1241       'nextsub'             => 'save',
1242       
1243   );
1244   
1245   foreach my $variable (keys %_hidden_local_variables) {
1246     push @{ $_hidden_variables_ref }, 
1247         { 'variable' => $variable, 'value' => $_hidden_local_variables{$variable} };
1248   }
1249  
1250   my @_hidden_form_variables = qw(
1251     FA_steuerberater_name   FA_steuerberater_street 
1252     FA_steuerberater_city   FA_steuerberater_tel
1253     FA_voranmeld            method
1254     FA_dauerfrist           FA_71 
1255     elster                  
1256     login                   password 
1257     type                    elster_init 
1258     saved                   callback
1259   );
1260
1261
1262
1263   foreach my $variable (@_hidden_form_variables) {
1264     push @{ $_hidden_variables_ref}, 
1265         { 'variable' => $variable, 'value' => $form->{$variable} };
1266   }
1267
1268   my $template_ref = {
1269      tax_office_data                 => $tax_office_data,
1270      input_steuernummer              => $input_steuernummer,
1271      readonly                        => '', #q|disabled="disabled"|,
1272      callback                        => $callback,
1273      hidden_variables                => $_hidden_variables_ref,
1274   };
1275   
1276   # Ausgabe des Templates
1277   print($form->parse_html_template('ustva/config_step2', $template_ref));
1278
1279
1280   $lxdebug->leave_sub();
1281 }
1282
1283 sub create_steuernummer {
1284   $lxdebug->enter_sub();
1285   my $part           = $form->{part};
1286   my $patterncount   = $form->{patterncount};
1287   my $delimiter      = $form->{delimiter};
1288   my $elster_pattern = $form->{elster_pattern};
1289
1290   # rebuild steuernummer and elstersteuernummer
1291   # es gibt eine gespeicherte steuernummer $form->{steuernummer}
1292   # und die parts und delimiter
1293
1294   my $h = 0;
1295   my $i = 0;
1296
1297   my $steuernummer_new       = $part;
1298   my $elstersteuernummer_new = $form->{elster_FFFF};
1299   $elstersteuernummer_new .= '0';
1300
1301   for ($h = 1; $h < $patterncount; $h++) {
1302     $steuernummer_new .= qq|$delimiter|;
1303     for (my $i = 1; $i <= length($elster_pattern); $i++) {
1304       $steuernummer_new       .= $form->{"part_$h\_$i"};
1305       $elstersteuernummer_new .= $form->{"part_$h\_$i"};
1306     }
1307   }
1308   if ($form->{steuernummer} ne $steuernummer_new) {
1309     $form->{steuernummer}       = $steuernummer_new;
1310     $form->{elstersteuernummer} = $elstersteuernummer_new;
1311     $form->{steuernummer_new}   = $steuernummer_new;
1312   } else {
1313     $form->{steuernummer_new}       = '';
1314     $form->{elstersteuernummer_new} = '';
1315   }
1316   $lxdebug->leave_sub();
1317 }
1318
1319 sub save {
1320   $lxdebug->enter_sub();
1321   my $filename = "$form->{login}_$form->{filename}";
1322
1323   #zuerst die steuernummer aus den part, parts_X_Y und delimiter herstellen
1324   create_steuernummer();
1325
1326   # Textboxen formatieren: Linebreaks entfernen
1327   #
1328   $form->{FA_Oeffnungszeiten} =~ s/\r\n/\\n/g;
1329
1330   #URL mit http:// davor?
1331   $form->{FA_Internet} =~ s/^http:\/\///;
1332   $form->{FA_Internet} = 'http://' . $form->{FA_Internet};
1333
1334   my @config = qw(
1335     elster              elsterland            elstersteuernummer  steuernummer
1336     elsteramt           elsterFFFF            FA_Name             FA_Strasse
1337     FA_PLZ              FA_Ort                FA_Telefon          FA_Fax 
1338     FA_PLZ_Grosskunden  FA_PLZ_Postfach       FA_Postfach         FA_BLZ_1 
1339     FA_Kontonummer_1    FA_Bankbezeichnung_1  FA_BLZ_2            FA_Kontonummer_2
1340     FA_Bankbezeichnung_oertlich FA_Oeffnungszeiten
1341     FA_Email FA_Internet FA_voranmeld method FA_steuerberater_name
1342     FA_steuerberater_street FA_steuerberater_city FA_steuerberater_tel
1343     FA_71 FA_dauerfrist);
1344
1345   # Hier kommt dann die Plausibilitätsprüfung der ELSTERSteuernummer
1346   if ($form->{elstersteuernummer} ne '000000000') {
1347     $form->{elster} = '1';
1348     open(CONF, ">$userspath/$filename") or $form->error("$filename : $!");
1349
1350     # create the config file
1351     print CONF qq|# Configuration file for USTVA\n\n|;
1352     my $key = '';
1353     foreach $key (sort @config) {
1354       $form->{$key} =~ s/\\/\\\\/g;
1355       # strip M
1356       $form->{$key} =~ s/\r\n/\n/g;
1357
1358       print CONF qq|$key=|;
1359       if ($form->{$key} ne 'Y') {
1360         print CONF qq|$form->{$key}\n|;
1361       }
1362       if ($form->{$key} eq 'Y') {
1363         print CONF qq|checked \n|;
1364       }
1365     }
1366     print CONF qq|\n\n|;
1367     close CONF;
1368     $form->{saved} = $locale->text('saved');
1369
1370   } else {
1371
1372     $form->{saved} = $locale->text('Choose a Tax Number');
1373   }
1374
1375   config_step2();
1376   $lxdebug->leave_sub();
1377 }
1378
1379
1380 sub continue {
1381   $lxdebug->enter_sub();
1382
1383   # allow Symbolic references just here:
1384   no strict 'refs';
1385   call_sub($form->{"nextsub"});
1386   use strict 'refs';
1387   $lxdebug->leave_sub();
1388 }
1389
1390 sub back {
1391   $lxdebug->enter_sub();
1392   call_sub($form->{"lastsub"});
1393   $lxdebug->leave_sub();
1394 }
1395
1396 sub elster_hash {
1397   $lxdebug->enter_sub();
1398   my $finanzamt = USTVA->query_finanzamt(\%myconfig, \%$form);
1399   $lxdebug->leave_sub();
1400   return $finanzamt;
1401 }
1402
1403