- Bugfix: 499, 502, 442
[kivitendo-erp.git] / bin / mozilla / ustva.pl
1 #!/bin/perl
2 #=====================================================================
3 # Lx-Office ERP
4 # Copyright (c) 2004 by Udo Spallek, Aachen
5 #
6 #  Author: Udo Spallek
7 #   Email: udono@gmx.net
8 #     Web: http://www.lx-office.org
9 #
10 #
11 # This program is free software; you can redistribute it and/or modify
12 # it under the terms of the GNU General Public License as published by
13 # the Free Software Foundation; either version 2 of the License, or
14 # (at your option) any later version.
15 #
16 # This program is distributed in the hope that it will be useful,
17 # but WITHOUT ANY WARRANTY; without even the implied warranty of
18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 # GNU General Public License for more details.
20 # You should have received a copy of the GNU General Public License
21 # along with this program; if not, write to the Free Software
22 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 #======================================================================
24 # German Tax authority Module and later ELSTER Interface
25 #======================================================================
26
27 require "$form->{path}/arap.pl";
28
29 #use strict;
30 #no strict 'refs';
31 #use diagnostics;
32 #use warnings; # FATAL=> 'all';
33 #use vars qw($locale $form %myconfig);
34 #our ($myconfig);
35 #use CGI::Carp "fatalsToBrowser";
36
37 use SL::PE;
38 use SL::RP;
39 use SL::USTVA;
40 use SL::User;
41 1;
42
43 # this is for our long dates
44 # $locale->text('January')
45 # $locale->text('February')
46 # $locale->text('March')
47 # $locale->text('April')
48 # $locale->text('May ')
49 # $locale->text('June')
50 # $locale->text('July')
51 # $locale->text('August')
52 # $locale->text('September')
53 # $locale->text('October')
54 # $locale->text('November')
55 # $locale->text('December')
56
57 # this is for our short month
58 # $locale->text('Jan')
59 # $locale->text('Feb')
60 # $locale->text('Mar')
61 # $locale->text('Apr')
62 # $locale->text('May')
63 # $locale->text('Jun')
64 # $locale->text('Jul')
65 # $locale->text('Aug')
66 # $locale->text('Sep')
67 # $locale->text('Oct')
68 # $locale->text('Nov')
69 # $locale->text('Dec')
70 #############################
71
72 sub report {
73   $lxdebug->enter_sub();
74   my $myconfig = \%myconfig;
75   use CGI;
76
77   $form->{title} = $locale->text('UStVA');
78   $form->{kz10}  = '';                       #Berichtigte Anmeldung? Ja =1 Nein=0
79
80   my $year = substr($form->datetonum($form->current_date(\%myconfig), \%myconfig ),
81              0, 4);
82
83   my $department = '';
84   local $hide = '';
85   $form->header;
86
87   print qq|
88  <body>
89  <form method=post action=$form->{script}>
90
91  <input type=hidden name=title value="$form->{title}">
92
93  <table width=100%>
94   <tr>
95     <th class=listtop>$form->{title}</th>
96   </tr>
97   <tr height="5"></tr>
98   <tr>
99     <td>
100       <table>
101       $department
102  |;
103
104   # Hier Aufruf von get_config aus bin/mozilla/fa.pl zum
105   # Einlesen der Finanzamtdaten
106   &get_config($userspath, 'finanzamt.ini');
107
108   # Hier Einlesen der user-config
109   # steuernummer entfernt für prerelease
110   my @a = qw(signature name company address businessnumber tel fax email
111     co_chief co_department co_custom1 co_custom2 co_custom3 co_custom4 co_custom5
112     co_name1 co_name2
113     co_street co_street1 co_zip co_city co_city1 co_country co_tel co_tel1 co_tel2
114     co_fax co_fax1 co_email co_email1 co_url co_url1 ustid duns
115     co_bankname co_bankname1 co_bankname2 co_bankname3 co_blz co_blz1
116     co_blz2 co_blz3 co_accountnr co_accountnr1 co_accountnr2 co_accountnr3);
117
118   map { $form->{$_} = $myconfig->{$_} } @a;
119
120   my $oeffnungszeiten = $form->{FA_Oeffnungszeiten};
121   $oeffnungszeiten =~ s/\\\\n/<br>/g;
122   print qq|
123         <tr >
124           <td width="50%" align="left" valign="top">
125           <fieldset>
126           <legend>
127           <b>| . $locale->text('Firma') . qq|</b>
128           </legend>
129   |;
130   if ($form->{company} ne '') {
131     print qq|<h3>$form->{company}</h3>\n|;
132   } else {
133     print qq|
134             <a href=am.pl?path=$form->{path}&action=config&level=Programm--Preferences&login=$form->{login}&password=$form->{password}>
135             | . $locale->text('Kein Firmenname hinterlegt!') . qq|</a><br>
136     |;
137   }
138
139   # Anpassungen der Variablennamen auf pre 2.1.1 Namen
140   # klären, ob $form->{company_street|_address} gesetzt sind
141   #
142
143   if ($form->{address} ne '') {
144     my $temp = $form->{address};
145     $temp =~ s/\\n/<br \/>/;
146     ($form->{co_street}, $form->{co_city}) = split("<br \/>", $temp);
147     $form->{co_city} =~ s/\\n//g;
148   }
149
150   if ($form->{co_street} ne ''
151       and (   $form->{co_zip} ne ''
152            or $form->{co_city} ne '')
153     ) {
154     print qq|
155     $form->{co_street}<br>
156     $form->{co_street1}<br>
157     $form->{co_zip} $form->{co_city}|;
158     } else {
159     print qq|
160           <a href=am.pl?path=$form->{path}&action=config&level=Programm--Preferences&login=$form->{login}&password=$form->{password}>
161           | . $locale->text('Keine Firmenadresse hinterlegt!') . qq|</a>\n|;
162   }
163   $form->{co_email} = $form->{email} unless $form->{co_email};
164   $form->{co_tel}   = $form->{tel}   unless $form->{co_tel};
165   $form->{co_fax}   = $form->{fax}   unless $form->{co_fax};
166   $form->{co_url}   = $form->{urlx}  unless $form->{co_url};
167
168   print qq|
169           <br>
170           <br>
171           | . $locale->text('Tel.: ') . qq|
172           $form->{co_tel}
173           <br>
174           | . $locale->text('Fax.: ') . qq|
175           $form->{co_fax}         
176           <br>
177           <br>
178           $form->{co_email}       
179           <br>
180           <br>
181           | . $locale->text('Steuernummer: ') . qq|
182   |;
183
184   if ($form->{steuernummer} ne '') {
185     print qq|$form->{steuernummer}|;
186   } else {
187     print qq|
188           <a href="ustva.pl?path=$form->{path}&action=edit&level=Programm--Finanzamteinstellungen&login=$form->{login}&password=$form->{password}">
189           Keine Steuernummer hinterlegt!</a><br>|;
190   }
191   print qq|
192           <br>
193           | . $locale->text('ELSTER-Steuernummer: ') . qq|
194           $form->{elstersteuernummer}
195           <br>
196           <br>
197
198           </fieldset>
199           <br>
200   |;
201   if ($form->{FA_steuerberater_name} ne '') {
202     print qq|
203           <fieldset>
204           <legend>
205             <input checked="checked" title="|
206       . $locale->text('Beraterdaten in UStVA übernehmen?')
207       . qq|" name="FA_steuerberater" id=steuerberater class=checkbox type=checkbox value="1">&nbsp;
208             <b>| . $locale->text('Steuerberater/-in') . qq|</b>
209             </legend>
210             
211             $form->{FA_steuerberater_name}<br>
212             $form->{FA_steuerberater_street}<br>
213             $form->{FA_steuerberater_city}<br>
214             Tel: $form->{FA_steuerberater_tel}<br>
215           </fieldset>
216           <br>
217     |;
218   }
219   print qq|
220           <fieldset>
221           <legend>
222           <b>| . $locale->text('Voranmeldezeitraum') . qq|</b>
223           </legend>
224   |;
225   &ustva_vorauswahl();
226
227   my @years = ();
228   if (not defined $form->{all_years}) {
229
230     # accounting years if SQL-Ledger Version < 2.4.1
231     #    $year = $form->{year} * 1;
232     @years = sort { $b <=> $a } (2003 .. ($year + 1));
233     $form->{all_years} = \@years;
234   }
235   map { $form->{selectaccountingyear} .= qq|<option>$_\n| }
236     @{ $form->{all_years} };
237   print qq|
238           <select name=year title="| . $locale->text('Year') . qq|">
239   |;
240   my $key = '';
241   foreach $key (@years) {
242     print qq|<option |;
243     print qq|selected| if ($key eq $form->{year});
244     print qq| >$key</option>
245     |;
246   }
247
248   my $voranmeld = $form->{FA_voranmeld};
249   print qq|             </select>|;
250   my $checked = '';
251   $checked = "checked" if ($form->{kz10} eq '1');
252   print qq|
253            <input name="FA_10" id=FA_10 class=checkbox type=checkbox value="1" $checked title = "|
254     . $locale->text(
255       'Ist dies eine berichtigte Anmeldung? (Nr. 10/Zeile 15 Steuererklärung)')
256     . qq|">
257             | . $locale->text('Berichtigte Anmeldung') . qq|
258           <br>
259   |;
260
261   if ($voranmeld ne '') {
262     print qq|
263           <br>
264           | . $locale->text($voranmeld) . qq|
265   |;
266     print qq| mit Dauerfristverlängerung| if ($form->{FA_dauerfrist} eq '1');
267     print qq|
268
269       <br>
270   |;
271   }
272   if ($form->{method} ne '') {
273     print qq|| . $locale->text('Method') . qq|: |;
274     print qq|| . $locale->text('accrual') . qq||
275       if ($form->{method} eq 'accrual');
276     print qq|| . $locale->text('cash') . qq|| if ($form->{method} eq 'cash');
277   }
278   print qq|
279           </fieldset>
280
281     </td>|;
282
283   if ($form->{FA_Name} ne '') {
284     print qq|
285     <td width="50%" valign="top">         
286           <fieldset>
287           <legend>
288           <b>| . $locale->text('Finanzamt') . qq|</b>
289           </legend>
290           <h3>$form->{FA_Name}</h2>
291     |;
292
293     #if ($form->{FA_Ergaenzung_Name ne ''}){
294     #  print qq|
295     #          $form->{FA_Ergaenzung_Name}&nbsp
296     #          <br>
297     #  |;
298     #}
299     print qq|
300           $form->{FA_Strasse}
301           <br>
302           $form->{FA_PLZ}&nbsp; &nbsp;$form->{FA_Ort}
303           <br>
304           <br>
305           | . $locale->text('Tel. : ') . qq|
306           $form->{FA_Telefon}
307           <br> 
308           | . $locale->text('Fax. : ') . qq|
309           $form->{FA_Fax}
310           <br>
311           <br>
312           <a href="mailto:$form->{FA_Email}?subject=|
313       . CGI::escape("Steuer Nr: $form->{steuernummer}:")
314       . qq|&amp;body=|
315       . CGI::escape(
316              "Sehr geehrte Damen und Herren,\n\n\nMit freundlichen Grüßen\n\n")
317       . CGI::escape($form->{signature}) . qq|">
318             $form->{FA_Email}
319           </a>
320           <br>
321           <a href="$form->{FA_Internet}">
322             $form->{FA_Internet}
323           </a>
324           <br>
325           <br>
326           | . $locale->text('Öffnungszeiten') . qq|
327           <br>
328           $oeffnungszeiten
329           <br>
330    |;
331
332     my $FA_1 =
333       (   $form->{FA_BLZ_1} ne ''
334        && $form->{FA_Kontonummer_1}     ne ''
335        && $form->{FA_Bankbezeichnung_1} ne '');
336     my $FA_2 =
337       (   $form->{FA_BLZ_2} ne ''
338        && $form->{FA_Kontonummer_2}            ne ''
339        && $form->{FA_Bankbezeichnung_oertlich} ne '');
340
341     if ($FA_1 && $FA_2) {
342       print qq|
343           <br>
344           | . $locale->text('Bankverbindungen') . qq|
345           <table>
346           <tr>
347           <td>
348           $form->{FA_Bankbezeichnung_1}
349           <br>                  
350           | . $locale->text('Konto: ') . qq|
351           $form->{FA_Kontonummer_1}
352           <br>
353           | . $locale->text('BLZ: ') . qq|
354           $form->{FA_BLZ_1}
355           </td>
356           <td>
357           $form->{FA_Bankbezeichnung_oertlich}
358           <br>
359           | . $locale->text('Konto: ') . qq|
360           $form->{FA_Kontonummer_2}
361           <br> 
362           | . $locale->text('BLZ: ') . qq|
363           $form->{FA_BLZ_2}
364           </td>
365           </tr>
366           </table>
367           <br>|;
368     } elsif ($FA_1) {
369       print qq|
370           <br>
371           | . $locale->text('Bankverbindung') . qq|
372           <br>
373           <br>
374           $form->{FA_Bankbezeichnung_1}
375           <br>                  
376           | . $locale->text('Konto: ') . qq|
377           $form->{FA_Kontonummer_1}
378           <br> 
379           | . $locale->text('BLZ: ') . qq|
380           $form->{FA_BLZ_1}          <br>
381           <br>|;
382     } elsif ($FA_2) {
383       print qq|
384           <br>
385           | . $locale->text('Bankverbindung') . qq|
386           <br>
387           <br>
388           $form->{FA_Bankbezeichnung_oertlich}
389           <br>                  
390           | . $locale->text('Konto: ') . qq|
391           $form->{FA_Kontonummer_2}
392           <br> 
393           | . $locale->text('BLZ: ') . qq|
394           $form->{FA_BLZ_2}
395      |;
396     }
397     print qq|
398
399       </fieldset>
400       <br>
401       <fieldset>
402       <legend>
403       <b>| . $locale->text('Ausgabeformat') . qq|</b>
404       </legend>
405   |;
406
407     &show_options;
408     my $ausgabe = '1';
409     print qq|
410           </fieldset>
411       |;
412
413   } else {
414     print qq|
415      <td width="50%" valign="bottom">
416      <fieldset>
417      <legend>
418      <b>| . $locale->text('Hinweise') . qq|</b>
419      </legend>
420       <h2 class="confirm">|
421       . $locale->text('Missing Preferences: Outputroutine disabled')
422       . qq|</h2>
423       <h3>| . $locale->text('Help:') . qq|</h3>
424       <ul>
425       <li>| . $locale->text('Hint-Missing-Preferences') . qq|</li>
426       </ul>
427       </fieldset>
428      |;
429     my $ausgabe = '';
430     $hide = q|disabled="disabled"|;
431   }
432
433   print qq|
434       </td>
435     </tr>
436   |;
437
438   #}# end if report = ustva
439
440   print qq|
441       </table>
442      </td>
443     </tr>
444     <tr>
445      <td><hr size="3" noshade></td>
446     </tr>
447   </table>
448
449   <br>
450   <input type="hidden" name="address" value="$form->{address}">
451   <input type="hidden" name="reporttype" value="custom">
452   <input type="hidden" name="co_street" value="$form->{co_street}">
453   <input type="hidden" name="co_city" value="$form->{co_city}">
454   <input type="hidden" name="path" value="$form->{path}">
455   <input type="hidden" name="login" value="$form->{login}">
456   <input type="hidden" name="password" value="$form->{password}">
457   <table width="100%">
458   <tr>
459    <td align="left">
460      <input type=hidden name=nextsub value=generate_ustva>
461      <input $hide type=submit class=submit name=action value="|
462     . $locale->text('Show') . qq|">
463    </td>
464    <td align="right">
465
466     <!--</form>
467     <form action="doc/ustva.html" method="get">
468     -->
469        <input type=submit class=submit name=action value="|
470     . $locale->text('Help') . qq|">
471    <!-- </form>-->
472    </td>
473   </tr>
474   </table>
475   |;
476
477   print qq|
478
479   </body>
480   </html>
481   |;
482   $lxdebug->leave_sub();
483 }
484
485 #############################
486
487 sub help {
488   $lxdebug->enter_sub();
489
490   # parse help documents under doc
491   my $tmp = $form->{templates};
492   $form->{templates} = 'doc';
493   $form->{help}      = 'ustva';
494   $form->{type}      = 'help';
495   $form->{format}    = 'html';
496   &generate_ustva();
497
498   #$form->{templates} = $tmp;
499   $lxdebug->leave_sub();
500 }
501
502 sub show {
503   $lxdebug->enter_sub();
504
505   #&generate_ustva();
506   no strict 'refs';
507   $lxdebug->leave_sub();
508   &{ $form->{nextsub} };
509   use strict 'refs';
510 }
511
512 sub ustva_vorauswahl {
513   $lxdebug->enter_sub();
514
515   #Aktuelles Datum zerlegen:
516   my $date = $form->datetonum($form->current_date(\%myconfig), \%myconfig);
517
518   #$locale->date($myconfig, $form->current_date($myconfig), 0)=~ /(\d\d).(\d\d).(\d\d\d\d)/;
519   $form->{day}   = substr($date, 6, 2);
520   $form->{month} = substr($date, 4, 2);
521   $form->{year}  = substr($date, 0, 4);
522   $lxdebug->message(LXDebug::DEBUG1, qq|
523     Actual date from Database: $date\n    
524     Actual year from Database: $form->{year}\n
525     Actual day from Database: $form->{day}\n
526     Actual month from Database: $form->{month}\n|);
527
528   my $sel    = '';
529   my $yymmdd = '';
530
531   # Testdaten erzeugen:
532   #$form->{day}= '11';
533   #$form->{month}= '01';
534   #$form->{year}= 2004;
535   print qq|
536      <input type=hidden name=day value=$form->{day}>
537      <input type=hidden name=month value=$form->{month}>
538      <input type=hidden name=yymmdd value=$yymmdd>
539      <input type=hidden name=sel value=$sel>
540  |;
541
542   if ($form->{FA_voranmeld} eq 'month') {
543
544     # Vorauswahl bei monatlichem Voranmeldungszeitraum
545
546     my %liste = ('01' => $locale->text('January'),
547                  '02' => $locale->text('February'),
548                  '03' => $locale->text('March'),
549                  '04' => $locale->text('April'),
550                  '05' => $locale->text('May'),
551                  '06' => $locale->text('June'),
552                  '07' => $locale->text('July'),
553                  '08' => $locale->text('August'),
554                  '09' => $locale->text('September'),
555                  '10' => $locale->text('October'),
556                  '11' => $locale->text('November'),
557                  '12' => $locale->text('December'),
558                  '13' => $locale->text('Yearly'),
559                 );
560
561     my $yy = $form->{year} * 10000;
562     $yymmdd = "$form->{year}$form->{month}$form->{day}" * 1;
563     $sel    = '';
564     my $dfv = '';
565
566     # Offset für Dauerfristverlängerung
567     $dfv = '100' if ($form->{FA_dauerfrist} eq '1');
568
569   SWITCH: {
570       $yymmdd <= ($yy + 110 + $dfv) && do {
571         $form->{year} = $form->{year} - 1;
572         $sel = '12';
573         last SWITCH;
574       };
575       $yymmdd <= ($yy + 210 + $dfv) && do {
576         $sel = '01';
577         last SWITCH;
578       };
579       $yymmdd <= ($yy + 310 + $dfv) && do {
580         $sel = '02';
581         last SWITCH;
582       };
583       $yymmdd <= ($yy + 410 + $dfv) && do {
584         $sel = '03';
585         last SWITCH;
586       };
587       $yymmdd <= ($yy + 510 + $dfv) && do {
588         $sel = '04';
589         last SWITCH;
590       };
591       $yymmdd <= ($yy + 610 + $dfv) && do {
592         $sel = '05';
593         last SWITCH;
594       };
595       $yymmdd <= ($yy + 710 + $dfv) && do {
596         $sel = '06';
597         last SWITCH;
598       };
599       $yymmdd <= ($yy + 810 + $dfv) && do {
600         $sel = '07';
601         last SWITCH;
602       };
603       $yymmdd <= ($yy + 910 + $dfv) && do {
604         $sel = '08';
605         last SWITCH;
606       };
607       $yymmdd <= ($yy + 1010 + $dfv) && do {
608         $sel = '09';
609         last SWITCH;
610       };
611       $yymmdd <= ($yy + 1110 + $dfv) && do {
612         $sel = '10';
613         last SWITCH;
614       };
615       $yymmdd <= ($yy + 1210) && do {
616         $sel = '11';
617         last SWITCH;
618       };
619       $yymmdd <= ($yy + 1231) && do {
620         $sel = '12';
621         last SWITCH;
622       };
623
624     }
625     print qq|<select id="zeitraum" name="period" title="|
626   . $locale->text('Select a period') . qq|" >|;
627
628     my $key = '';
629     foreach $key (sort keys %liste) {
630       my $selected = '';
631       $selected = 'selected' if ($sel eq $key);
632       print qq|
633          <option value="$key" $selected> $liste{$key}</option>
634    |;
635     }
636     print qq|</select>|;
637
638   } elsif ($form->{FA_voranmeld} eq 'quarter') {
639
640     # Vorauswahl bei quartalsweisem Voranmeldungszeitraum
641     my %liste = ('41'  => $locale->text('1. Quarter'),
642                  '42'  => $locale->text('2. Quarter'),
643                  '43'  => $locale->text('3. Quarter'),
644                  '44'  => $locale->text('4. Quarter'),
645                  '13' => $locale->text('Yearly'),);
646
647     my $yy = $form->{year} * 10000;
648     $yymmdd = "$form->{year}$form->{month}$form->{day}" * 1;
649     $sel    = '';
650     my $dfv = '';    # Offset für Dauerfristverlängerung
651     $dfv = '100' if ($form->{FA_dauerfrist} eq '1');
652
653   SWITCH: {
654       $yymmdd <= ($yy + 110 + $dfv) && do {
655         $form->{year} = $form->{year} - 1;
656         $sel = '44';
657         last SWITCH;
658       };
659       $yymmdd <= ($yy + 410 + $dfv) && do {
660         $sel = '41';
661         last SWITCH;
662       };
663       $yymmdd <= ($yy + 710 + $dfv) && do {
664         $sel = '42';
665         last SWITCH;
666       };
667       $yymmdd <= ($yy + 1010 + $dfv) && do {
668         $sel = '43';
669         last SWITCH;
670       };
671       $yymmdd <= ($yy + 1231) && do {
672         $sel = '44';
673       };
674     }
675
676     print qq|<select id="zeitraum" name="period" title="|
677       . $locale->text('Select a period') . qq|" >|;
678     my $key = '';
679     foreach $key (sort keys %liste) {
680       my $selected = '';
681       $selected = 'selected' if ($sel eq $key);
682       print qq|
683          <option value="$key" $selected>$liste{$key}</option>
684      |;
685     }
686     print qq|\n</select>
687    |;
688
689   } else {
690
691     # keine Vorauswahl bei Voranmeldungszeitraum
692     print qq|<select id="zeitraum" name="period" title="|
693       . $locale->text('Select a period') . qq|" >|;
694
695     my %listea = ('41' => '1. Quarter',
696                   '42' => '2. Quarter',
697                   '43' => '3. Quarter',
698                   '44' => '4. Quarter',);
699
700     my %listeb = ('01' => 'January',
701                   '02' => 'February',
702                   '03' => 'March',
703                   '04' => 'April',
704                   '05' => 'May',
705                   '06' => 'June',
706                   '07' => 'July',
707                   '08' => 'August',
708                   '09' => 'September',
709                   '10' => 'October',
710                   '11' => 'November',
711                   '12' => 'December',
712                   '13' => 'Yearly',);
713     my $key = '';
714     foreach $key (sort keys %listea) {
715       print qq|
716          <option value="$key">|
717         . $locale->text("$listea{$key}")
718         . qq|</option>\n|;
719     }
720
721     foreach $key (sort keys %listeb) {
722       print qq|
723          <option value="$key">|
724         . $locale->text("$listeb{$key}")
725         . qq|</option>\n|;
726     }
727     print qq|</select>|;
728   }
729   $lxdebug->leave_sub();
730 }
731
732 sub config {
733   $lxdebug->enter_sub();
734   edit();
735   $lxdebug->leave_sub();
736 }
737
738 sub debug {
739   $lxdebug->enter_sub();
740   $form->debug();
741   $lxdebug->leave_sub();
742 }
743
744 sub show_options {
745   $lxdebug->enter_sub();
746
747   #  $form->{PD}{$form->{type}} = "selected";
748   #  $form->{DF}{$form->{format}} = "selected";
749   #  $form->{OP}{$form->{media}} = "selected";
750   #  $form->{SM}{$form->{sendmode}} = "selected";
751   my $type   = qq|      <input type=hidden name="type" value="ustva">|;
752   my $media  = qq|      <input type=hidden name="media" value="screen">|;
753   my $format =
754       qq|       <option value=html selected>|
755     . $locale->text('Vorschau')
756     . qq|</option>|;
757   if ($latex_templates) {
758     $format .=
759         qq|    <option value=pdf>|
760       . $locale->text('UStVA als PDF-Dokument')
761       . qq|</option>|;
762   }
763
764   #my $disabled= qq|disabled="disabled"|;
765   #$disabled='' if ($form->{elster} eq '1' );
766   if ($form->{elster} eq '1') {
767     $format .=
768         qq|<option value=elsterwinston>|
769       . $locale->text('ELSTER Export nach Winston')
770       . qq|</option>|
771       . qq|<option value=elstertaxbird>|
772       . $locale->text('ELSTER Export nach Taxbird')
773       . qq|</option>|;      
774   }
775
776   #$format .= qq|<option value=elster>|.$locale->text('ELSTER Export nach Winston').qq|</option>|;
777   print qq|
778     $type
779     $media
780     <select name=format title = "|
781     . $locale->text('Ausgabeformat auswählen...') . qq|">$format</select>
782   |;
783   $lxdebug->leave_sub();
784 }
785
786 sub generate_ustva {
787   $lxdebug->enter_sub();
788
789   # Aufruf von get_config aus bin/mozilla/ustva.pl zum
790   # Einlesen der Finanzamtdaten aus finanzamt.ini
791
792   get_config($userspath, 'finanzamt.ini');
793
794   # init some form vars
795   my @anmeldungszeitraum =
796     qw('0401' '0402' '0403' '0404' '0405' '0405' '0406' '0407' '0408' '0409' '0410' '0411' '0412' '0441' '0442' '0443' '0444');
797   foreach my $item (@anmeldungszeitraum) {
798     $form->{$item} = "";
799   }
800
801     #forgotten the year --> thisyear
802     if ($form->{year} !~ m/^\d\d\d\d$/) {
803       $form->{year} = substr(
804                              $form->datetonum(
805                                     $form->current_date(\%myconfig), \%myconfig
806                              ),
807                              0, 4);
808       $lxdebug->message(LXDebug::DEBUG1,
809                         qq|Actual year from Database: $form->{year}\n|);
810     }
811
812     #
813     # using dates in ISO-8601 format: yyyymmmdd  for Postgres...
814     #
815     
816     #yearly report
817     if ($form->{period} eq "13") {
818       $form->{fromdate} = "$form->{year}0101";
819       $form->{todate}   = "$form->{year}1231";
820     }
821
822     #Quater reports
823     if ($form->{period} eq "41") {
824       $form->{fromdate} = "$form->{year}0101";
825       $form->{todate}   = "$form->{year}0331";
826       $form->{'0441'}   = "X";
827     }
828     if ($form->{period} eq "42") {
829       $form->{fromdate} = "$form->{year}0401";
830       $form->{todate}   = "$form->{year}0630";
831       $form->{'0442'}   = "X";
832     }
833     if ($form->{period} eq "43") {
834       $form->{fromdate} = "$form->{year}0701";
835       $form->{todate}   = "$form->{year}0930";
836       $form->{'0443'}   = "X";
837     }
838     if ($form->{period} eq "44") {
839       $form->{fromdate} = "$form->{year}1001";
840       $form->{todate}   = "$form->{year}1231";
841       $form->{'0444'}   = "X";
842     }
843
844     #Monthly reports
845   SWITCH: {
846       $form->{period} eq "01" && do {
847         $form->{fromdate} = "$form->{year}0101";
848         $form->{todate}   = "$form->{year}0131";
849         $form->{'0401'}   = "X";
850         last SWITCH;
851       };
852       $form->{period} eq "02" && do {
853         $form->{fromdate} = "$form->{year}0201";
854
855         #this works from 1901 to 2099, 1900 and 2100 fail.
856         my $leap = ($form->{year} % 4 == 0) ? "29" : "28";
857         $form->{todate} = "$form->{year}02$leap";
858         $form->{"0402"} = "X";
859         last SWITCH;
860       };
861       $form->{period} eq "03" && do {
862         $form->{fromdate} = "$form->{year}0301";
863         $form->{todate}   = "$form->{year}0331";
864         $form->{"0403"}   = "X";
865         last SWITCH;
866       };
867       $form->{period} eq "04" && do {
868         $form->{fromdate} = "$form->{year}0401";
869         $form->{todate}   = "$form->{year}0430";
870         $form->{"0404"}   = "X";
871         last SWITCH;
872       };
873       $form->{period} eq "05" && do {
874         $form->{fromdate} = "$form->{year}0501";
875         $form->{todate}   = "$form->{year}0531";
876         $form->{"0405"}   = "X";
877         last SWITCH;
878       };
879       $form->{period} eq "06" && do {
880         $form->{fromdate} = "$form->{year}0601";
881         $form->{todate}   = "$form->{year}0630";
882         $form->{"0406"}   = "X";
883         last SWITCH;
884       };
885       $form->{period} eq "07" && do {
886         $form->{fromdate} = "$form->{year}0701";
887         $form->{todate}   = "$form->{year}0731";
888         $form->{"0407"}   = "X";
889         last SWITCH;
890       };
891       $form->{period} eq "08" && do {
892         $form->{fromdate} = "$form->{year}0801";
893         $form->{todate}   = "$form->{year}0831";
894         $form->{"0408"}   = "X";
895         last SWITCH;
896       };
897       $form->{period} eq "09" && do {
898         $form->{fromdate} = "$form->{year}0901";
899         $form->{todate}   = "$form->{year}0930";
900         $form->{"0409"}   = "X";
901         last SWITCH;
902       };
903       $form->{period} eq "10" && do {
904         $form->{fromdate} = "$form->{year}1001";
905         $form->{todate}   = "$form->{year}1031";
906         $form->{"0410"}   = "X";
907         last SWITCH;
908       };
909       $form->{period} eq "11" && do {
910         $form->{fromdate} = "$form->{year}1101";
911         $form->{todate}   = "$form->{year}1130";
912         $form->{"0411"}   = "X";
913         last SWITCH;
914       };
915       $form->{period} eq "12" && do {
916         $form->{fromdate} = "$form->{year}1201";
917         $form->{todate}   = "$form->{year}1231";
918         $form->{"0412"}   = "X";
919         last SWITCH;
920       };
921     }
922
923
924
925
926   # Get the USTVA
927   USTVA->ustva(\%myconfig, \%$form);
928
929   # reformat Dates to dateformat
930   $form->{fromdate} = $locale->date(\%myconfig, $form->{fromdate}, 0, 0, 0);
931
932   $form->{todate} = $form->current_date(\%myconfig) unless $form->{todate};
933   $form->{todate} = $locale->date(\%myconfig, $form->{todate}, 0, 0, 0);
934
935   $form->{longperiod} =
936     $locale->date(\%myconfig, $form->current_date(\%myconfig), 1, 0, 0);
937
938   # if there are any dates construct a where
939   if ($form->{fromdate} || $form->{todate}) {
940
941     $form->{todate} = $form->current_date($myconfig)  unless ($form->{todate});
942
943     my $longtodate  = $locale->date($myconfig, $form->{todate}, 1, 0, 0);
944     my $shorttodate = $locale->date($myconfig, $form->{todate}, 0, 0, 0);
945
946     my $longfromdate  = $locale->date($myconfig, $form->{fromdate}, 1, 0, 0);
947     my $shortfromdate = $locale->date($myconfig, $form->{fromdate}, 0, 0, 0);
948
949     $form->{this_period} = "$shortfromdate<br>\n$shorttodate";
950     $form->{longperiod}      =
951         $locale->text('for Period')
952       . qq|<br>\n$longfromdate |
953       . $locale->text('bis')
954       . qq| $longtodate|;
955   }
956
957   if ($form->{comparefromdate} || $form->{comparetodate}) {
958     my $longcomparefromdate =
959       $locale->date(\%myconfig, $form->{comparefromdate}, 1, 0, 0);
960     my $shortcomparefromdate =
961       $locale->date(\%myconfig, $form->{comparefromdate}, 0, 0, 0);
962
963     my $longcomparetodate =
964       $locale->date(\%myconfig, $form->{comparetodate}, 1, 0, 0);
965     my $shortcomparetodate =
966       $locale->date(\%myconfig, $form->{comparetodate}, 0, 0, 0);
967
968     $form->{last_period} = "$shortcomparefromdate<br>\n$shortcomparetodate";
969     $form->{longperiod} .=
970         "<br>\n$longcomparefromdate "
971       . $locale->text('bis')
972       . qq| $longcomparetodate|;
973   }
974
975   $form->{Datum_heute} =
976     $locale->date(\%myconfig, $form->current_date(\%myconfig), 0, 0, 0);
977
978   # setup variables for the form
979   my @a = qw(company businessnumber tel fax email
980     co_chief co_department co_custom1 co_custom2 co_custom3 co_custom4 co_custom5
981     co_name1 co_name2  co_street co_street1 co_zip co_city co_city1 co_country co_tel co_tel1 co_tel2
982     co_fax co_fax1 co_email co_email1 co_url co_url1 ustid duns
983     co_bankname co_bankname1 co_bankname2 co_bankname3 co_blz co_blz1
984     co_blz2 co_blz3 co_accountnr co_accountnr1 co_accountnr2 co_accountnr3);
985
986   map { $form->{$_} = $myconfig{$_} } @a;
987
988   if ($form->{address} ne '') {
989     my $temp = $form->{address};
990     $temp =~ s/\\n/<br \/>/;
991     ($form->{co_street}, $form->{co_city}) = split("<br \/>", $temp);
992     $form->{co_city} =~ s/\\n//g;
993   }
994
995   #
996   # Outputformat specific customisation's
997   #
998
999   my @category_cent = qw(511 861 36 80 971 931 98 96 53 74
1000     85 65 66 61 62 67 63 64 59 69 39 83
1001     Z43 Z45 Z53 Z62 Z65 Z67);
1002
1003   my @category_euro = qw(41 44 49 43 48 51 86 35 77 76 91 97 93
1004     95 94 42 60 45 52 73 84);
1005
1006   if ( $form->{format} eq 'pdf' or $form->{format} eq 'postscript') {
1007
1008     $form->{IN} = "$form->{type}-$form->{year}.tex";
1009     $form->{padding} = "~~";
1010     $form->{bold}    = "\textbf{";
1011     $form->{endbold} = "}";
1012     $form->{br}      = '\\\\';
1013
1014     # Zahlenformatierung für Latex USTVA Formulare
1015
1016     foreach my $number (@category_euro) {
1017       $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '0', '');
1018     }
1019
1020     my ${decimal_comma} = ( $myconfig{numberformat} eq '1.000,00'
1021          or $myconfig{numberformat} eq '1000,00' ) ? ',':'.';
1022
1023     foreach my $number (@category_cent) {
1024       $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '');
1025       $form->{$number} =~ s/${decimal_comma}/~~/g;
1026     }
1027
1028   } elsif ( $form->{format} eq 'html') { # Formatierungen für HTML Ausgabe
1029
1030     $form->{IN} = $form->{type} . '.html';
1031     $form->{padding} = "&nbsp;&nbsp;";
1032     $form->{bold}    = "<b>";
1033     $form->{endbold} = "</b>";
1034     $form->{br}      = "<br>";
1035     $form->{address} =~ s/\\n/\n/g;
1036
1037     foreach $number (@category_cent) {
1038       $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '0');
1039     }
1040     
1041     foreach $number (@category_euro) {
1042       $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '0', '0');
1043     }
1044
1045   } elsif ( $form->{format} eq 'elsterwinston' ) {
1046
1047     $form->{IN} = 'winston.xml';
1048     
1049     #
1050     # Build Winston filename
1051     #
1052     
1053     my $file = 'U';     # 1. char 'U' = USTVA
1054     $file .= $form->{period};
1055     #4. and 5. char = year modulo 100
1056     $file .= sprintf("%02d", $form->{year} % 100);
1057     #6. to 18. char = Elstersteuernummer
1058     #Beispiel: Steuernummer in Bayern
1059     #111/222/33334 ergibt für UStVA Jan 2004: U01049111022233334
1060     $file .= $form->{elsterFFFF};
1061     $file .= $form->{elstersteuernummer};
1062     #file suffix
1063     $file .= '.xml';
1064     $form->{tmpfile} = "$userspath/$file";
1065
1066     $form->{attachment_filename} = "$file";
1067  
1068     # Zahlenformatierung für Winston
1069
1070     my $temp_numberformat = $myconfig{numberformat};
1071
1072     # Numberformat must be '1000.00' for Winston
1073
1074     $myconfig{numberformat} = '1000.00';
1075
1076     foreach my $number (@category_cent) {
1077       $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '2', '') : '';
1078     }
1079     
1080     foreach my $number (@category_euro) {
1081       $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '0', '') : '';
1082     }
1083     # Re-set Numberformat
1084     $myconfig{numberformat} = $temp_numberformat;
1085
1086   }
1087
1088   elsif ( $form->{format} eq 'elstertaxbird' ) {
1089
1090     $form->{IN} = 'taxbird.txb';
1091
1092     $form->{attachment_filename} = "USTVA-" . $form->{period} 
1093     . sprintf("%02d", $form->{year} % 100) . ".txb";
1094     
1095     $form->{tmpfile} = "$userspath/" . $form->{attachment_filename};
1096
1097     if ($form->{period} =~ /^[4]\d$/ ){
1098       my %periods = ( # Lx => taxbird
1099                    '41' => '12',
1100                    '42' => '13',
1101                    '43' => '14',
1102                    '44' => '15',
1103                  );
1104     
1105       foreach my $quarter ( keys %periods ) {
1106         $form->{taxbird_period} = $periods{$quarter} if ( $form->{period} eq $quarter);
1107       }
1108       
1109       my %lands = ( # Lx => taxbird # TODO: besser als array...
1110                   'Baden Würtemberg'       => '0',
1111                   'Bayern'                 => '1',
1112                   'Berlin'                 => '2',
1113                   'Brandenburg'            => '3',
1114                   'Bremen'                 => '4',
1115                   'Hamburg'                => '5',
1116                   'Hessen'                 => '6',
1117                   'Mecklenburg Vorpommern' => '7',
1118                   'Niedersachsen'          => '8',
1119                   'Nordrhein Westfalen'    => '9',
1120                   'Rheinland Pfalz'        => '10',
1121                   'Saarland'               => '11',
1122                   'Sachsen'                => '12',
1123                   'Sachsen Anhalt'         => '13',
1124                   'Schleswig Holstein'     => '14',
1125                   'Thüringen'              => '15',
1126             );
1127
1128       foreach my $land ( keys %lands ){
1129         $form->{taxbird_land_nr} = $lands{$land} if ($form->{elsterland} eq $land );
1130       }
1131       
1132       $form->{taxbird_steuernummer} = $form->{steuernummer};
1133       $form->{taxbird_steuernummer} =~ s/\D//g;
1134       
1135       $form->{co_zip} = $form->{co_city};
1136       $form->{co_zip} =~ s/\D//g;
1137       $form->{co_city} =~ s/\d//g;
1138       $form->{co_city} =~ s/^\s//g;
1139       
1140       ($form->{co_phone_prefix}, $form->{co_phone}) = split("-", $form->{tel});
1141       
1142       # Numberformatting for Taxbird
1143
1144       my $temp_numberformat = $myconfig{numberformat};
1145       # Numberformat must be '1000.00' for Taxbird ?!
1146
1147       $myconfig{numberformat} = '1000.00';
1148
1149       foreach my $number (@category_cent) {
1150         $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '2', '') : '';
1151       }
1152       
1153       foreach my $number (@category_euro) {
1154         $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '0', '') : '';
1155       }
1156       # Re-set Numberformat
1157       $myconfig{numberformat} = $temp_numberformat;
1158       
1159     } elsif ($form->{period} =~ /^\d+$/ ) {
1160       $form->{period} =~ s/^0//g;
1161       my $period = $form->{period};
1162       $period * 1;
1163       $period--;
1164       $form->{period} = $period;
1165     } else {
1166       $form->header;
1167       USTVA::error( $locale->text('Wrong Period' ));
1168       exit(0);
1169     }
1170     
1171   } elsif ( $form->{format} eq '' ){ # No format error.
1172     $form->header;
1173     USTVA::error( $locale->text('Application Error. No Format given!' ));
1174     exit(0);
1175  
1176   } else { # All other Formats are wrong
1177     $form->header;
1178     USTVA::error( $locale->text('Application Error. Wrong Format: ') . $form->{format} );
1179     exit(0);
1180   }
1181
1182   if ( $form->{period} eq '13' and $form->{format} ne 'html') {
1183     $form->header;
1184     USTVA::info(
1185       $locale->text(
1186       'Yearly taxreport not yet implemented')
1187       . '!');
1188   }
1189     
1190   $form->{templates} = $myconfig{templates};
1191   $form->{templates} = "doc" if ( $form->{type} eq 'help' );
1192
1193   $form->parse_template(\%myconfig, $userspath);
1194
1195   $lxdebug->leave_sub();
1196 }
1197
1198 sub edit {
1199   $lxdebug->enter_sub();
1200
1201   # edit all taxauthority prefs
1202
1203   $form->header;
1204   &get_config($userspath, 'finanzamt.ini');
1205
1206   #&create_steuernummer;
1207
1208   my $land = $form->{elsterland};
1209   my $amt  = $form->{elsterFFFF};
1210
1211   my $callback = '';
1212   $callback =
1213     "$form->{cbscript}?action=edit&login=$form->{cblogin}&path=$form->{cbpath}&root=$form->{cbroot}&rpw=$form->{cbrpw}"
1214     if ($form->{cbscript} ne '' and $form->{cblogin} ne '');
1215
1216   $form->{title} = $locale->text('Finanzamt - Einstellungen');
1217   print qq|
1218     <body>
1219     <form name="verzeichnis" method=post action="$form->{script}">
1220      <table width=100%>
1221         <tr>
1222           <th class="listtop">|
1223     . $locale->text('Finanzamt - Einstellungen') . qq|</th>
1224         </tr>
1225         <tr>
1226          <td>
1227            <br>
1228            <fieldset>
1229            <legend><b>|
1230     . $locale->text('Angaben zum Finanzamt') . qq|</b></legend>
1231   |;
1232
1233   #print qq|$form->{terminal}|;
1234
1235   USTVA::fa_auswahl($land, $amt, &elster_hash());
1236   print qq|
1237            </fieldset>
1238            <br>
1239   |;
1240   my $checked = '';
1241   $checked = "checked" if ($form->{method} eq 'accrual');
1242   print qq|
1243            <fieldset>
1244            <legend><b>| . $locale->text('Verfahren') . qq|</b>
1245            </legend>
1246            <input name=method id=accrual class=radio type=radio value="accrual" $checked>
1247            <label for="accrual">| . $locale->text('accrual') . qq|</label>
1248            <br>
1249   |;
1250   $checked = '';
1251   $checked = "checked" if ($form->{method} eq 'cash');
1252   print qq|
1253            <input name=method id=cash class=radio type=radio value="cash" $checked>
1254            <label for="cash">| . $locale->text('cash') . qq|</label>
1255            </fieldset>
1256            <br>
1257            <fieldset>
1258            <legend><b>| . $locale->text('Voranmeldungszeitraum') . qq|</b>
1259            </legend>
1260   |;
1261   $checked = '';
1262   $checked = "checked" if ($form->{FA_voranmeld} eq 'month');
1263   print qq|
1264            <input name=FA_voranmeld id=month class=radio type=radio value="month" $checked>
1265            <label for="month">| . $locale->text('month') . qq|</label>
1266            <br>
1267   |;
1268   $checked = '';
1269   $checked = "checked" if ($form->{FA_voranmeld} eq 'quarter');
1270   print qq|
1271            <input name="FA_voranmeld" id=quarter class=radio type=radio value="quarter" $checked>
1272            <label for="quarter">| . $locale->text('quarter') . qq|</label>
1273            <br>
1274   |;
1275   $checked = '';
1276   $checked = "checked" if ($form->{FA_dauerfrist} eq '1');
1277   print qq|
1278            <input name="FA_dauerfrist" id=FA_dauerfrist class=checkbox type=checkbox value="1" $checked>
1279            <label for="">|
1280     . $locale->text('Dauerfristverlängerung') . qq|</label>
1281            
1282            </fieldset>
1283            <br>
1284            <fieldset>
1285            <legend><b>| . $locale->text('Steuerberater/-in') . qq|</b>
1286            </legend>
1287   |;
1288   $checked = '';
1289   $checked = "checked" if ($form->{FA_71} eq 'X');
1290   print qq|
1291           <!-- <input name="FA_71" id=FA_71 class=checkbox type=checkbox value="X" $checked>
1292            <label for="FA_71">|
1293     . $locale->text('Verrechnung des Erstattungsbetrages erwünscht (Zeile 71)')
1294     . qq|</label>
1295            <br>
1296            <br>-->
1297            <table>
1298            <tr>
1299            <td>
1300            | . $locale->text('Name') . qq|
1301            </td>
1302            <td>
1303            | . $locale->text('Straße') . qq|
1304            </td>
1305            <td>
1306            | . $locale->text('PLZ, Ort') . qq|
1307            </td>
1308            <td>
1309            | . $locale->text('Telefon') . qq|
1310            </td>
1311            </tr>
1312            <tr>
1313            <td>
1314            <input name="FA_steuerberater_name" id=steuerberater size=25 value="$form->{FA_steuerberater_name}">
1315            </td>
1316            <td>
1317            <input name="FA_steuerberater_street" id=steuerberater size=25 value="$form->{FA_steuerberater_street}">
1318            </td>
1319            <td>
1320            <input name="FA_steuerberater_city" id=steuerberater size=25 value="$form->{FA_steuerberater_city}">
1321            </td>
1322            <td>
1323            <input name="FA_steuerberater_tel" id=steuerberater size=25 value="$form->{FA_steuerberater_tel}">
1324            </tr>
1325            </table>
1326            
1327            </fieldset>
1328
1329            <br>
1330            <br>
1331            <hr>
1332            <!--<input type=submit class=submit name=action value="|
1333     . $locale->text('debug') . qq|">-->
1334            |;
1335   print qq|
1336            <input type="button" name="Verweis" value="|
1337     . $locale->text('Back to user config...') . qq|" 
1338             onClick="self.location.href='$callback'">| if ($callback ne '');
1339   print qq|
1340            &nbsp; &nbsp;
1341            <input type=submit class=submit name=action value="|
1342     . $locale->text('continue') . qq|">
1343
1344          </td>
1345        </tr>
1346      </table>
1347   |;
1348
1349   my @variables = qw( steuernummer elsterland elstersteuernummer elsterFFFF);
1350   my $variable  = '';
1351   foreach $variable (@variables) {
1352     print qq|   
1353           <input name=$variable type=hidden value="$form->{$variable}">|;
1354   }
1355   my $steuernummer_new = '';
1356
1357   #<input type=hidden name="steuernummer_new" value="$form->{$steuernummer_new}">
1358   print qq|
1359           <input type=hidden name="callback" value="$callback">
1360           <input type=hidden name="nextsub" value="edit_form">
1361           <input type=hidden name="warnung" value="1">
1362           <input type=hidden name="saved" value="|
1363     . $locale->text('Bitte Angaben überprüfen') . qq|">
1364           <input type=hidden name="path" value=$form->{path}>
1365           <input type=hidden name="login" value=$form->{login}>
1366           <input type=hidden name="password" value=$form->{password}>
1367           <input type=hidden name="warnung" value="0">
1368   |;
1369
1370   @variables = qw(FA_Name FA_Strasse FA_PLZ
1371     FA_Ort FA_Telefon FA_Fax FA_PLZ_Grosskunden FA_PLZ_Postfach FA_Postfach
1372     FA_BLZ_1 FA_Kontonummer_1 FA_Bankbezeichnung_1 FA_BLZ_2
1373     FA_Kontonummer_2 FA_Bankbezeichnung_oertlich FA_Oeffnungszeiten
1374     FA_Email FA_Internet);
1375
1376   foreach $variable (@variables) {
1377     print qq|   
1378           <input name=$variable type=hidden value="$form->{$variable}">|;
1379   }
1380
1381   print qq|
1382    </form>
1383    </body>
1384 |;
1385   $lxdebug->leave_sub();
1386 }
1387
1388 sub edit_form {
1389   $lxdebug->enter_sub();
1390   $form->header();
1391   print qq|
1392     <body>
1393   |;
1394   my $elsterland         = '';
1395   my $elster_amt         = '';
1396   my $elsterFFFF         = '';
1397   my $elstersteuernummer = '';
1398   &get_config($userspath, 'finanzamt.ini')
1399     if ($form->{saved} eq $locale->text('saved'));
1400
1401   # Auf Übergabefehler checken
1402   USTVA::info(  $locale->text('Missing Tax Authoritys Preferences') . "\n"
1403               . $locale->text('USTVA-Hint: Tax Authoritys'))
1404     if (   $form->{elsterFFFF_new} eq 'Auswahl'
1405         || $form->{elsterland_new} eq 'Auswahl');
1406   USTVA::info(  $locale->text('Missing Method!') . "\n"
1407               . $locale->text('USTVA-Hint: Method'))
1408     if ($form->{method} eq '');
1409
1410   # Klären, ob Variablen bereits befüllt sind UND ob veräderungen auf
1411   # der vorherigen Maske stattfanden: $change = 1(in der edit sub,
1412   # mittels get_config)
1413
1414   my $change = $form->{elsterland} eq $form->{elsterland_new}
1415     && $form->{elsterFFFF} eq $form->{elsterFFFF_new} ? '0' : '1';
1416   $change = '0' if ($form->{saved} eq $locale->text('saved'));
1417   my $elster_init = &elster_hash();
1418
1419   #my %elster_init = ();
1420   my %elster_init = %$elster_init;
1421
1422   if ($change eq '1') {
1423
1424     # Daten ändern
1425     $elsterland           = $form->{elsterland_new};
1426     $elsterFFFF           = $form->{elsterFFFF_new};
1427     $form->{elsterland}   = $elsterland;
1428     $form->{elsterFFFF}   = $elsterFFFF;
1429     $form->{steuernummer} = '';
1430     &create_steuernummer;
1431
1432     # rebuild elster_amt
1433     my $amt = '';
1434     foreach $amt (keys %{ $elster_init{ $form->{elsterland} } }) {
1435       $elster_amt = $amt
1436         if ($elster_init{ $form->{elsterland}{$amt} eq $form->{elsterFFFF} });
1437     }
1438
1439     # load the predefined hash data into the FA_* Vars
1440     my @variables = qw(FA_Name FA_Strasse FA_PLZ FA_Ort
1441       FA_Telefon FA_Fax FA_PLZ_Grosskunden FA_PLZ_Postfach
1442       FA_Postfach
1443       FA_BLZ_1 FA_Kontonummer_1 FA_Bankbezeichnung_1
1444       FA_BLZ_2 FA_Kontonummer_2 FA_Bankbezeichnung_oertlich
1445       FA_Oeffnungszeiten FA_Email FA_Internet);
1446
1447     for (my $i = 0; $i <= 20; $i++) {
1448       $form->{ $variables[$i] } =
1449         $elster_init->{$elsterland}->{$elsterFFFF}->[$i];
1450     }
1451
1452   } else {
1453
1454     $elsterland = $form->{elsterland};
1455     $elsterFFFF = $form->{elsterFFFF};
1456
1457   }
1458   my $stnr = $form->{steuernummer};
1459   $stnr =~ s/\D+//g;
1460   my $patterncount   = $form->{patterncount};
1461   my $elster_pattern = $form->{elster_pattern};
1462   my $delimiter      = $form->{delimiter};
1463   my $steuernummer   = '';
1464   $steuernummer = $form->{steuernummer} if ($steuernummer eq '');
1465
1466   #Warnung
1467   my $warnung = $form->{warnung};
1468
1469   #printout form
1470   print qq|
1471    <form name="elsterform" method=post action="$form->{script}">
1472    <table width="100%">
1473        <tr>
1474         <th colspan="2" class="listtop">|
1475     . $locale->text('Finanzamt - Einstellungen') . qq|</th>
1476        </tr>
1477        <tr>
1478          <td colspan=2>
1479          <br>
1480   |;
1481   &show_fa_daten;
1482   print qq|
1483          </td>
1484        </tr>
1485        <tr>
1486          <td colspan="2">
1487            <br>
1488            <fieldset>
1489            <legend>
1490            <font size="+1">| . $locale->text('Steuernummer') . qq|</font>
1491            </legend>
1492            <br>
1493   |;
1494   $steuernummer =
1495     USTVA::steuernummer_input($form->{elsterland}, $form->{elsterFFFF},
1496                               $form->{steuernummer});
1497   print qq|
1498            </H2><br>
1499            </fieldset>
1500            <br>
1501            <br>
1502            <hr>
1503          </td>
1504       </tr>
1505       <tr>
1506          <td align="left">
1507
1508           <input type=hidden name=lastsub value="edit">
1509           |;
1510   print qq|<input type=submit class=submit name=action value="|
1511     . $locale->text('back') . qq|">|
1512     if ($form->{callback} eq '');
1513
1514   print qq|
1515            <input type="button" name="Verweis" value="|
1516     . $locale->text('Back to user config...') . qq|" 
1517             onClick="self.location.href='$form->{callback}'">|
1518     if ($form->{callback} ne '');
1519
1520   if ($form->{warnung} eq "1") {
1521     print qq|
1522           <input type=hidden name=nextsub value="edit_form">
1523           <input type=submit class=submit name=action value="|
1524       . $locale->text('continue') . qq|">
1525           <input type=hidden name="saved" value="|
1526       . $locale->text('Bitte alle Angaben überprüfen') . qq|">
1527     |;
1528   } else {
1529     print qq|
1530           <input type=hidden name="nextsub" value="save">
1531           <input type=hidden name="filename" value="finanzamt.ini">
1532           <input type=submit class=submit name=action value="|
1533       . $locale->text('save') . qq|">
1534          |;
1535   }
1536
1537   print qq|
1538          </td>
1539          <td align="right">
1540            <H2 class=confirm>$form->{saved}</H2>
1541          </td>
1542       </tr>
1543   </table>
1544   |;
1545
1546   my @variables = qw(FA_steuerberater_name FA_steuerberater_street
1547     FA_steuerberater_city FA_steuerberater_tel
1548     FA_voranmeld method
1549     FA_dauerfrist FA_71 elster
1550     path login password type elster_init saved
1551   );
1552   my $variable = '';
1553   foreach $variable (@variables) {
1554     print qq|
1555         <input name="$variable" type="hidden" value="$form->{$variable}">|;
1556   }
1557   print qq|
1558           <input type=hidden name="elsterland" value="$elsterland">
1559           <input type=hidden name="elsterFFFF" value="$elsterFFFF">
1560           <input type=hidden name="warnung" value="$warnung">
1561           <input type=hidden name="elstersteuernummer" value="$elstersteuernummer">
1562           <input type=hidden name="steuernummer" value="$stnr">
1563           <input type=hidden name="callback" value="$form->{callback}">
1564   </form>
1565   |;
1566   $lxdebug->leave_sub();
1567 }
1568
1569 sub create_steuernummer {
1570   $lxdebug->enter_sub();
1571   my $part           = $form->{part};
1572   my $patterncount   = $form->{patterncount};
1573   my $delimiter      = $form->{delimiter};
1574   my $elster_pattern = $form->{elster_pattern};
1575
1576   # rebuild steuernummer and elstersteuernummer
1577   # es gibt eine gespeicherte steuernummer $form->{steuernummer}
1578   # und die parts und delimiter
1579
1580   my $h = 0;
1581   my $i = 0;
1582
1583   my $steuernummer_new       = $part;
1584   my $elstersteuernummer_new = $form->{elster_FFFF};
1585   $elstersteuernummer_new .= '0';
1586
1587   for ($h = 1; $h < $patterncount; $h++) {
1588     $steuernummer_new .= qq|$delimiter|;
1589     for (my $i = 1; $i <= length($elster_pattern); $i++) {
1590       $steuernummer_new       .= $form->{"part_$h\_$i"};
1591       $elstersteuernummer_new .= $form->{"part_$h\_$i"};
1592     }
1593   }
1594   if ($form->{steuernummer} ne $steuernummer_new) {
1595     $form->{steuernummer}       = $steuernummer_new;
1596     $form->{elstersteuernummer} = $elstersteuernummer_new;
1597     $form->{steuernummer_new}   = $steuernummer_new;
1598   } else {
1599     $form->{steuernummer_new}       = '';
1600     $form->{elstersteuernummer_new} = '';
1601   }
1602   $lxdebug->leave_sub();
1603 }
1604
1605 sub get_config {
1606   $lxdebug->enter_sub();
1607
1608   my ($userpath, $filename) = @_;
1609   my ($key,      $value)    = '';
1610   open(FACONF, "$userpath/$form->{login}_$filename")
1611     or    #falls Datei nicht vorhanden ist
1612     sub {
1613     open(FANEW, ">$userpath/$form->{login}_$filename")
1614       or $form->error("$userpath/$filename : $!");
1615     close FANEW;
1616     open(FACONF, "$userpath/$form->{login}_$filename")
1617       or $form->error("$userpath/$form->{username}_$filename : $!");
1618     };
1619   while (<FACONF>) {
1620     last if /^\[/;
1621     next if /^(#|\s)/;
1622
1623     # remove comments
1624     s/\s#.*//g;
1625
1626     # remove any trailing whitespace
1627     s/^\s*(.*?)\s*$/$1/;
1628     ($key, $value) = split /=/, $_, 2;
1629
1630     #if ($value eq ' '){
1631     #   $form->{$key} = " " ;
1632     #} elsif ($value ne ' '){
1633     $form->{$key} = "$value";
1634
1635     #}
1636   }
1637   close FACONF;
1638
1639   # Textboxen formatieren: Linebreaks entfernen
1640   #
1641   #$form->{FA_Oeffnungszeiten} =~ s/\\\\n/<br>/g;
1642   $lxdebug->leave_sub();
1643 }
1644
1645 sub save {
1646   $lxdebug->enter_sub();
1647   my $filename = "$form->{login}_$form->{filename}";
1648
1649   #zuerst die steuernummer aus den part, parts_X_Y und delimiter herstellen
1650   create_steuernummer;
1651
1652   # Textboxen formatieren: Linebreaks entfernen
1653   #
1654   $form->{FA_Oeffnungszeiten} =~ s/\r\n/\\n/g;
1655
1656   #URL mit http:// davor?
1657   $form->{FA_Internet} =~ s/^http:\/\///;
1658   $form->{FA_Internet} = 'http://' . $form->{FA_Internet};
1659
1660   my @config = qw(elster elsterland elstersteuernummer steuernummer
1661     elsteramt elsterFFFF FA_Name FA_Strasse
1662     FA_PLZ FA_Ort FA_Telefon FA_Fax FA_PLZ_Grosskunden
1663     FA_PLZ_Postfach FA_Postfach FA_BLZ_1 FA_Kontonummer_1
1664     FA_Bankbezeichnung_1 FA_BLZ_2 FA_Kontonummer_2
1665     FA_Bankbezeichnung_oertlich FA_Oeffnungszeiten
1666     FA_Email FA_Internet FA_voranmeld method FA_steuerberater_name
1667     FA_steuerberater_street FA_steuerberater_city FA_steuerberater_tel
1668     FA_71 FA_dauerfrist);
1669
1670   # Hier kommt dann die Plausibilitätsprüfung der ELSTERSteuernummer
1671   if ($form->{elstersteuernummer} ne '000000000') {
1672     $form->{elster} = '1';
1673     open(CONF, ">$userspath/$filename") or $form->error("$filename : $!");
1674
1675     # create the config file
1676     print CONF qq|# Configuration file for USTVA\n\n|;
1677     my $key = '';
1678     foreach $key (sort @config) {
1679       $form->{$key} =~ s/\\/\\\\/g;
1680       $form->{$key} =~ s/"/\\"/g;
1681
1682       # strip M
1683       $form->{$key} =~ s/\r\n/\n/g;
1684       print CONF qq|$key=|;
1685       if ($form->{$key} ne 'Y') {
1686         print CONF qq|$form->{$key}\n|;
1687       }
1688       if ($form->{$key} eq 'Y') {
1689         print CONF qq|checked \n|;
1690       }
1691     }
1692     print CONF qq|\n\n|;
1693     close CONF;
1694     $form->{saved} = $locale->text('saved');
1695
1696   } else {
1697
1698     $form->{saved} = $locale->text('Bitte eine Steuernummer angeben');
1699   }
1700
1701   &edit_form;
1702   $lxdebug->leave_sub();
1703 }
1704
1705 sub show_fa_daten {
1706   $lxdebug->enter_sub();
1707   my $readonly        = $_;
1708   my $oeffnungszeiten = $form->{FA_Oeffnungszeiten};
1709   $oeffnungszeiten =~ s/\\\\n/\n/g;
1710   print qq|    <br>
1711                <fieldset>
1712                <legend>
1713                <font size="+1">|
1714     . $locale->text('Finanzamt') . qq| $form->{FA_Name}</font>
1715                </legend>
1716   |;
1717
1718   #print qq|\n<h4>$form->{FA_Ergaenzung_Name}&nbsp;</h4>
1719   #        | if ( $form->{FA_Ergaenzung_Name} );
1720   print qq|
1721                <table width="100%" valign="top">
1722                <tr>
1723                 <td valign="top">
1724                   <br>
1725                   <fieldset>
1726                     <legend>
1727                     <b>| . $locale->text('Address') . qq|</b>
1728                     </legend>
1729
1730                   <table width="100%">
1731                    <tr>
1732                     <td>
1733                     | . $locale->text('Finanzamt') . qq|
1734                     </td>
1735                    </tr>
1736                    <tr>
1737                     <td colspan="2">
1738                      <input name="FA_Name" size="40" title="FA_Name" value="$form->{FA_Name}" $readonly>
1739                     <td>
1740                    </tr>
1741                    <tr>
1742                     <td colspan="2">
1743                      <input name="FA_Strasse" size="40" title="FA_Strasse" value="$form->{FA_Strasse}" $readonly>
1744                     </td width="100%">
1745                    </tr>
1746                    <tr>
1747                     <td width="116px">
1748                      <input name="FA_PLZ" size="10" title="FA_PLZ" value="$form->{FA_PLZ}" $readonly>
1749                     </td>
1750                     <td>
1751                      <input name="FA_Ort" size="20" title="FA_Ort" value="$form->{FA_Ort}" $readonly>
1752                     </td>
1753                   </tr>
1754                   </table>
1755                   </fieldset>
1756                   <br>
1757                   <fieldset>
1758                   <legend>
1759                   <b>| . $locale->text('Kontakt') . qq|</b>
1760                   </legend>
1761                       | . $locale->text('Telefon') . qq|<br>
1762                       <input name="FA_Telefon" size="40" title="FA_Telefon" value="$form->{FA_Telefon}" $readonly>
1763                       <br>
1764                       <br> 
1765                       | . $locale->text('Fax') . qq|<br>
1766                       <input name="FA_Fax" size="40" title="FA_Fax" value="$form->{FA_Fax}" $readonly>
1767                       <br>
1768                       <br>
1769                       | . $locale->text('Internet') . qq|<br>
1770                       <input name="FA_Email" size="40" title="FA_Email" value="$form->{FA_Email}" $readonly>
1771                       <br>
1772                       <br>
1773                       <input name="FA_Internet" size="40" title="" title="FA_Internet" value="$form->{FA_Internet}" $readonly>
1774                       <br>
1775                   </fieldset>
1776                 </td>
1777                 <td valign="top">
1778                   <br>
1779                   <fieldset>
1780                   <legend>
1781                   <b>| . $locale->text('Öffnungszeiten') . qq|</b>
1782                   </legend>
1783                   <textarea name="FA_Oeffnungszeiten" rows="4" cols="40" $readonly>$oeffnungszeiten</textarea>
1784                   </fieldset>
1785                   <br>
1786   |;
1787   my $FA_1 =
1788     (   $form->{FA_BLZ_1} ne ''
1789      && $form->{FA_Kontonummer_1}     ne ''
1790      && $form->{FA_Bankbezeichnung_1} ne '');
1791   my $FA_2 =
1792     (   $form->{FA_BLZ_2} ne ''
1793      && $form->{FA_Kontonummer_2}            ne ''
1794      && $form->{FA_Bankbezeichnung_oertlich} ne '');
1795
1796   if ($FA_1 && $FA_2) {
1797     print qq|
1798                     <fieldset>
1799                     <legend>
1800                     <b>|
1801       . $locale->text('Bankverbindungen des Finanzamts') . qq|</b>
1802                     <legend>
1803                     <table>   
1804                     <tr>
1805                      <td>
1806                         | . $locale->text('Kreditinstitut') . qq|
1807                         <br>
1808                         <input name="FA_Bankbezeichnung_1" size="30" value="$form->{FA_Bankbezeichnung_1}" $readonly>
1809                         <br>
1810                         <br>
1811                         | . $locale->text('Kontonummer') . qq|
1812                         <br>
1813                         <input name="FA_Kontonummer_1" size="15" value="$form->{FA_Kontonummer_1}" $readonly>
1814                         <br>
1815                         <br> 
1816                         | . $locale->text('Bankleitzahl') . qq|
1817                         <br>
1818                         <input name="FA_BLZ_1" size="15" value="$form->{FA_BLZ_1}" $readonly>
1819                      </td>
1820                      <td>
1821                         | . $locale->text('Kreditinstitut') . qq|
1822                         <br>
1823                         <input name="FA_Bankbezeichnung_oertlich" size="30" value="$form->{FA_Bankbezeichnung_oertlich}" $readonly>
1824                         <br>
1825                         <br>
1826                         | . $locale->text('Kontonummer') . qq|
1827                         <br>
1828                         <input name="FA_Kontonummer_2" size="15" value="$form->{FA_Kontonummer_2}" $readonly>
1829                         <br>
1830                         <br> 
1831                         | . $locale->text('Bankleitzahl') . qq|
1832                         <br>
1833                         <input name="FA_BLZ_2" size="15" value="$form->{FA_BLZ_2}" $readonly>
1834                      </td>
1835                     </tr>
1836                     </table>
1837                     </fieldset>
1838     |;
1839   } elsif ($FA_1) {
1840     print qq|
1841                     <fieldset>
1842                     <legend>
1843                       <b>|
1844       . $locale->text('Bankverbindung des Finanzamts') . qq|</b>
1845                     <legend>
1846                     | . $locale->text('Kontonummer') . qq|
1847                     <br>
1848                     <input name="FA_Kontonummer_1" size="30" value="$form->{FA_Kontonummer_1}" $readonly>
1849                     <br>
1850                     <br> 
1851                     | . $locale->text('Bankleitzahl (BLZ)') . qq|
1852                     <br>
1853                     <input name="FA_BLZ_1" size="15" value="$form->{FA_BLZ_1}" $readonly>
1854                     <br>
1855                     <br>
1856                     | . $locale->text('Kreditinstitut') . qq|
1857                     <br>
1858                     <input name="FA_Bankbezeichnung_1" size="15" value="$form->{FA_Bankbezeichnung_1}" $readonly>
1859                     <br>
1860                     </fieldset>
1861     |;
1862   } else {
1863     print qq|
1864                     <fieldset>
1865                     <legend>
1866                       <b>|
1867       . $locale->text('Bankverbindung des Finanzamts') . qq|</b>
1868                     <legend> 
1869                     | . $locale->text('Kontonummer') . qq|
1870                     <br>
1871                     <input name="FA_Kontonummer_2" size="30" value="$form->{FA_Kontonummer_2}" $readonly>
1872                     <br>
1873                     <br> 
1874                     | . $locale->text('Bankleitzahl (BLZ)') . qq|
1875                     <br>
1876                     <input name="FA_BLZ_2" size="15" value="$form->{FA_BLZ_2}" $readonly>
1877                     <br>
1878                     <br>
1879                     | . $locale->text('Kreditinstitut') . qq|
1880                     <br>
1881                     <input name="FA_Bankbezeichnung_oertlich" size="15" value="$form->{FA_Bankbezeichnung_oertlich}" $readonly>
1882                     </fieldset>
1883     |;
1884   }
1885   print qq|
1886                  </td>
1887                </tr>              
1888           </table>
1889   </fieldset>
1890   |;
1891   $lxdebug->leave_sub();
1892 }
1893
1894
1895 sub continue {
1896   $lxdebug->enter_sub();
1897
1898   # allow Symbolic references just here:
1899   no strict 'refs';
1900   &{ $form->{nextsub} };
1901   use strict 'refs';
1902   $lxdebug->leave_sub();
1903 }
1904
1905 sub back {
1906   $lxdebug->enter_sub();
1907   &{ $form->{lastsub} };
1908   $lxdebug->leave_sub();
1909 }
1910
1911 sub elster_hash {
1912   $lxdebug->enter_sub();
1913   my $finanzamt = USTVA::query_finanzamt(\%myconfig, \%$form);
1914   $lxdebug->leave_sub();
1915   return $finanzamt;
1916 }
1917
1918