- Anpassung der Uebersetzungen: Die Programmtexte sind nun (fast) alle in englischer...
[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('Company') . 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('No Company Name given') . 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('No Company Address given') . 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|.:&nbsp;
172           $form->{co_tel}
173           <br>
174           | . $locale->text('Fax') . qq|.:nbsp;
175           $form->{co_fax}         
176           <br>
177           <br>
178           $form->{co_email}       
179           <br>
180           <br>
181           | . $locale->text('Tax Number') . qq|:&nbsp;
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 Tax Number') . qq|:&nbsp;
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('Assume Tax Consultant Data in Tax Computation?')
207       . qq|" name="FA_steuerberater" id=steuerberater class=checkbox type=checkbox value="1">&nbsp;
208             <b>| . $locale->text('Tax Consultant') . 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('Tax Period') . 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       'Amended Advance Turnover Tax Return (Nr. 10)')
256     . qq|">
257             | . $locale->text('Amended Advance Turnover Tax Return') . qq|
258           <br>
259   |;
260
261   if ($voranmeld ne '') {
262     print qq|
263           <br>
264           | . $locale->text($voranmeld) . qq|
265   |;
266     print $locale->text('With Extension Of Time') 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('Tax Office') . 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|.:&nbsp;
306           $form->{FA_Telefon}
307           <br> 
308           | . $locale->text('Fax') . qq|.:$nbsp;
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('Openings') . 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('Bank Connection') . qq|
345           <table>
346           <tr>
347           <td>
348           $form->{FA_Bankbezeichnung_1}
349           <br>                  
350           | . $locale->text('Account') . qq|:&nbsp;
351           $form->{FA_Kontonummer_1}
352           <br>
353           | . $locale->text('Bank Code') . qq|:&nbsp;
354           $form->{FA_BLZ_1}
355           </td>
356           <td>
357           $form->{FA_Bankbezeichnung_oertlich}
358           <br>
359           | . $locale->text('Account') . qq|:&nbsp;
360           $form->{FA_Kontonummer_2}
361           <br> 
362           | . $locale->text('Bank Code') . qq|:&nbsp;
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('Bank Connection') . qq|
372           <br>
373           <br>
374           $form->{FA_Bankbezeichnung_1}
375           <br>                  
376           | . $locale->text('Account') . qq|:&nbsp;
377           $form->{FA_Kontonummer_1}
378           <br> 
379           | . $locale->text('Bank Code') . qq|:&nbsp;
380           $form->{FA_BLZ_1}          <br>
381           <br>|;
382     } elsif ($FA_2) {
383       print qq|
384           <br>
385           | . $locale->text('Bank Connection') . qq|
386           <br>
387           <br>
388           $form->{FA_Bankbezeichnung_oertlich}
389           <br>                  
390           | . $locale->text('Account') . qq|:&nbsp;
391           $form->{FA_Kontonummer_2}
392           <br> 
393           | . $locale->text('Bank Code') . qq|:&nbsp;
394           $form->{FA_BLZ_2}
395      |;
396     }
397     print qq|
398
399       </fieldset>
400       <br>
401       <fieldset>
402       <legend>
403       <b>| . $locale->text('Outputformat') . 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('Hints') . 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     <!--
468     <form action="doc/ustva.html" method="get">
469     
470        <input type=submit class=submit name=action value="|
471     . $locale->text('Help') . qq|">
472    </form>-->
473    </td>
474   </tr>
475   </table>
476   |;
477
478   print qq|
479
480   </body>
481   </html>
482   |;
483   $lxdebug->leave_sub();
484 }
485
486 #############################
487
488 sub help {
489   $lxdebug->enter_sub();
490
491   # parse help documents under doc
492   my $tmp = $form->{templates};
493   $form->{templates} = 'doc';
494   $form->{help}      = 'ustva';
495   $form->{type}      = 'help';
496   $form->{format}    = 'html';
497   &generate_ustva();
498
499   #$form->{templates} = $tmp;
500   $lxdebug->leave_sub();
501 }
502
503 sub show {
504   $lxdebug->enter_sub();
505
506   #&generate_ustva();
507   no strict 'refs';
508   $lxdebug->leave_sub();
509   &{ $form->{nextsub} };
510   use strict 'refs';
511 }
512
513 sub ustva_vorauswahl {
514   $lxdebug->enter_sub();
515
516   #Aktuelles Datum zerlegen:
517   my $date = $form->datetonum($form->current_date(\%myconfig), \%myconfig);
518
519   #$locale->date($myconfig, $form->current_date($myconfig), 0)=~ /(\d\d).(\d\d).(\d\d\d\d)/;
520   $form->{day}   = substr($date, 6, 2);
521   $form->{month} = substr($date, 4, 2);
522   $form->{year}  = substr($date, 0, 4);
523   $lxdebug->message(LXDebug::DEBUG1, qq|
524     Actual date from Database: $date\n    
525     Actual year from Database: $form->{year}\n
526     Actual day from Database: $form->{day}\n
527     Actual month from Database: $form->{month}\n|);
528
529   my $sel    = '';
530   my $yymmdd = '';
531
532   # Testdaten erzeugen:
533   #$form->{day}= '11';
534   #$form->{month}= '01';
535   #$form->{year}= 2004;
536   print qq|
537      <input type=hidden name=day value=$form->{day}>
538      <input type=hidden name=month value=$form->{month}>
539      <input type=hidden name=yymmdd value=$yymmdd>
540      <input type=hidden name=sel value=$sel>
541  |;
542
543   if ($form->{FA_voranmeld} eq 'month') {
544
545     # Vorauswahl bei monatlichem Voranmeldungszeitraum
546
547     my %liste = ('01' => $locale->text('January'),
548                  '02' => $locale->text('February'),
549                  '03' => $locale->text('March'),
550                  '04' => $locale->text('April'),
551                  '05' => $locale->text('May'),
552                  '06' => $locale->text('June'),
553                  '07' => $locale->text('July'),
554                  '08' => $locale->text('August'),
555                  '09' => $locale->text('September'),
556                  '10' => $locale->text('October'),
557                  '11' => $locale->text('November'),
558                  '12' => $locale->text('December'),
559                  '13' => $locale->text('Yearly'),
560                 );
561
562     my $yy = $form->{year} * 10000;
563     $yymmdd = "$form->{year}$form->{month}$form->{day}" * 1;
564     $sel    = '';
565     my $dfv = '';
566
567     # Offset für Dauerfristverlängerung
568     $dfv = '100' if ($form->{FA_dauerfrist} eq '1');
569
570   SWITCH: {
571       $yymmdd <= ($yy + 110 + $dfv) && do {
572         $form->{year} = $form->{year} - 1;
573         $sel = '12';
574         last SWITCH;
575       };
576       $yymmdd <= ($yy + 210 + $dfv) && do {
577         $sel = '01';
578         last SWITCH;
579       };
580       $yymmdd <= ($yy + 310 + $dfv) && do {
581         $sel = '02';
582         last SWITCH;
583       };
584       $yymmdd <= ($yy + 410 + $dfv) && do {
585         $sel = '03';
586         last SWITCH;
587       };
588       $yymmdd <= ($yy + 510 + $dfv) && do {
589         $sel = '04';
590         last SWITCH;
591       };
592       $yymmdd <= ($yy + 610 + $dfv) && do {
593         $sel = '05';
594         last SWITCH;
595       };
596       $yymmdd <= ($yy + 710 + $dfv) && do {
597         $sel = '06';
598         last SWITCH;
599       };
600       $yymmdd <= ($yy + 810 + $dfv) && do {
601         $sel = '07';
602         last SWITCH;
603       };
604       $yymmdd <= ($yy + 910 + $dfv) && do {
605         $sel = '08';
606         last SWITCH;
607       };
608       $yymmdd <= ($yy + 1010 + $dfv) && do {
609         $sel = '09';
610         last SWITCH;
611       };
612       $yymmdd <= ($yy + 1110 + $dfv) && do {
613         $sel = '10';
614         last SWITCH;
615       };
616       $yymmdd <= ($yy + 1210) && do {
617         $sel = '11';
618         last SWITCH;
619       };
620       $yymmdd <= ($yy + 1231) && do {
621         $sel = '12';
622         last SWITCH;
623       };
624
625     }
626     print qq|<select id="zeitraum" name="period" title="|
627   . $locale->text('Select a period') . qq|" >|;
628
629     my $key = '';
630     foreach $key (sort keys %liste) {
631       my $selected = '';
632       $selected = 'selected' if ($sel eq $key);
633       print qq|
634          <option value="$key" $selected> $liste{$key}</option>
635    |;
636     }
637     print qq|</select>|;
638
639   } elsif ($form->{FA_voranmeld} eq 'quarter') {
640
641     # Vorauswahl bei quartalsweisem Voranmeldungszeitraum
642     my %liste = ('41'  => $locale->text('1. Quarter'),
643                  '42'  => $locale->text('2. Quarter'),
644                  '43'  => $locale->text('3. Quarter'),
645                  '44'  => $locale->text('4. Quarter'),
646                  '13' => $locale->text('Yearly'),);
647
648     my $yy = $form->{year} * 10000;
649     $yymmdd = "$form->{year}$form->{month}$form->{day}" * 1;
650     $sel    = '';
651     my $dfv = '';    # Offset für Dauerfristverlängerung
652     $dfv = '100' if ($form->{FA_dauerfrist} eq '1');
653
654   SWITCH: {
655       $yymmdd <= ($yy + 110 + $dfv) && do {
656         $form->{year} = $form->{year} - 1;
657         $sel = '44';
658         last SWITCH;
659       };
660       $yymmdd <= ($yy + 410 + $dfv) && do {
661         $sel = '41';
662         last SWITCH;
663       };
664       $yymmdd <= ($yy + 710 + $dfv) && do {
665         $sel = '42';
666         last SWITCH;
667       };
668       $yymmdd <= ($yy + 1010 + $dfv) && do {
669         $sel = '43';
670         last SWITCH;
671       };
672       $yymmdd <= ($yy + 1231) && do {
673         $sel = '44';
674       };
675     }
676
677     print qq|<select id="zeitraum" name="period" title="|
678       . $locale->text('Select a period') . qq|" >|;
679     my $key = '';
680     foreach $key (sort keys %liste) {
681       my $selected = '';
682       $selected = 'selected' if ($sel eq $key);
683       print qq|
684          <option value="$key" $selected>$liste{$key}</option>
685      |;
686     }
687     print qq|\n</select>
688    |;
689
690   } else {
691
692     # keine Vorauswahl bei Voranmeldungszeitraum
693     print qq|<select id="zeitraum" name="period" title="|
694       . $locale->text('Select a period') . qq|" >|;
695
696     my %listea = ('41' => '1. Quarter',
697                   '42' => '2. Quarter',
698                   '43' => '3. Quarter',
699                   '44' => '4. Quarter',);
700
701     my %listeb = ('01' => 'January',
702                   '02' => 'February',
703                   '03' => 'March',
704                   '04' => 'April',
705                   '05' => 'May',
706                   '06' => 'June',
707                   '07' => 'July',
708                   '08' => 'August',
709                   '09' => 'September',
710                   '10' => 'October',
711                   '11' => 'November',
712                   '12' => 'December',
713                   '13' => 'Yearly',);
714     my $key = '';
715     foreach $key (sort keys %listea) {
716       print qq|
717          <option value="$key">|
718         . $locale->text("$listea{$key}")
719         . qq|</option>\n|;
720     }
721
722     foreach $key (sort keys %listeb) {
723       print qq|
724          <option value="$key">|
725         . $locale->text("$listeb{$key}")
726         . qq|</option>\n|;
727     }
728     print qq|</select>|;
729   }
730   $lxdebug->leave_sub();
731 }
732
733 sub config {
734   $lxdebug->enter_sub();
735   edit();
736   $lxdebug->leave_sub();
737 }
738
739 sub debug {
740   $lxdebug->enter_sub();
741   $form->debug();
742   $lxdebug->leave_sub();
743 }
744
745 sub show_options {
746   $lxdebug->enter_sub();
747
748   #  $form->{PD}{$form->{type}} = "selected";
749   #  $form->{DF}{$form->{format}} = "selected";
750   #  $form->{OP}{$form->{media}} = "selected";
751   #  $form->{SM}{$form->{sendmode}} = "selected";
752   my $type   = qq|      <input type=hidden name="type" value="ustva">|;
753   my $media  = qq|      <input type=hidden name="media" value="screen">|;
754   my $format =
755       qq|       <option value=html selected>|
756     . $locale->text('Preview')
757     . qq|</option>|;
758   if ($latex_templates) {
759     $format .=
760         qq|    <option value=pdf>|
761       . $locale->text('UStVA (PDF-Dokument)')
762       . qq|</option>|;
763   }
764
765   #my $disabled= qq|disabled="disabled"|;
766   #$disabled='' if ($form->{elster} eq '1' );
767   if ($form->{elster} eq '1') {
768     $format .=
769         qq|<option value=elsterwinston>|
770       . $locale->text('ELSTER Export (Winston)')
771       . qq|</option>|
772       . qq|<option value=elstertaxbird>|
773       . $locale->text('ELSTER Export (Taxbird)')
774       . qq|</option>|;      
775   }
776
777   #$format .= qq|<option value=elster>|.$locale->text('ELSTER Export nach Winston').qq|</option>|;
778   print qq|
779     $type
780     $media
781     <select name=format title = "|
782     . $locale->text('Choose Outputformat') . qq|">$format</select>
783   |;
784   $lxdebug->leave_sub();
785 }
786
787 sub generate_ustva {
788   $lxdebug->enter_sub();
789
790   # Aufruf von get_config aus bin/mozilla/ustva.pl zum
791   # Einlesen der Finanzamtdaten aus finanzamt.ini
792
793   get_config($userspath, 'finanzamt.ini');
794
795   # init some form vars
796   my @anmeldungszeitraum =
797     qw('0401' '0402' '0403' '0404' '0405' '0405' '0406' '0407' '0408' '0409' '0410' '0411' '0412' '0441' '0442' '0443' '0444');
798   foreach my $item (@anmeldungszeitraum) {
799     $form->{$item} = "";
800   }
801
802     #forgotten the year --> thisyear
803     if ($form->{year} !~ m/^\d\d\d\d$/) {
804       $form->{year} = substr(
805                              $form->datetonum(
806                                     $form->current_date(\%myconfig), \%myconfig
807                              ),
808                              0, 4);
809       $lxdebug->message(LXDebug::DEBUG1,
810                         qq|Actual year from Database: $form->{year}\n|);
811     }
812
813     #
814     # using dates in ISO-8601 format: yyyymmmdd  for Postgres...
815     #
816     
817     #yearly report
818     if ($form->{period} eq "13") {
819       $form->{fromdate} = "$form->{year}0101";
820       $form->{todate}   = "$form->{year}1231";
821     }
822
823     #Quater reports
824     if ($form->{period} eq "41") {
825       $form->{fromdate} = "$form->{year}0101";
826       $form->{todate}   = "$form->{year}0331";
827       $form->{'0441'}   = "X";
828     }
829     if ($form->{period} eq "42") {
830       $form->{fromdate} = "$form->{year}0401";
831       $form->{todate}   = "$form->{year}0630";
832       $form->{'0442'}   = "X";
833     }
834     if ($form->{period} eq "43") {
835       $form->{fromdate} = "$form->{year}0701";
836       $form->{todate}   = "$form->{year}0930";
837       $form->{'0443'}   = "X";
838     }
839     if ($form->{period} eq "44") {
840       $form->{fromdate} = "$form->{year}1001";
841       $form->{todate}   = "$form->{year}1231";
842       $form->{'0444'}   = "X";
843     }
844
845     #Monthly reports
846   SWITCH: {
847       $form->{period} eq "01" && do {
848         $form->{fromdate} = "$form->{year}0101";
849         $form->{todate}   = "$form->{year}0131";
850         $form->{'0401'}   = "X";
851         last SWITCH;
852       };
853       $form->{period} eq "02" && do {
854         $form->{fromdate} = "$form->{year}0201";
855
856         #this works from 1901 to 2099, 1900 and 2100 fail.
857         my $leap = ($form->{year} % 4 == 0) ? "29" : "28";
858         $form->{todate} = "$form->{year}02$leap";
859         $form->{"0402"} = "X";
860         last SWITCH;
861       };
862       $form->{period} eq "03" && do {
863         $form->{fromdate} = "$form->{year}0301";
864         $form->{todate}   = "$form->{year}0331";
865         $form->{"0403"}   = "X";
866         last SWITCH;
867       };
868       $form->{period} eq "04" && do {
869         $form->{fromdate} = "$form->{year}0401";
870         $form->{todate}   = "$form->{year}0430";
871         $form->{"0404"}   = "X";
872         last SWITCH;
873       };
874       $form->{period} eq "05" && do {
875         $form->{fromdate} = "$form->{year}0501";
876         $form->{todate}   = "$form->{year}0531";
877         $form->{"0405"}   = "X";
878         last SWITCH;
879       };
880       $form->{period} eq "06" && do {
881         $form->{fromdate} = "$form->{year}0601";
882         $form->{todate}   = "$form->{year}0630";
883         $form->{"0406"}   = "X";
884         last SWITCH;
885       };
886       $form->{period} eq "07" && do {
887         $form->{fromdate} = "$form->{year}0701";
888         $form->{todate}   = "$form->{year}0731";
889         $form->{"0407"}   = "X";
890         last SWITCH;
891       };
892       $form->{period} eq "08" && do {
893         $form->{fromdate} = "$form->{year}0801";
894         $form->{todate}   = "$form->{year}0831";
895         $form->{"0408"}   = "X";
896         last SWITCH;
897       };
898       $form->{period} eq "09" && do {
899         $form->{fromdate} = "$form->{year}0901";
900         $form->{todate}   = "$form->{year}0930";
901         $form->{"0409"}   = "X";
902         last SWITCH;
903       };
904       $form->{period} eq "10" && do {
905         $form->{fromdate} = "$form->{year}1001";
906         $form->{todate}   = "$form->{year}1031";
907         $form->{"0410"}   = "X";
908         last SWITCH;
909       };
910       $form->{period} eq "11" && do {
911         $form->{fromdate} = "$form->{year}1101";
912         $form->{todate}   = "$form->{year}1130";
913         $form->{"0411"}   = "X";
914         last SWITCH;
915       };
916       $form->{period} eq "12" && do {
917         $form->{fromdate} = "$form->{year}1201";
918         $form->{todate}   = "$form->{year}1231";
919         $form->{"0412"}   = "X";
920         last SWITCH;
921       };
922     }
923
924
925
926
927   # Get the USTVA
928   USTVA->ustva(\%myconfig, \%$form);
929
930   # reformat Dates to dateformat
931   $form->{fromdate} = $locale->date(\%myconfig, $form->{fromdate}, 0, 0, 0);
932
933   $form->{todate} = $form->current_date(\%myconfig) unless $form->{todate};
934   $form->{todate} = $locale->date(\%myconfig, $form->{todate}, 0, 0, 0);
935
936   $form->{longperiod} =
937     $locale->date(\%myconfig, $form->current_date(\%myconfig), 1, 0, 0);
938
939   # if there are any dates construct a where
940   if ($form->{fromdate} || $form->{todate}) {
941
942     $form->{todate} = $form->current_date($myconfig)  unless ($form->{todate});
943
944     my $longtodate  = $locale->date($myconfig, $form->{todate}, 1, 0, 0);
945     my $shorttodate = $locale->date($myconfig, $form->{todate}, 0, 0, 0);
946
947     my $longfromdate  = $locale->date($myconfig, $form->{fromdate}, 1, 0, 0);
948     my $shortfromdate = $locale->date($myconfig, $form->{fromdate}, 0, 0, 0);
949
950     $form->{this_period} = "$shortfromdate<br>\n$shorttodate";
951     $form->{longperiod}      =
952         $locale->text('for Period')
953       . qq|<br>\n$longfromdate |
954       . $locale->text('to (date)')
955       . qq| $longtodate|;
956   }
957
958   if ($form->{comparefromdate} || $form->{comparetodate}) {
959     my $longcomparefromdate =
960       $locale->date(\%myconfig, $form->{comparefromdate}, 1, 0, 0);
961     my $shortcomparefromdate =
962       $locale->date(\%myconfig, $form->{comparefromdate}, 0, 0, 0);
963
964     my $longcomparetodate =
965       $locale->date(\%myconfig, $form->{comparetodate}, 1, 0, 0);
966     my $shortcomparetodate =
967       $locale->date(\%myconfig, $form->{comparetodate}, 0, 0, 0);
968
969     $form->{last_period} = "$shortcomparefromdate<br>\n$shortcomparetodate";
970     $form->{longperiod} .=
971         "<br>\n$longcomparefromdate "
972       . $locale->text('to (date)')
973       . qq| $longcomparetodate|;
974   }
975
976   $form->{Datum_heute} =
977     $locale->date(\%myconfig, $form->current_date(\%myconfig), 0, 0, 0);
978
979   # setup variables for the form
980   my @a = qw(company businessnumber tel fax email
981     co_chief co_department co_custom1 co_custom2 co_custom3 co_custom4 co_custom5
982     co_name1 co_name2  co_street co_street1 co_zip co_city co_city1 co_country co_tel co_tel1 co_tel2
983     co_fax co_fax1 co_email co_email1 co_url co_url1 ustid duns
984     co_bankname co_bankname1 co_bankname2 co_bankname3 co_blz co_blz1
985     co_blz2 co_blz3 co_accountnr co_accountnr1 co_accountnr2 co_accountnr3);
986
987   map { $form->{$_} = $myconfig{$_} } @a;
988
989   if ($form->{address} ne '') {
990     my $temp = $form->{address};
991     $temp =~ s/\\n/<br \/>/;
992     ($form->{co_street}, $form->{co_city}) = split("<br \/>", $temp);
993     $form->{co_city} =~ s/\\n//g;
994   }
995
996   #
997   # Outputformat specific customisation's
998   #
999
1000   my @category_cent = qw(511 861 36 80 971 931 98 96 53 74
1001     85 65 66 61 62 67 63 64 59 69 39 83
1002     Z43 Z45 Z53 Z62 Z65 Z67);
1003
1004   my @category_euro = qw(41 44 49 43 48 51 86 35 77 76 91 97 93
1005     95 94 42 60 45 52 73 84);
1006
1007   if ( $form->{format} eq 'pdf' or $form->{format} eq 'postscript') {
1008
1009     $form->{IN} = "$form->{type}-$form->{year}.tex";
1010     $form->{padding} = "~~";
1011     $form->{bold}    = "\textbf{";
1012     $form->{endbold} = "}";
1013     $form->{br}      = '\\\\';
1014
1015     # Zahlenformatierung für Latex USTVA Formulare
1016
1017     foreach my $number (@category_euro) {
1018       $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '0', '');
1019     }
1020
1021     my ${decimal_comma} = ( $myconfig{numberformat} eq '1.000,00'
1022          or $myconfig{numberformat} eq '1000,00' ) ? ',':'.';
1023
1024     foreach my $number (@category_cent) {
1025       $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '');
1026       $form->{$number} =~ s/${decimal_comma}/~~/g;
1027     }
1028
1029   } elsif ( $form->{format} eq 'html') { # Formatierungen für HTML Ausgabe
1030
1031     $form->{IN} = $form->{type} . '.html';
1032     $form->{padding} = "&nbsp;&nbsp;";
1033     $form->{bold}    = "<b>";
1034     $form->{endbold} = "</b>";
1035     $form->{br}      = "<br>";
1036     $form->{address} =~ s/\\n/\n/g;
1037
1038     foreach $number (@category_cent) {
1039       $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '0');
1040     }
1041     
1042     foreach $number (@category_euro) {
1043       $form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '0', '0');
1044     }
1045
1046   } elsif ( $form->{format} eq 'elsterwinston' ) {
1047
1048     $form->{IN} = 'winston.xml';
1049     
1050     #
1051     # Build Winston filename
1052     #
1053     
1054     my $file = 'U';     # 1. char 'U' = USTVA
1055     $file .= $form->{period};
1056     #4. and 5. char = year modulo 100
1057     $file .= sprintf("%02d", $form->{year} % 100);
1058     #6. to 18. char = Elstersteuernummer
1059     #Beispiel: Steuernummer in Bayern
1060     #111/222/33334 ergibt für UStVA Jan 2004: U01049111022233334
1061     $file .= $form->{elsterFFFF};
1062     $file .= $form->{elstersteuernummer};
1063     #file suffix
1064     $file .= '.xml';
1065     $form->{tmpfile} = "$userspath/$file";
1066
1067     $form->{attachment_filename} = "$file";
1068  
1069     # Zahlenformatierung für Winston
1070
1071     my $temp_numberformat = $myconfig{numberformat};
1072
1073     # Numberformat must be '1000.00' for Winston
1074
1075     $myconfig{numberformat} = '1000.00';
1076
1077     foreach my $number (@category_cent) {
1078       $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '2', '') : '';
1079     }
1080     
1081     foreach my $number (@category_euro) {
1082       $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '0', '') : '';
1083     }
1084     # Re-set Numberformat
1085     $myconfig{numberformat} = $temp_numberformat;
1086
1087   }
1088
1089   elsif ( $form->{format} eq 'elstertaxbird' ) {
1090
1091     $form->{IN} = 'taxbird.txb';
1092
1093     $form->{attachment_filename} = "USTVA-" . $form->{period} 
1094     . sprintf("%02d", $form->{year} % 100) . ".txb";
1095     
1096     $form->{tmpfile} = "$userspath/" . $form->{attachment_filename};
1097
1098     if ($form->{period} =~ /^[4]\d$/ ){
1099       my %periods = ( # Lx => taxbird
1100                    '41' => '12',
1101                    '42' => '13',
1102                    '43' => '14',
1103                    '44' => '15',
1104                  );
1105     
1106       foreach my $quarter ( keys %periods ) {
1107         $form->{taxbird_period} = $periods{$quarter} if ( $form->{period} eq $quarter);
1108       }
1109       
1110       my %lands = ( # Lx => taxbird # TODO: besser als array...
1111                   'Baden Würtemberg'       => '0',
1112                   'Bayern'                 => '1',
1113                   'Berlin'                 => '2',
1114                   'Brandenburg'            => '3',
1115                   'Bremen'                 => '4',
1116                   'Hamburg'                => '5',
1117                   'Hessen'                 => '6',
1118                   'Mecklenburg Vorpommern' => '7',
1119                   'Niedersachsen'          => '8',
1120                   'Nordrhein Westfalen'    => '9',
1121                   'Rheinland Pfalz'        => '10',
1122                   'Saarland'               => '11',
1123                   'Sachsen'                => '12',
1124                   'Sachsen Anhalt'         => '13',
1125                   'Schleswig Holstein'     => '14',
1126                   'Thüringen'              => '15',
1127             );
1128
1129       foreach my $land ( keys %lands ){
1130         $form->{taxbird_land_nr} = $lands{$land} if ($form->{elsterland} eq $land );
1131       }
1132       
1133       $form->{taxbird_steuernummer} = $form->{steuernummer};
1134       $form->{taxbird_steuernummer} =~ s/\D//g;
1135       
1136       $form->{co_zip} = $form->{co_city};
1137       $form->{co_zip} =~ s/\D//g;
1138       $form->{co_city} =~ s/\d//g;
1139       $form->{co_city} =~ s/^\s//g;
1140       
1141       ($form->{co_phone_prefix}, $form->{co_phone}) = split("-", $form->{tel});
1142       
1143       # Numberformatting for Taxbird
1144
1145       my $temp_numberformat = $myconfig{numberformat};
1146       # Numberformat must be '1000.00' for Taxbird ?!
1147
1148       $myconfig{numberformat} = '1000.00';
1149
1150       foreach my $number (@category_cent) {
1151         $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '2', '') : '';
1152       }
1153       
1154       foreach my $number (@category_euro) {
1155         $form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '0', '') : '';
1156       }
1157       # Re-set Numberformat
1158       $myconfig{numberformat} = $temp_numberformat;
1159       
1160     } elsif ($form->{period} =~ /^\d+$/ ) {
1161       $form->{period} =~ s/^0//g;
1162       my $period = $form->{period};
1163       $period * 1;
1164       $period--;
1165       $form->{period} = $period;
1166     } else {
1167       $form->header;
1168       USTVA::error( $locale->text('Wrong Period' ));
1169       exit(0);
1170     }
1171     
1172   } elsif ( $form->{format} eq '' ){ # No format error.
1173     $form->header;
1174     USTVA::error( $locale->text('Application Error. No Format given' ) . "!");
1175     exit(0);
1176  
1177   } else { # All other Formats are wrong
1178     $form->header;
1179     USTVA::error( $locale->text('Application Error. Wrong Format') . ": " . $form->{format} );
1180     exit(0);
1181   }
1182
1183   if ( $form->{period} eq '13' and $form->{format} ne 'html') {
1184     $form->header;
1185     USTVA::info(
1186       $locale->text(
1187       'Yearly taxreport not yet implemented')
1188       . '!');
1189   }
1190     
1191   $form->{templates} = $myconfig{templates};
1192   $form->{templates} = "doc" if ( $form->{type} eq 'help' );
1193
1194   $form->parse_template(\%myconfig, $userspath);
1195
1196   $lxdebug->leave_sub();
1197 }
1198
1199 sub edit {
1200   $lxdebug->enter_sub();
1201
1202   # edit all taxauthority prefs
1203
1204   $form->header;
1205   &get_config($userspath, 'finanzamt.ini');
1206
1207   #&create_steuernummer;
1208
1209   my $land = $form->{elsterland};
1210   my $amt  = $form->{elsterFFFF};
1211
1212   my $callback = '';
1213   $callback =
1214     "$form->{cbscript}?action=edit&login=$form->{cblogin}&path=$form->{cbpath}&root=$form->{cbroot}&rpw=$form->{cbrpw}"
1215     if ($form->{cbscript} ne '' and $form->{cblogin} ne '');
1216
1217   $form->{title} = $locale->text('Tax Office Preferences');
1218   print qq|
1219     <body>
1220     <form name="verzeichnis" method=post action="$form->{script}">
1221      <table width=100%>
1222         <tr>
1223           <th class="listtop">|
1224     . $locale->text('Tax Office Preferences') . qq|</th>
1225         </tr>
1226         <tr>
1227          <td>
1228            <br>
1229            <fieldset>
1230            <legend><b>|
1231     . $locale->text('Local Tax Office Preferences') . qq|</b></legend>
1232   |;
1233
1234   #print qq|$form->{terminal}|;
1235
1236   USTVA::fa_auswahl($land, $amt, &elster_hash());
1237   print qq|
1238            </fieldset>
1239            <br>
1240   |;
1241   my $checked = '';
1242   $checked = "checked" if ($form->{method} eq 'accrual');
1243   print qq|
1244            <fieldset>
1245            <legend><b>| . $locale->text('Taxation') . qq|</b>
1246            </legend>
1247            <input name=method id=accrual class=radio type=radio value="accrual" $checked>
1248            <label for="accrual">| . $locale->text('accrual') . qq|</label>
1249            <br>
1250   |;
1251   $checked = '';
1252   $checked = "checked" if ($form->{method} eq 'cash');
1253   print qq|
1254            <input name=method id=cash class=radio type=radio value="cash" $checked>
1255            <label for="cash">| . $locale->text('cash') . qq|</label>
1256            </fieldset>
1257            <br>
1258            <fieldset>
1259            <legend><b>| . $locale->text('Tax Period') . qq|</b>
1260            </legend>
1261   |;
1262   $checked = '';
1263   $checked = "checked" if ($form->{FA_voranmeld} eq 'month');
1264   print qq|
1265            <input name=FA_voranmeld id=month class=radio type=radio value="month" $checked>
1266            <label for="month">| . $locale->text('month') . qq|</label>
1267            <br>
1268   |;
1269   $checked = '';
1270   $checked = "checked" if ($form->{FA_voranmeld} eq 'quarter');
1271   print qq|
1272            <input name="FA_voranmeld" id=quarter class=radio type=radio value="quarter" $checked>
1273            <label for="quarter">| . $locale->text('quarter') . qq|</label>
1274            <br>
1275   |;
1276   $checked = '';
1277   $checked = "checked" if ($form->{FA_dauerfrist} eq '1');
1278   print qq|
1279            <input name="FA_dauerfrist" id=FA_dauerfrist class=checkbox type=checkbox value="1" $checked>
1280            <label for="">|
1281     . $locale->text('Extension Of Time') . qq|</label>
1282            
1283            </fieldset>
1284            <br>
1285            <fieldset>
1286            <legend><b>| . $locale->text('Tax Consultant') . qq|</b>
1287            </legend>
1288   |;
1289   $checked = '';
1290   $checked = "checked" if ($form->{FA_71} eq 'X');
1291   print qq|
1292           <!-- <input name="FA_71" id=FA_71 class=checkbox type=checkbox value="X" $checked>
1293            <label for="FA_71">|
1294     . $locale->text('Clearing Tax Received (No 71)')
1295     . qq|</label>
1296            <br>
1297            <br>-->
1298            <table>
1299            <tr>
1300            <td>
1301            | . $locale->text('Name') . qq|
1302            </td>
1303            <td>
1304            | . $locale->text('Street') . qq|
1305            </td>
1306            <td>
1307            | . $locale->text('Zip, City') . qq|
1308            </td>
1309            <td>
1310            | . $locale->text('Telephone') . qq|
1311            </td>
1312            </tr>
1313            <tr>
1314            <td>
1315            <input name="FA_steuerberater_name" id=steuerberater size=25 value="$form->{FA_steuerberater_name}">
1316            </td>
1317            <td>
1318            <input name="FA_steuerberater_street" id=steuerberater size=25 value="$form->{FA_steuerberater_street}">
1319            </td>
1320            <td>
1321            <input name="FA_steuerberater_city" id=steuerberater size=25 value="$form->{FA_steuerberater_city}">
1322            </td>
1323            <td>
1324            <input name="FA_steuerberater_tel" id=steuerberater size=25 value="$form->{FA_steuerberater_tel}">
1325            </tr>
1326            </table>
1327            
1328            </fieldset>
1329
1330            <br>
1331            <br>
1332            <hr>
1333            <!--<input type=submit class=submit name=action value="|
1334     . $locale->text('debug') . qq|">-->
1335            |;
1336   print qq|
1337            <input type="button" name="Verweis" value="|
1338     . $locale->text('User Config') . qq|" 
1339             onClick="self.location.href='$callback'">| if ($callback ne '');
1340   print qq|
1341            &nbsp; &nbsp;
1342            <input type=submit class=submit name=action value="|
1343     . $locale->text('continue') . qq|">
1344
1345          </td>
1346        </tr>
1347      </table>
1348   |;
1349
1350   my @variables = qw( steuernummer elsterland elstersteuernummer elsterFFFF);
1351   my $variable  = '';
1352   foreach $variable (@variables) {
1353     print qq|   
1354           <input name=$variable type=hidden value="$form->{$variable}">|;
1355   }
1356   my $steuernummer_new = '';
1357
1358   #<input type=hidden name="steuernummer_new" value="$form->{$steuernummer_new}">
1359   print qq|
1360           <input type=hidden name="callback" value="$callback">
1361           <input type=hidden name="nextsub" value="edit_form">
1362           <input type=hidden name="warnung" value="1">
1363           <input type=hidden name="saved" value="|
1364     . $locale->text('Check Details') . qq|">
1365           <input type=hidden name="path" value=$form->{path}>
1366           <input type=hidden name="login" value=$form->{login}>
1367           <input type=hidden name="password" value=$form->{password}>
1368           <input type=hidden name="warnung" value="0">
1369   |;
1370
1371   @variables = qw(FA_Name FA_Strasse FA_PLZ
1372     FA_Ort FA_Telefon FA_Fax FA_PLZ_Grosskunden FA_PLZ_Postfach FA_Postfach
1373     FA_BLZ_1 FA_Kontonummer_1 FA_Bankbezeichnung_1 FA_BLZ_2
1374     FA_Kontonummer_2 FA_Bankbezeichnung_oertlich FA_Oeffnungszeiten
1375     FA_Email FA_Internet);
1376
1377   foreach $variable (@variables) {
1378     print qq|   
1379           <input name=$variable type=hidden value="$form->{$variable}">|;
1380   }
1381
1382   print qq|
1383    </form>
1384    </body>
1385 |;
1386   $lxdebug->leave_sub();
1387 }
1388
1389 sub edit_form {
1390   $lxdebug->enter_sub();
1391   $form->header();
1392   print qq|
1393     <body>
1394   |;
1395   my $elsterland         = '';
1396   my $elster_amt         = '';
1397   my $elsterFFFF         = '';
1398   my $elstersteuernummer = '';
1399   &get_config($userspath, 'finanzamt.ini')
1400     if ($form->{saved} eq $locale->text('saved'));
1401
1402   # Auf Übergabefehler checken
1403   USTVA::info(  $locale->text('Missing Tax Authoritys Preferences') . "\n"
1404               . $locale->text('USTVA-Hint: Tax Authoritys'))
1405     if (   $form->{elsterFFFF_new} eq 'Auswahl'
1406         || $form->{elsterland_new} eq 'Auswahl');
1407   USTVA::info(  $locale->text('Missing Method!') . "\n"
1408               . $locale->text('USTVA-Hint: Method'))
1409     if ($form->{method} eq '');
1410
1411   # Klären, ob Variablen bereits befüllt sind UND ob veräderungen auf
1412   # der vorherigen Maske stattfanden: $change = 1(in der edit sub,
1413   # mittels get_config)
1414
1415   my $change = $form->{elsterland} eq $form->{elsterland_new}
1416     && $form->{elsterFFFF} eq $form->{elsterFFFF_new} ? '0' : '1';
1417   $change = '0' if ($form->{saved} eq $locale->text('saved'));
1418   my $elster_init = &elster_hash();
1419
1420   #my %elster_init = ();
1421   my %elster_init = %$elster_init;
1422
1423   if ($change eq '1') {
1424
1425     # Daten ändern
1426     $elsterland           = $form->{elsterland_new};
1427     $elsterFFFF           = $form->{elsterFFFF_new};
1428     $form->{elsterland}   = $elsterland;
1429     $form->{elsterFFFF}   = $elsterFFFF;
1430     $form->{steuernummer} = '';
1431     &create_steuernummer;
1432
1433     # rebuild elster_amt
1434     my $amt = '';
1435     foreach $amt (keys %{ $elster_init{ $form->{elsterland} } }) {
1436       $elster_amt = $amt
1437         if ($elster_init{ $form->{elsterland}{$amt} eq $form->{elsterFFFF} });
1438     }
1439
1440     # load the predefined hash data into the FA_* Vars
1441     my @variables = qw(FA_Name FA_Strasse FA_PLZ FA_Ort
1442       FA_Telefon FA_Fax FA_PLZ_Grosskunden FA_PLZ_Postfach
1443       FA_Postfach
1444       FA_BLZ_1 FA_Kontonummer_1 FA_Bankbezeichnung_1
1445       FA_BLZ_2 FA_Kontonummer_2 FA_Bankbezeichnung_oertlich
1446       FA_Oeffnungszeiten FA_Email FA_Internet);
1447
1448     for (my $i = 0; $i <= 20; $i++) {
1449       $form->{ $variables[$i] } =
1450         $elster_init->{$elsterland}->{$elsterFFFF}->[$i];
1451     }
1452
1453   } else {
1454
1455     $elsterland = $form->{elsterland};
1456     $elsterFFFF = $form->{elsterFFFF};
1457
1458   }
1459   my $stnr = $form->{steuernummer};
1460   $stnr =~ s/\D+//g;
1461   my $patterncount   = $form->{patterncount};
1462   my $elster_pattern = $form->{elster_pattern};
1463   my $delimiter      = $form->{delimiter};
1464   my $steuernummer   = '';
1465   $steuernummer = $form->{steuernummer} if ($steuernummer eq '');
1466
1467   #Warnung
1468   my $warnung = $form->{warnung};
1469
1470   #printout form
1471   print qq|
1472    <form name="elsterform" method=post action="$form->{script}">
1473    <table width="100%">
1474        <tr>
1475         <th colspan="2" class="listtop">|
1476     . $locale->text('Tax Office Preferences') . qq|</th>
1477        </tr>
1478        <tr>
1479          <td colspan=2>
1480          <br>
1481   |;
1482   &show_fa_daten;
1483   print qq|
1484          </td>
1485        </tr>
1486        <tr>
1487          <td colspan="2">
1488            <br>
1489            <fieldset>
1490            <legend>
1491            <font size="+1">| . $locale->text('Tax Number') . qq|</font>
1492            </legend>
1493            <br>
1494   |;
1495   $steuernummer =
1496     USTVA::steuernummer_input($form->{elsterland}, $form->{elsterFFFF},
1497                               $form->{steuernummer});
1498   print qq|
1499            </H2><br>
1500            </fieldset>
1501            <br>
1502            <br>
1503            <hr>
1504          </td>
1505       </tr>
1506       <tr>
1507          <td align="left">
1508
1509           <input type=hidden name=lastsub value="edit">
1510           |;
1511   print qq|<input type=submit class=submit name=action value="|
1512     . $locale->text('back') . qq|">|
1513     if ($form->{callback} eq '');
1514
1515   print qq|
1516            <input type="button" name="Verweis" value="|
1517     . $locale->text('User Config') . qq|" 
1518             onClick="self.location.href='$form->{callback}'">|
1519     if ($form->{callback} ne '');
1520
1521   if ($form->{warnung} eq "1") {
1522     print qq|
1523           <input type=hidden name=nextsub value="edit_form">
1524           <input type=submit class=submit name=action value="|
1525       . $locale->text('continue') . qq|">
1526           <input type=hidden name="saved" value="|
1527       . $locale->text('Check Details') . qq|">
1528     |;
1529   } else {
1530     print qq|
1531           <input type=hidden name="nextsub" value="save">
1532           <input type=hidden name="filename" value="finanzamt.ini">
1533           <input type=submit class=submit name=action value="|
1534       . $locale->text('save') . qq|">
1535          |;
1536   }
1537
1538   print qq|
1539          </td>
1540          <td align="right">
1541            <H2 class=confirm>$form->{saved}</H2>
1542          </td>
1543       </tr>
1544   </table>
1545   |;
1546
1547   my @variables = qw(FA_steuerberater_name FA_steuerberater_street
1548     FA_steuerberater_city FA_steuerberater_tel
1549     FA_voranmeld method
1550     FA_dauerfrist FA_71 elster
1551     path login password type elster_init saved
1552   );
1553   my $variable = '';
1554   foreach $variable (@variables) {
1555     print qq|
1556         <input name="$variable" type="hidden" value="$form->{$variable}">|;
1557   }
1558   print qq|
1559           <input type=hidden name="elsterland" value="$elsterland">
1560           <input type=hidden name="elsterFFFF" value="$elsterFFFF">
1561           <input type=hidden name="warnung" value="$warnung">
1562           <input type=hidden name="elstersteuernummer" value="$elstersteuernummer">
1563           <input type=hidden name="steuernummer" value="$stnr">
1564           <input type=hidden name="callback" value="$form->{callback}">
1565   </form>
1566   |;
1567   $lxdebug->leave_sub();
1568 }
1569
1570 sub create_steuernummer {
1571   $lxdebug->enter_sub();
1572   my $part           = $form->{part};
1573   my $patterncount   = $form->{patterncount};
1574   my $delimiter      = $form->{delimiter};
1575   my $elster_pattern = $form->{elster_pattern};
1576
1577   # rebuild steuernummer and elstersteuernummer
1578   # es gibt eine gespeicherte steuernummer $form->{steuernummer}
1579   # und die parts und delimiter
1580
1581   my $h = 0;
1582   my $i = 0;
1583
1584   my $steuernummer_new       = $part;
1585   my $elstersteuernummer_new = $form->{elster_FFFF};
1586   $elstersteuernummer_new .= '0';
1587
1588   for ($h = 1; $h < $patterncount; $h++) {
1589     $steuernummer_new .= qq|$delimiter|;
1590     for (my $i = 1; $i <= length($elster_pattern); $i++) {
1591       $steuernummer_new       .= $form->{"part_$h\_$i"};
1592       $elstersteuernummer_new .= $form->{"part_$h\_$i"};
1593     }
1594   }
1595   if ($form->{steuernummer} ne $steuernummer_new) {
1596     $form->{steuernummer}       = $steuernummer_new;
1597     $form->{elstersteuernummer} = $elstersteuernummer_new;
1598     $form->{steuernummer_new}   = $steuernummer_new;
1599   } else {
1600     $form->{steuernummer_new}       = '';
1601     $form->{elstersteuernummer_new} = '';
1602   }
1603   $lxdebug->leave_sub();
1604 }
1605
1606 sub get_config {
1607   $lxdebug->enter_sub();
1608
1609   my ($userpath, $filename) = @_;
1610   my ($key,      $value)    = '';
1611   open(FACONF, "$userpath/$form->{login}_$filename")
1612     or    #falls Datei nicht vorhanden ist
1613     sub {
1614     open(FANEW, ">$userpath/$form->{login}_$filename")
1615       or $form->error("$userpath/$filename : $!");
1616     close FANEW;
1617     open(FACONF, "$userpath/$form->{login}_$filename")
1618       or $form->error("$userpath/$form->{username}_$filename : $!");
1619     };
1620   while (<FACONF>) {
1621     last if /^\[/;
1622     next if /^(#|\s)/;
1623
1624     # remove comments
1625     s/\s#.*//g;
1626
1627     # remove any trailing whitespace
1628     s/^\s*(.*?)\s*$/$1/;
1629     ($key, $value) = split /=/, $_, 2;
1630
1631     #if ($value eq ' '){
1632     #   $form->{$key} = " " ;
1633     #} elsif ($value ne ' '){
1634     $form->{$key} = "$value";
1635
1636     #}
1637   }
1638   close FACONF;
1639
1640   # Textboxen formatieren: Linebreaks entfernen
1641   #
1642   #$form->{FA_Oeffnungszeiten} =~ s/\\\\n/<br>/g;
1643   $lxdebug->leave_sub();
1644 }
1645
1646 sub save {
1647   $lxdebug->enter_sub();
1648   my $filename = "$form->{login}_$form->{filename}";
1649
1650   #zuerst die steuernummer aus den part, parts_X_Y und delimiter herstellen
1651   create_steuernummer;
1652
1653   # Textboxen formatieren: Linebreaks entfernen
1654   #
1655   $form->{FA_Oeffnungszeiten} =~ s/\r\n/\\n/g;
1656
1657   #URL mit http:// davor?
1658   $form->{FA_Internet} =~ s/^http:\/\///;
1659   $form->{FA_Internet} = 'http://' . $form->{FA_Internet};
1660
1661   my @config = qw(elster elsterland elstersteuernummer steuernummer
1662     elsteramt elsterFFFF FA_Name FA_Strasse
1663     FA_PLZ FA_Ort FA_Telefon FA_Fax FA_PLZ_Grosskunden
1664     FA_PLZ_Postfach FA_Postfach FA_BLZ_1 FA_Kontonummer_1
1665     FA_Bankbezeichnung_1 FA_BLZ_2 FA_Kontonummer_2
1666     FA_Bankbezeichnung_oertlich FA_Oeffnungszeiten
1667     FA_Email FA_Internet FA_voranmeld method FA_steuerberater_name
1668     FA_steuerberater_street FA_steuerberater_city FA_steuerberater_tel
1669     FA_71 FA_dauerfrist);
1670
1671   # Hier kommt dann die Plausibilitätsprüfung der ELSTERSteuernummer
1672   if ($form->{elstersteuernummer} ne '000000000') {
1673     $form->{elster} = '1';
1674     open(CONF, ">$userspath/$filename") or $form->error("$filename : $!");
1675
1676     # create the config file
1677     print CONF qq|# Configuration file for USTVA\n\n|;
1678     my $key = '';
1679     foreach $key (sort @config) {
1680       $form->{$key} =~ s/\\/\\\\/g;
1681       $form->{$key} =~ s/"/\\"/g;
1682
1683       # strip M
1684       $form->{$key} =~ s/\r\n/\n/g;
1685       print CONF qq|$key=|;
1686       if ($form->{$key} ne 'Y') {
1687         print CONF qq|$form->{$key}\n|;
1688       }
1689       if ($form->{$key} eq 'Y') {
1690         print CONF qq|checked \n|;
1691       }
1692     }
1693     print CONF qq|\n\n|;
1694     close CONF;
1695     $form->{saved} = $locale->text('saved');
1696
1697   } else {
1698
1699     $form->{saved} = $locale->text('Choose a Tax Number');
1700   }
1701
1702   &edit_form;
1703   $lxdebug->leave_sub();
1704 }
1705
1706 sub show_fa_daten {
1707   $lxdebug->enter_sub();
1708   my $readonly        = $_;
1709   my $oeffnungszeiten = $form->{FA_Oeffnungszeiten};
1710   $oeffnungszeiten =~ s/\\\\n/\n/g;
1711   print qq|    <br>
1712                <fieldset>
1713                <legend>
1714                <font size="+1">|
1715     . $locale->text('Tax Office') . qq| $form->{FA_Name}</font>
1716                </legend>
1717   |;
1718
1719   #print qq|\n<h4>$form->{FA_Ergaenzung_Name}&nbsp;</h4>
1720   #        | if ( $form->{FA_Ergaenzung_Name} );
1721   print qq|
1722                <table width="100%" valign="top">
1723                <tr>
1724                 <td valign="top">
1725                   <br>
1726                   <fieldset>
1727                     <legend>
1728                     <b>| . $locale->text('Address') . qq|</b>
1729                     </legend>
1730
1731                   <table width="100%">
1732                    <tr>
1733                     <td>
1734                     | . $locale->text('Tax Office') . qq|
1735                     </td>
1736                    </tr>
1737                    <tr>
1738                     <td colspan="2">
1739                      <input name="FA_Name" size="40" title="FA_Name" value="$form->{FA_Name}" $readonly>
1740                     <td>
1741                    </tr>
1742                    <tr>
1743                     <td colspan="2">
1744                      <input name="FA_Strasse" size="40" title="FA_Strasse" value="$form->{FA_Strasse}" $readonly>
1745                     </td width="100%">
1746                    </tr>
1747                    <tr>
1748                     <td width="116px">
1749                      <input name="FA_PLZ" size="10" title="FA_PLZ" value="$form->{FA_PLZ}" $readonly>
1750                     </td>
1751                     <td>
1752                      <input name="FA_Ort" size="20" title="FA_Ort" value="$form->{FA_Ort}" $readonly>
1753                     </td>
1754                   </tr>
1755                   </table>
1756                   </fieldset>
1757                   <br>
1758                   <fieldset>
1759                   <legend>
1760                   <b>| . $locale->text('Contact') . qq|</b>
1761                   </legend>
1762                       | . $locale->text('Telephone') . qq|<br>
1763                       <input name="FA_Telefon" size="40" title="FA_Telefon" value="$form->{FA_Telefon}" $readonly>
1764                       <br>
1765                       <br> 
1766                       | . $locale->text('Fax') . qq|<br>
1767                       <input name="FA_Fax" size="40" title="FA_Fax" value="$form->{FA_Fax}" $readonly>
1768                       <br>
1769                       <br>
1770                       | . $locale->text('Internet') . qq|<br>
1771                       <input name="FA_Email" size="40" title="FA_Email" value="$form->{FA_Email}" $readonly>
1772                       <br>
1773                       <br>
1774                       <input name="FA_Internet" size="40" title="" title="FA_Internet" value="$form->{FA_Internet}" $readonly>
1775                       <br>
1776                   </fieldset>
1777                 </td>
1778                 <td valign="top">
1779                   <br>
1780                   <fieldset>
1781                   <legend>
1782                   <b>| . $locale->text('Openings') . qq|</b>
1783                   </legend>
1784                   <textarea name="FA_Oeffnungszeiten" rows="4" cols="40" $readonly>$oeffnungszeiten</textarea>
1785                   </fieldset>
1786                   <br>
1787   |;
1788   my $FA_1 =
1789     (   $form->{FA_BLZ_1} ne ''
1790      && $form->{FA_Kontonummer_1}     ne ''
1791      && $form->{FA_Bankbezeichnung_1} ne '');
1792   my $FA_2 =
1793     (   $form->{FA_BLZ_2} ne ''
1794      && $form->{FA_Kontonummer_2}            ne ''
1795      && $form->{FA_Bankbezeichnung_oertlich} ne '');
1796
1797   if ($FA_1 && $FA_2) {
1798     print qq|
1799                     <fieldset>
1800                     <legend>
1801                     <b>|
1802       . $locale->text('Bank Connection Tax Office') . qq|</b>
1803                     <legend>
1804                     <table>   
1805                     <tr>
1806                      <td>
1807                         | . $locale->text('Bank') . qq|
1808                         <br>
1809                         <input name="FA_Bankbezeichnung_1" size="30" value="$form->{FA_Bankbezeichnung_1}" $readonly>
1810                         <br>
1811                         <br>
1812                         | . $locale->text('Account Nummer') . qq|
1813                         <br>
1814                         <input name="FA_Kontonummer_1" size="15" value="$form->{FA_Kontonummer_1}" $readonly>
1815                         <br>
1816                         <br> 
1817                         | . $locale->text('Bank Code (long)') . qq|
1818                         <br>
1819                         <input name="FA_BLZ_1" size="15" value="$form->{FA_BLZ_1}" $readonly>
1820                      </td>
1821                      <td>
1822                         | . $locale->text('Bank') . qq|
1823                         <br>
1824                         <input name="FA_Bankbezeichnung_oertlich" size="30" value="$form->{FA_Bankbezeichnung_oertlich}" $readonly>
1825                         <br>
1826                         <br>
1827                         | . $locale->text('Account Nummer') . qq|
1828                         <br>
1829                         <input name="FA_Kontonummer_2" size="15" value="$form->{FA_Kontonummer_2}" $readonly>
1830                         <br>
1831                         <br> 
1832                         | . $locale->text('Bank Code (long)') . qq|
1833                         <br>
1834                         <input name="FA_BLZ_2" size="15" value="$form->{FA_BLZ_2}" $readonly>
1835                      </td>
1836                     </tr>
1837                     </table>
1838                     </fieldset>
1839     |;
1840   } elsif ($FA_1) {
1841     print qq|
1842                     <fieldset>
1843                     <legend>
1844                       <b>|
1845       . $locale->text('Bank Connection Tax Office') . qq|</b>
1846                     <legend>
1847                     | . $locale->text('Account Nummer') . qq|
1848                     <br>
1849                     <input name="FA_Kontonummer_1" size="30" value="$form->{FA_Kontonummer_1}" $readonly>
1850                     <br>
1851                     <br> 
1852                     | . $locale->text('Bank Code (long)') . qq|
1853                     <br>
1854                     <input name="FA_BLZ_1" size="15" value="$form->{FA_BLZ_1}" $readonly>
1855                     <br>
1856                     <br>
1857                     | . $locale->text('Bank') . qq|
1858                     <br>
1859                     <input name="FA_Bankbezeichnung_1" size="15" value="$form->{FA_Bankbezeichnung_1}" $readonly>
1860                     <br>
1861                     </fieldset>
1862     |;
1863   } else {
1864     print qq|
1865                     <fieldset>
1866                     <legend>
1867                       <b>|
1868       . $locale->text('Bank Connection Tax Office') . qq|</b>
1869                     <legend> 
1870                     | . $locale->text('Account Nummer') . qq|
1871                     <br>
1872                     <input name="FA_Kontonummer_2" size="30" value="$form->{FA_Kontonummer_2}" $readonly>
1873                     <br>
1874                     <br> 
1875                     | . $locale->text('Bank Code (long)') . qq|
1876                     <br>
1877                     <input name="FA_BLZ_2" size="15" value="$form->{FA_BLZ_2}" $readonly>
1878                     <br>
1879                     <br>
1880                     | . $locale->text('Bank') . qq|
1881                     <br>
1882                     <input name="FA_Bankbezeichnung_oertlich" size="15" value="$form->{FA_Bankbezeichnung_oertlich}" $readonly>
1883                     </fieldset>
1884     |;
1885   }
1886   print qq|
1887                  </td>
1888                </tr>              
1889           </table>
1890   </fieldset>
1891   |;
1892   $lxdebug->leave_sub();
1893 }
1894
1895
1896 sub continue {
1897   $lxdebug->enter_sub();
1898
1899   # allow Symbolic references just here:
1900   no strict 'refs';
1901   &{ $form->{nextsub} };
1902   use strict 'refs';
1903   $lxdebug->leave_sub();
1904 }
1905
1906 sub back {
1907   $lxdebug->enter_sub();
1908   &{ $form->{lastsub} };
1909   $lxdebug->leave_sub();
1910 }
1911
1912 sub elster_hash {
1913   $lxdebug->enter_sub();
1914   my $finanzamt = USTVA::query_finanzamt(\%myconfig, \%$form);
1915   $lxdebug->leave_sub();
1916   return $finanzamt;
1917 }
1918
1919