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