unstable-Zweig als Kopie des "alten" trunks erstellt.
[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
30 #use strict; 
31 #no strict 'refs';
32 #use diagnostics;
33 #use warnings FATAL=> 'all';
34 #use vars qw($locale $form %myconfig);
35 #our ($myconfig);
36 #use CGI::Carp "fatalsToBrowser";
37
38 use SL::PE;
39 use SL::RP;
40 use SL::USTVA;
41 use SL::User;
42 1;
43
44 # this is for our long dates
45 # $locale->text('January')
46 # $locale->text('February')
47 # $locale->text('March')
48 # $locale->text('April')
49 # $locale->text('May ')
50 # $locale->text('June')
51 # $locale->text('July')
52 # $locale->text('August')
53 # $locale->text('September')
54 # $locale->text('October')
55 # $locale->text('November')
56 # $locale->text('December')
57
58 # this is for our short month
59 # $locale->text('Jan')
60 # $locale->text('Feb')
61 # $locale->text('Mar')
62 # $locale->text('Apr')
63 # $locale->text('May')
64 # $locale->text('Jun')
65 # $locale->text('Jul')
66 # $locale->text('Aug')
67 # $locale->text('Sep')
68 # $locale->text('Oct')
69 # $locale->text('Nov')
70 # $locale->text('Dec')
71 #############################
72
73 sub report {
74   $lxdebug->enter_sub();
75   my $myconfig = \%myconfig;
76   use CGI;
77   $form->{title} = $locale->text('UStVA');
78   $form->{kz10}='' ; #Berichtigte Anmeldung? Ja =1 
79 #  $accrual = ($eur) ? "" : "checked";
80 #  $cash = ($eur) ? "checked" : "";
81   my $year = '';
82   my $null = '';
83   ($null,$null,$null,$null,$null,$year,$null,$null,$null) = localtime();
84   $year += 1900;
85   
86   my $department = '';
87   local $hide ='';  
88   $form->header;
89  
90   print qq|
91 <body>
92
93 <form method=post action=$form->{script}>
94
95 <input type=hidden name=title value="$form->{title}">
96
97 <table width=100%>
98   <tr>
99     <th class=listtop>$form->{title}</th>
100   </tr>
101   <tr height="5"></tr>
102   <tr>
103     <td>
104       <table>
105       $department
106 |;
107   # Hier Aufruf von get_config aus bin/mozilla/fa.pl zum 
108   # Einlesen der Finanzamtdaten
109   &get_config($userspath, 'finanzamt.ini');
110   
111   my @a = qw(signature name company address businessnumber tel fax email
112           company_street company_city company_email);
113   map { $form->{$_} = $myconfig->{$_} } @a;
114   
115   my $oeffnungszeiten = $form->{FA_Oeffnungszeiten} ;
116   $oeffnungszeiten =~ s/\\\\n/<br>/g;  
117   print qq|
118         <tr >
119           <td width="50%" align="left" valign="top">
120           <fieldset>
121           <legend>
122           <b>|.$locale->text('Firma').qq|</b>
123           </legend>
124   |;
125   if ( $form->{company} ne '' ){
126     print qq|<h3>$form->{company}</h3>\n|;
127   } else 
128   {
129     print qq|
130             <a href=am.pl?path=$form->{path}&action=config&level=Programm--Preferences&login=$form->{login}&password=$form->{password}>
131             |.$locale->text('Kein Firmenname hinterlegt!').qq|</a><br>
132     |;
133   }
134   
135   #klären, ob $form->{company_street|_address} gesetzt sind
136   ###
137   if ( $form->{address} ne '' ) {
138         my $temp = $form->{address};
139         $temp =~ s/\\n/<br \/>/;
140         print qq|$temp|;
141         ($form->{company_street}, $form->{company_city}) = split("<br \/", $temp);
142     } elsif ($form->{address} eq '' and ($form->{company_street} ne '' and $form->{company_city} ne '' ) ) {
143               print qq|$form->{company_street}<br>\n| if ($form->{company_street} ne '');
144               print qq|$form->{company_city}\n| if ($form->{company_city} ne '');
145     } elsif ($form->{company_street} eq '' or $form->{company_city} eq '') {
146           print qq|
147           <a href=am.pl?path=$form->{path}&action=config&level=Programm--Preferences&login=$form->{login}&password=$form->{password}>
148           |.$locale->text('Keine Firmenadresse hinterlegt!').qq|</a>\n|;
149     }
150   
151   print qq|
152           <br>
153           <br>
154           |.$locale->text('Tel.: ').qq|
155           $form->{tel}
156           <br>
157           |.$locale->text('Fax.: ').qq|
158           $form->{fax}    
159           <br>
160           <br>
161           $form->{email}          
162           <br>
163           <br>
164           |.$locale->text('Steuernummer: ').qq|
165   |;
166           
167   if ($form->{steuernummer} ne ''){
168     print qq|$form->{steuernummer}|;
169   } else {
170     print qq|
171           <a href="ustva.pl?path=$form->{path}&action=edit&level=Programm--Finanzamteinstellungen&login=$form->{login}&password=$form->{password}">
172           Keine Steuernummer hinterlegt!</a><br>|;
173   }
174   print qq|
175           <!--<br>
176           |.$locale->text('ELSTER-Steuernummer: ').qq|
177           $form->{elstersteuernummer}
178           <br>-->
179           <br>
180
181           </fieldset>
182           <br>
183   |;
184   if ($form->{FA_steuerberater_name} ne ''){
185     print qq|
186           <fieldset>
187           <legend>
188             <input checked="checked" title="|.$locale->text('Beraterdaten in UStVA übernehmen?').qq|" name="FA_steuerberater" id=steuerberater class=checkbox type=checkbox value="1">&nbsp;
189             <b>|.$locale->text('Steuerberater/-in').qq|</b>
190             </legend>
191             
192             $form->{FA_steuerberater_name}<br>
193             $form->{FA_steuerberater_street}<br>
194             $form->{FA_steuerberater_city}<br>
195             Tel: $form->{FA_steuerberater_tel}<br>
196           </fieldset>
197           <br>
198     |;
199   }
200   print qq|
201           <fieldset>
202           <legend>
203           <b>|.$locale->text('Voranmeldezeitraum').qq|</b>
204           </legend>
205   |;
206   &ustva_vorauswahl();
207           
208   my @years = ();        
209   if ( not defined $form->{all_years} ) {
210     # accounting years if SQL-Ledger Version < 2.4.1
211 #    $year = $form->{year} * 1;
212     @years = sort {$b <=> $a} (2000..($year));
213     $form->{all_years} = \@years;
214   }
215   map { $form->{selectaccountingyear} .= qq|<option>$_\n| } @{ $form->{all_years} };
216   print qq|
217           <select name=year title="|.$locale->text('Year').qq|">
218   |;
219   my $key = '';
220   foreach $key ( @years ){
221     print qq|<option |;
222     print qq|selected| if ($key eq $form->{year});
223     print qq| >$key</option>
224     |;
225   }
226  
227   
228   my $voranmeld = $form->{FA_voranmeld};
229   print qq|             </select>|;
230   my $checked = '';
231   $checked = "checked" if ( $form->{kz10} eq '1' );
232   print qq|
233            <input name="FA_10" id=FA_10 class=checkbox type=checkbox value="1" $checked title = "|.$locale->text('Ist dies eine berichtigte Anmeldung? (Nr. 10/Zeile 15 Steuererklärung)').qq|">
234             |.$locale->text('Berichtigte Anmeldung').qq|
235           <br>
236   |;
237   if ($voranmeld ne ''){
238   print qq|
239           <br>
240           |.$locale->text($voranmeld).qq|
241   |;
242   print qq| mit Dauerfristverlängerung| if ( $form->{FA_dauerfrist} eq '1');
243   print qq|
244
245       <br>
246   |;
247   }
248   if ($form->{method} ne '' ){
249     print qq||.$locale->text('Method').qq|: |;
250     print qq||.$locale->text('accrual').qq|| if ($form->{method} eq 'accrual');
251     print qq||.$locale->text('cash').qq|| if ($form->{method} eq 'cash');
252   }
253   print qq|
254           </fieldset>
255
256     </td>|;
257     
258   if ($form->{FA_Name} ne ''){  
259     print qq|
260     <td width="50%" valign="top">         
261           <fieldset>
262           <legend>
263           <b>|.$locale->text('Finanzamt').qq|</b>
264           </legend>
265           <h3>$form->{FA_Name}</h2>
266     |;
267           
268     #if ($form->{FA_Ergaenzung_Name ne ''}){
269     #  print qq|
270     #          $form->{FA_Ergaenzung_Name}&nbsp
271     #          <br>
272     #  |;
273     #}
274     print qq|
275           $form->{FA_Strasse}
276           <br>
277           $form->{FA_PLZ}&nbsp; &nbsp;$form->{FA_Ort}
278           <br>
279           <br>
280           |.$locale->text('Tel. : ').qq|
281           $form->{FA_Telefon}
282           <br> 
283           |.$locale->text('Fax. : ').qq|
284           $form->{FA_Fax}
285           <br>
286           <br>
287           <a href="mailto:$form->{FA_Email}?subject=|.CGI::escape("Steuer Nr: $form->{steuernummer}:").qq|&amp;body=|.CGI::escape("Sehr geehrte Damen und Herren,\n\n\nMit freundlichen Grüßen\n\n").CGI::escape($form->{signature}).qq|">
288             $form->{FA_Email}
289           </a>
290           <br>
291           <a href="$form->{FA_Internet}">
292             $form->{FA_Internet}
293           </a>
294           <br>
295           <br>
296           |.$locale->text('Öffnungszeiten').qq|
297           <br>
298           $oeffnungszeiten
299           <br>
300    |;
301              
302    my $FA_1= ($form->{FA_BLZ_1} ne '' && 
303           $form->{FA_Kontonummer_1} ne '' && 
304           $form->{FA_Bankbezeichnung_1} ne '');
305    my $FA_2= ($form->{FA_BLZ_2} ne '' &&
306           $form->{FA_Kontonummer_2} ne '' && 
307           $form->{FA_Bankbezeichnung_oertlich} ne '');
308
309    if ( $FA_1 && $FA_2){
310      print qq|
311           <br>
312           |.$locale->text('Bankverbindungen').qq|
313           <table>
314           <tr>
315           <td>
316           $form->{FA_Bankbezeichnung_1}
317           <br>                  
318           |.$locale->text('Konto: ').qq|
319           $form->{FA_Kontonummer_1}
320           <br>
321           |.$locale->text('BLZ: ').qq|
322           $form->{FA_BLZ_1}
323           </td>
324           <td>
325           $form->{FA_Bankbezeichnung_oertlich}
326           <br>
327           |.$locale->text('Konto: ').qq|
328           $form->{FA_Kontonummer_2}
329           <br> 
330           |.$locale->text('BLZ: ').qq|
331           $form->{FA_BLZ_2}
332           </td>
333           </tr>
334           </table>
335           <br>|;
336    } elsif ( $FA_1 ) {
337      print qq|
338           <br>
339           |.$locale->text('Bankverbindung').qq|
340           <br>
341           <br>
342           $form->{FA_Bankbezeichnung_1}
343           <br>                  
344           |.$locale->text('Konto: ').qq|
345           $form->{FA_Kontonummer_1}
346           <br> 
347           |.$locale->text('BLZ: ').qq|
348           $form->{FA_BLZ_1}          <br>
349           <br>|;
350    } elsif ( $FA_2 ) {
351      print qq|
352           <br>
353           |.$locale->text('Bankverbindung').qq|
354           <br>
355           <br>
356           $form->{FA_Bankbezeichnung_oertlich}
357           <br>                  
358           |.$locale->text('Konto: ').qq|
359           $form->{FA_Kontonummer_2}
360           <br> 
361           |.$locale->text('BLZ: ').qq|
362           $form->{FA_BLZ_2}
363      |;                     
364    }
365    print qq|
366
367       </fieldset>
368       <br>
369       <fieldset>
370       <legend>
371       <b>|.$locale->text('Ausgabeformat').qq|</b>
372       </legend>
373   |;
374         
375   &show_options;
376   my $ausgabe = '1';    
377   print qq|
378           </fieldset>
379       |;
380       
381
382
383    # Stichtag der nächsten USTVA berechnen
384    # 
385    # ($stichtag, $tage_bis, $ical) = FA->stichtag($today[dd.mm.yyyy], 
386    #                                              $FA_dauerfrist[1,0],
387    #                                              $FA_voranmeld[month, quarter])
388    #$tmpdateform= $myconfig{dateformat};
389    #  $myconfig{dateformat}= "dd.mm.yyyy";
390    #  $form->{today} = $form->datetonum($form->current_date(\%myconfig), \%myconfig);
391    #  ($stichtag, $description, $tage_bis, $ical) = FA::stichtag($form->{today}, $form->{FA_dauerfrist},$form->{FA_voranmeld});
392    #   $form->{today} = $form->date($stichtag, \%myconfig );
393    #$myconfig{dateformat}= $tmpdateform;
394
395
396    #print qq|
397    #   <br>
398    #   <br>
399    #   <fieldset>
400    #    <label>
401    #    |.$locale->text('Anstehende Voranmeldungen').qq|
402    #    </label>
403    #     <h2 class="confirm">$stichtag<h2>
404    #     <h3>$description</h3>
405    #     <h4>$form->{today}</h4>
406    #    
407    #   </fieldset>|;
408
409    } else {
410      print qq|
411      <td width="50%" valign="bottom">
412      <fieldset>
413      <legend>
414      <b>|.$locale->text('Hinweise').qq|</b>
415      </legend>
416       <h2 class="confirm">Die Ausgabefunktionen sind wegen fehlender Daten deaktiviert.</h2>
417       <h3>Hilfe:</h3>
418       <ul>
419       <li><a href="ustva.pl?path=$form->{path}&action=edit&level=Programm--Finanzamteinstellungen&login=$form->{login}&password=$form->{password}">
420       Bitte 'Einstellungen' wählen um die Erweiterten UStVa Funktionen nutzen zu können.</a></li>
421       <br>
422       <li><a href="am.pl?path=$form->{path}&action=config&level=Programm--Preferences&login=$form->{login}&password=$form->{password}">
423       Firmendaten können bei den Benutzereinstellungen verändert werden.</a></li>
424       </ul>
425       </fieldset>
426      |;
427       my  $ausgabe='';     
428       $hide = q|disabled="disabled"|;
429    }
430
431
432
433    print qq|
434       </td>
435     </tr>
436   |;
437  #}# end if report = ustva
438   
439
440
441   print qq|
442       </table>
443      </td>
444     </tr>
445     <tr>
446      <td><hr size="3" noshade></td>
447     </tr>
448   </table>
449
450   <br>
451   <input type="hidden" name="address" value="$form->{address}">
452   <input type="hidden" name="reporttype" value="custom">
453   <input type="hidden" name="company_street" value="$form->{company_street}">
454   <input type="hidden" name="company_city" value="$form->{company_city}">
455   <input type="hidden" name="path" value="$form->{path}">
456   <input type="hidden" name="login" value="$form->{login}">
457   <input type="hidden" name="password" value="$form->{password}">
458   <table width="100%">
459   <tr>
460    <td align="left">
461      <input type=hidden name=nextsub value=generate_ustva>
462      <input $hide type=submit class=submit name=action value="|.$locale->text('Show').qq|">
463      <input type=submit class=submit name=action value="|.$locale->text('Config').qq|">
464    </td>
465    <td align="right">
466
467     <!--</form>
468     <form action="doc/ustva.html" method="get">
469     -->
470        <input type=submit class=submit name=action value="|.$locale->text('Help').qq|">
471    <!-- </form>-->
472    </td>
473   </tr>
474   </table>
475   |;
476
477   print qq|
478
479   </body>
480   </html>
481   |;
482
483   $lxdebug->leave_sub();
484 }
485
486 #############################
487
488 sub help {
489   $lxdebug->enter_sub();
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   #$form->{templates} = $tmp;
498   $lxdebug->leave_sub();
499 }
500
501
502 sub show { 
503   $lxdebug->enter_sub();
504 #&generate_ustva();
505 no strict 'refs';
506 &{$form->{nextsub}} ;
507 use strict 'refs';
508   $lxdebug->leave_sub();
509 };
510
511 sub ustva_vorauswahl {
512   $lxdebug->enter_sub();
513  #Aktuelles Datum zerlegen:
514  $locale->date(\%myconfig, $form->current_date(\%myconfig,'0','0'), 0)=~ /(\d\d).(\d\d).(\d\d\d\d)/;
515  #$locale->date($myconfig, $form->current_date($myconfig), 0)=~ /(\d\d).(\d\d).(\d\d\d\d)/;
516  $form->{day}= $1;
517  $form->{month}= $2;
518  $form->{year}= $3;
519  my $sel='';
520  my $yymmdd='';
521  # Testdaten erzeugen:
522  #$form->{day}= '11';
523  #$form->{month}= '01';
524  #$form->{year}= 2004;
525  print qq|
526      <input type=hidden name=day value=$form->{day}>
527      <input type=hidden name=month value=$form->{month}>
528      <input type=hidden name=yymmdd value=$yymmdd>
529      <input type=hidden name=sel value=$sel>
530  |;
531  
532  if ($form->{FA_voranmeld} eq 'month'){
533    # Vorauswahl bei monatlichem Voranmeldungszeitraum 
534    print qq|
535      <select name="duetyp" id=zeitraum title="|.$locale->text('Hier den Berechnungszeitraum auswählen...').qq|">
536    |;
537
538    my %liste =  ('01' => 'January', 
539               '02' => 'February', 
540               '03' => 'March', 
541               '04' => 'April',
542               '05' => 'May',
543               '06' => 'June',
544               '07' => 'July',
545               '08' => 'August',
546               '09' => 'September',
547               '10' => 'October',
548               '11' => 'November',
549               '12' => 'December');
550
551    my $yy = $form->{year}* 10000;
552    $yymmdd = "$form->{year}$form->{month}$form->{day}" * 1;
553    $sel='';
554    my $dfv = '0'; # Offset für Dauerfristverlängerung
555    #$dfv = '100' if ($form->{FA_dauerfrist} eq '1');
556     
557    SWITCH: {
558         $yymmdd <= ($yy + 110 + $dfv) && do {   
559                                         $form->{year} = $form->{year} - 1;
560                                         $sel='12';
561                                         last SWITCH;
562                                         };    
563         $yymmdd <= ($yy + 210 + $dfv) && do {
564                                         $sel='01';
565                                         last SWITCH;
566                                         };
567         $yymmdd <= ($yy + 310 + $dfv) && do {
568                                         $sel='02';
569                                         last SWITCH;
570                                         };                                      
571         $yymmdd <= ($yy + 410 + $dfv) && do {
572                                         $sel='03';
573                                         last SWITCH;
574                                         };                                      
575         $yymmdd <= ($yy + 510 + $dfv) && do {
576                                         $sel='04';
577                                         last SWITCH;
578                                         };
579         $yymmdd <= ($yy + 610 + $dfv) && do {
580                                         $sel='05';
581                                         last SWITCH;
582                                         };                                      
583         $yymmdd <= ($yy + 710 + $dfv) && do {
584                                         $sel='06';
585                                         last SWITCH;
586                                         };                                      
587         $yymmdd <= ($yy + 810 + $dfv) && do {
588                                         $sel='07';
589                                         last SWITCH;
590                                         };
591         $yymmdd <= ($yy + 910 + $dfv) && do {
592                                         $sel='08';
593                                         last SWITCH;
594                                         };                                      
595         $yymmdd <= ($yy + 1010 + $dfv) && do {
596                                         $sel='09';
597                                         last SWITCH;
598                                         };                                      
599         $yymmdd <= ($yy + 1110 + $dfv) && do {
600                                         $sel='10';
601                                         last SWITCH;
602                                         };
603         $yymmdd <= ($yy + 1210) && do {
604                                         $sel='11';
605                                         last SWITCH;
606                                         };                                      
607         $yymmdd <= ($yy + 1231) && do {
608                                         $sel='12';
609                                         last SWITCH;
610                                         };
611
612    };
613    my $key = '';
614    foreach $key ( sort keys %liste ){
615    my $selected = '';
616    $selected = 'selected' if ( $sel eq $key );
617    print qq|
618          <option value="$key" $selected>|.$locale->text("$liste{$key}").qq|</option>
619          
620    |;
621  }
622  print qq|</select>|;
623
624  } elsif ($form->{FA_voranmeld} eq 'quarter'){
625    # Vorauswahl bei quartalsweisem Voranmeldungszeitraum 
626    my %liste = ( 'A' => '1.',
627                  'B' => '2.',
628                  'C' => '3.',
629                  'D' => '4.',
630                );
631
632    my $yy = $form->{year}* 10000;
633    $yymmdd = "$form->{year}$form->{month}$form->{day}" * 1;
634    $sel='';
635    my $dfv = ''; # Offset für Dauerfristverlängerung
636    $dfv = '100' if ($form->{FA_dauerfrist} eq '1');
637     
638    SWITCH: {
639         $yymmdd <= ($yy + 110 + $dfv) && do {   
640                                         $form->{year} = $form->{year} - 1;
641                                         $sel='D';
642                                         last SWITCH;
643                                         };    
644         $yymmdd <= ($yy + 410 + $dfv) && do {
645                                         $sel='A';
646                                         last SWITCH;
647                                         };
648         $yymmdd <= ($yy + 710 + $dfv) && do {
649                                         $sel='B';
650                                         last SWITCH;
651                                         };                                      
652         $yymmdd <= ($yy + 1010 + $dfv) && do {
653                                         $sel='C';
654                                         last SWITCH;
655                                         };                                      
656         $yymmdd <= ($yy + 1231) && do    {
657                                         $sel='D';
658                                         };
659    };
660
661    print qq|<select id="zeitraum" name="duetyp" title="|.$locale->text('Select a period').qq|" >|;
662    my $key = '';
663    foreach $key ( sort keys %liste ){
664      my $selected = '';
665      $selected = 'selected' if ( $sel eq $key );
666      print qq|
667          <option value="$key" $selected>$liste{$key} |.$locale->text('Quarter').qq|</option>
668      |;
669     }
670    print qq|\n</select>
671    |;
672
673  } else {
674  
675    # keine Vorauswahl bei Voranmeldungszeitraum 
676    print qq|<select id="zeitraum" name="duetyp" title="|.$locale->text('Select a period').qq|" >|;
677  
678    my %listea = ( 'A' => '1.',
679                'B' => '2.',
680                'C' => '3.',
681                'D' => '4.',
682                );
683              
684    my %listeb = ( '01' => 'January', 
685                '02' => 'February', 
686                '03' => 'March', 
687                '04' => 'April',
688                '05' => 'May',
689                '06' => 'June',
690                '07' => 'July',
691                '08' => 'August',
692                '09' => 'September',
693                '10' => 'October',
694                '11' => 'November',
695                '12' => 'December',
696              );
697    my $key = '';
698    foreach $key ( sort keys %listea ){
699      print qq|
700          <option value="$key">$listea{$key} |.$locale->text('Quarter').qq|</option>
701          
702      |;
703    }
704
705    foreach $key ( sort keys %listeb ){
706      print qq|
707          <option value="$key">|.$locale->text("$listeb{$key}").qq|</option>
708          
709      |;
710    }
711    print qq|</select>|;
712  }
713   $lxdebug->leave_sub();
714 }
715
716
717 sub config { 
718   $lxdebug->enter_sub();
719   edit();
720   $lxdebug->leave_sub();
721 }
722
723
724
725 sub debug {
726   $form->debug();
727 }
728     
729 sub show_options {
730   $lxdebug->enter_sub();
731 #  $form->{PD}{$form->{type}} = "selected";
732 #  $form->{DF}{$form->{format}} = "selected";
733 #  $form->{OP}{$form->{media}} = "selected";
734 #  $form->{SM}{$form->{sendmode}} = "selected";
735   my $type = qq|      <input type=hidden name="type" value="ustva">|;
736   my $media = qq|      <input type=hidden name="media" value="screen">|;
737   my $format = qq|       <option value=html selected>|.$locale->text('Vorschau').qq|</option>|;
738   if ($latex) {
739     $format .= qq|    <option value=pdf>|.$locale->text('UStVA als PDF-Dokument').qq|</option>|;
740   }
741   
742     #my $disabled= qq|disabled="disabled"|; 
743   #$disabled='' if ($form->{elster} eq '1' );
744   if ($form->{elster} eq '1'){
745     $format .= qq|<option value=elster>|.$locale->text('ELSTER Export nach Winston').qq|</option>|;
746   }
747   #$format .= qq|<option value=elster>|.$locale->text('ELSTER Export nach Winston').qq|</option>|;
748   print qq|
749     $type
750     $media
751     <select name=format title = "|.$locale->text('Ausgabeformat auswählen...').qq|">$format</select>
752   |;
753   $lxdebug->leave_sub();
754 }
755
756 sub generate_ustva {
757   $lxdebug->enter_sub();
758   # Aufruf von get_config aus bin/mozilla/ustva.pl zum 
759   # Einlesen der Finanzamtdaten aus finanzamt.ini
760
761   get_config($userspath, 'finanzamt.ini');
762
763   # form vars initialisieren
764   my @anmeldungszeitraum = qw('0401' '0402' '0403' '0404' '0405' '0405' '0406' '0407' '0408' '0409' '0410' '0411' '0412' '0441' '0442' '0443' '0444');
765   my $item = '';
766   foreach $item (@anmeldungszeitraum) {
767     $form->{$item} = "";
768   }
769   if ($form->{reporttype} eq "custom"){
770     #forgotten the year --> thisyear
771     if ($form->{year}  !~ m/^\d\d\d\d$/ ) {
772       $locale->date(\$myconfig, $form->current_date(\$myconfig), 0)=~ /(\d\d\d\d)/;
773       $form->{year}= $1;
774     }
775     #yearly report
776     if ($form->{duetyp} eq "13"   ){
777       $form->{fromdate}="1.1.$form->{year}";
778       $form->{todate}="31.12.$form->{year}";
779     }
780     #Quater reports    
781     if ($form->{duetyp} eq "A"   ){
782       $form->{fromdate}="1.1.$form->{year}";
783       $form->{todate}="31.3.$form->{year}";
784       $form->{'0441'} = "X";
785     }
786     if ($form->{duetyp} eq "B"   ){
787       $form->{fromdate}="1.4.$form->{year}";
788       $form->{todate}="30.6.$form->{year}";
789       $form->{'0442'} = "X";
790     }
791     if ($form->{duetyp} eq "C"   ){
792       $form->{fromdate}="1.7.$form->{year}";
793       $form->{todate}="30.9.$form->{year}";
794       $form->{'0443'} = "X";
795     }
796     if ($form->{duetyp} eq "D"   ){
797       $form->{fromdate}="1.10.$form->{year}";
798       $form->{todate}="31.12.$form->{year}";
799       $form->{'0444'} = "X";
800     }
801  
802     #Monthly reports
803     SWITCH: {
804         $form->{duetyp} eq "01" && do {
805                                         $form->{fromdate}="1.1.$form->{year}";
806                                         $form->{todate}="31.1.$form->{year}";
807                                         $form->{'0401'} = "X";
808                                         last SWITCH;
809                                         };
810         $form->{duetyp} eq "02" && do {
811                                         $form->{fromdate}="1.2.$form->{year}";
812                                         #this works from 1901 to 2099, 1900 and 2100 fail.
813                                         my $leap=($form->{year} % 4 == 0) ? "29" : "28";
814                                         $form->{todate}="$leap.2.$form->{year}";
815                                         $form->{"0402"} = "X";
816                                         last SWITCH;
817                                         };
818         $form->{duetyp} eq "03" && do {
819                                         $form->{fromdate}="1.3.$form->{year}";
820                                         $form->{todate}="31.3.$form->{year}";
821                                         $form->{"0403"} = "X";
822                                         last SWITCH;
823                                         };
824         $form->{duetyp} eq "04" && do {
825                                         $form->{fromdate}="1.4.$form->{year}";
826                                         $form->{todate}="30.4.$form->{year}";
827                                         $form->{"0404"} = "X";
828                                         last SWITCH;
829                                         };
830         $form->{duetyp} eq "05" && do {
831                                         $form->{fromdate}="1.5.$form->{year}";
832                                         $form->{todate}="31.5.$form->{year}";
833                                         $form->{"0405"} = "X";
834                                         last SWITCH;
835                                         };
836         $form->{duetyp} eq "06" && do {
837                                         $form->{fromdate}="1.6.$form->{year}";
838                                         $form->{todate}="30.6.$form->{year}";
839                                         $form->{"0406"} = "X";
840                                         last SWITCH;
841                                         };
842         $form->{duetyp} eq "07" && do {
843                                         $form->{fromdate}="1.7.$form->{year}";
844                                         $form->{todate}="31.7.$form->{year}";
845                                         $form->{"0407"} = "X";
846                                         last SWITCH;
847                                         };
848         $form->{duetyp} eq "08" && do {
849                                         $form->{fromdate}="1.8.$form->{year}";
850                                         $form->{todate}="31.8.$form->{year}";
851                                         $form->{"0408"} = "X";
852                                         last SWITCH;
853                                         };
854         $form->{duetyp} eq "09" && do {
855                                         $form->{fromdate}="1.9.$form->{year}";
856                                         $form->{todate}="30.9.$form->{year}";
857                                         $form->{"0409"} = "X";
858                                         last SWITCH;
859                                         };
860         $form->{duetyp} eq "10" && do {
861                                         $form->{fromdate}="1.10.$form->{year}";
862                                         $form->{todate}="31.10.$form->{year}";
863                                         $form->{"0410"} = "X";
864                                         last SWITCH;
865                                         };
866         $form->{duetyp} eq "11" && do {
867                                         $form->{fromdate}="1.11.$form->{year}";
868                                         $form->{todate}="30.11.$form->{year}";
869                                         $form->{"0411"} = "X";
870                                         last SWITCH;
871                                         };
872         $form->{duetyp} eq "12" && do {
873                                         $form->{fromdate}="1.12.$form->{year}";
874                                         $form->{todate}="31.12.$form->{year}";
875                                         $form->{"0412"} = "X";
876                                         last SWITCH;
877                                         };
878         }
879    }
880   #$myconfig = \%myconfig;
881   RP->ustva(\%myconfig, \%$form);
882
883   #??($form->{department}) = split /--/, $form->{department};
884   
885   $form->{period} = $locale->date(\%myconfig, $form->current_date(\%myconfig), 1, 0, 0);
886   $form->{todate} = $form->current_date($myconfig) unless $form->{todate};
887
888   # if there are any dates construct a where
889   if ($form->{fromdate} || $form->{todate}) {
890     
891     unless ($form->{todate}) {
892       $form->{todate} = $form->current_date($myconfig);
893     }
894
895     my $longtodate = $locale->date($myconfig, $form->{todate}, 1, 0, 0);
896     my $shorttodate = $locale->date($myconfig, $form->{todate}, 0, 0, 0);
897     
898     my $longfromdate = $locale->date($myconfig, $form->{fromdate}, 1, 0, 0);
899     my $shortfromdate = $locale->date($myconfig, $form->{fromdate}, 0, 0, 0);
900     
901     $form->{this_period} = "$shortfromdate<br>\n$shorttodate";
902     $form->{period} = $locale->text('for Period').qq|<br>\n$longfromdate |.$locale->text('bis').qq| $longtodate|;
903   }
904
905   if ($form->{comparefromdate} || $form->{comparetodate}) {
906     my $longcomparefromdate = $locale->date(\%myconfig, $form->{comparefromdate}, 1, 0, 0);
907     my $shortcomparefromdate = $locale->date(\%myconfig, $form->{comparefromdate}, 0, 0, 0);
908     
909     my $longcomparetodate = $locale->date(\%myconfig, $form->{comparetodate}, 1, 0, 0);
910     my $shortcomparetodate = $locale->date(\%myconfig, $form->{comparetodate}, 0, 0, 0);
911     
912     $form->{last_period} = "$shortcomparefromdate<br>\n$shortcomparetodate";
913     $form->{period} .= "<br>\n$longcomparefromdate ".$locale->text('bis').qq| $longcomparetodate|;
914   }
915
916   $form->{Datum_heute} = $locale->date(\%myconfig, $form->current_date(\%myconfig), 0, 0, 0);
917
918   # setup variables for the form
919   my @a = ();
920   @a = qw(company businessnumber tel fax email company_email);
921   map { $form->{$_} = $myconfig{$_} } @a;
922   
923   if ( $form->{address} ne '' ) {
924         my $temp = $form->{address};
925         $temp =~ s/\\n/<br \/>/;
926         ($form->{company_street}, $form->{company_city}) = split("<br \/>", $temp);
927   }
928   
929   if ($form->{format} eq 'pdf' 
930        or $form->{format} eq 'postscript') {
931     $form->{padding} = "~~";
932     $form->{bold} = "\textbf{";
933     $form->{endbold} = "}";
934     $form->{br} = '\\\\';
935     
936     my @numbers = qw(51r 86r 97r 93r 96 43 45 
937                   66 62 67);
938     my $number = '';
939     foreach $number ( @numbers){
940       $form->{$number} =~ s/,/~~/g;
941     }
942   } 
943   elsif ($form->{format} eq 'html') {
944     $form->{padding} = "&nbsp;&nbsp;";
945     $form->{bold} = "<b>";
946     $form->{endbold} = "</b>";
947     $form->{br} = "<br>";
948     $form->{address} =~ s/\\n/<br \/>/;
949     
950   };
951   
952   
953   if ($form->{format} eq 'elster'){
954       &create_winston();
955     } else {
956       $form->{templates} = $myconfig{templates};
957       $form->{templates} = "doc" if ($form->{type} eq 'help');
958       
959       $form->{IN}  = "$form->{type}";
960       $form->{IN}  = "$form->{help}" if ($form->{type} eq 'help');
961       $form->{IN} .= "-$form->{year}" if ($form->{format} eq 'pdf'
962                        or $form->{format} eq 'postscript');
963
964       $form->{IN} .= '.tex' if ($form->{format} eq 'pdf' 
965                        or $form->{format} eq 'postscript');
966
967       $form->{IN} .= '.html' if ($form->{format} eq 'html');
968       #$form->header;    
969       #print qq|$myconfig<br>$path|;
970       $form->parse_template($myconfig, $userspath);
971   }
972   $lxdebug->leave_sub();
973 }
974
975
976 sub edit {
977   $lxdebug->enter_sub();
978 # edit all taxauthority prefs
979
980   $form->header;
981   &get_config($userspath, 'finanzamt.ini');
982   
983   #&create_steuernummer;
984   
985   my $land=$form->{elsterland};
986   my $amt=$form->{elsterFFFF};  
987
988   $form->{title} = $locale->text('Finanzamt - Einstellungen');
989   print qq|
990     <body>
991     <form name="verzeichnis" method=post action="$form->{script}">
992      <table width=100%>
993         <tr>
994           <th class="listtop">|.$locale->text('Finanzamt - Einstellungen').qq|</th>
995         </tr>
996         <tr>
997          <td>
998            <br>
999            <fieldset>
1000            <legend><b>|.$locale->text('Angaben zum Finanzamt').qq|</b></legend>
1001   |;
1002   #print qq|$form->{terminal}|;
1003
1004   USTVA::fa_auswahl($land, $amt, &elster_hash());
1005   print qq|
1006            </fieldset>
1007            <br>
1008   |;
1009   my $checked = '';
1010   $checked ="checked" if ( $form->{method} eq 'accrual' );
1011   print qq|
1012            <fieldset>
1013            <legend><b>|.$locale->text('Verfahren').qq|</b>
1014            </legend>
1015            <input name=method id=accrual class=radio type=radio value="accrual" $checked>
1016            <label for="accrual">|.$locale->text('accrual').qq|</label>
1017            <br>
1018   |;
1019   $checked = '';
1020   $checked ="checked" if ( $form->{method} eq 'cash' );
1021   print qq|
1022            <input name=method id=cash class=radio type=radio value="cash" $checked>
1023            <label for="cash">|.$locale->text('cash').qq|</label>
1024            </fieldset>
1025            <br>
1026            <fieldset>
1027            <legend><b>|.$locale->text('Voranmeldungszeitraum').qq|</b>
1028            </legend>
1029   |;
1030   $checked = '';
1031   $checked ="checked" if ( $form->{FA_voranmeld} eq 'month' );
1032   print qq|
1033            <input name=FA_voranmeld id=month class=radio type=radio value="month" $checked>
1034            <label for="month">|.$locale->text('month').qq|</label>
1035            <br>
1036   |;
1037   $checked = '';
1038   $checked ="checked" if ( $form->{FA_voranmeld} eq 'quarter' );
1039   print qq|
1040            <input name="FA_voranmeld" id=quarter class=radio type=radio value="quarter" $checked>
1041            <label for="quarter">|.$locale->text('quarter').qq|</label>
1042            <br>
1043   |;
1044   $checked = '';
1045   $checked ="checked" if ( $form->{FA_dauerfrist} eq '1' );
1046   print qq|
1047            <input name="FA_dauerfrist" id=FA_dauerfrist class=checkbox type=checkbox value="1" $checked>
1048            <label for="">|.$locale->text('Dauerfristverlängerung').qq|</label>
1049            
1050            </fieldset>
1051            <br>
1052            <fieldset>
1053            <legend><b>|.$locale->text('Steuerberater/-in').qq|</b>
1054            </legend>
1055   |;
1056   $checked = '';
1057   $checked ="checked" if ( $form->{FA_71} eq 'X' );
1058   print qq|
1059           <!-- <input name="FA_71" id=FA_71 class=checkbox type=checkbox value="X" $checked>
1060            <label for="FA_71">|.$locale->text('Verrechnung des Erstattungsbetrages erwünscht (Zeile 71)').qq|</label>
1061            <br>
1062            <br>-->
1063            <table>
1064            <tr>
1065            <td>
1066            |.$locale->text('Name').qq|
1067            </td>
1068            <td>
1069            |.$locale->text('Straße').qq|
1070            </td>
1071            <td>
1072            |.$locale->text('PLZ, Ort').qq|
1073            </td>
1074            <td>
1075            |.$locale->text('Telefon').qq|
1076            </td>
1077            </tr>
1078            <tr>
1079            <td>
1080            <input name="FA_steuerberater_name" id=steuerberater size=25 value="$form->{FA_steuerberater_name}">
1081            </td>
1082            <td>
1083            <input name="FA_steuerberater_street" id=steuerberater size=25 value="$form->{FA_steuerberater_street}">
1084            </td>
1085            <td>
1086            <input name="FA_steuerberater_city" id=steuerberater size=25 value="$form->{FA_steuerberater_city}">
1087            </td>
1088            <td>
1089            <input name="FA_steuerberater_tel" id=steuerberater size=25 value="$form->{FA_steuerberater_tel}">
1090            </tr>
1091            </table>
1092            
1093            </fieldset>
1094
1095            <br>
1096            <br>
1097            <hr>
1098            <!--<input type=submit class=submit name=action value="|.$locale->text('debug').qq|">-->
1099            <input type=submit class=submit name=action value="|.$locale->text('continue').qq|">
1100          </td>
1101        </tr>
1102      </table>
1103   |;
1104   
1105   my @variables = qw( steuernummer elsterland elstersteuernummer elsterFFFF);
1106   my $variable = '';
1107     foreach $variable (@variables) {
1108     print qq|   
1109           <input name=$variable type=hidden value="$form->{$variable}">|;
1110   }
1111   my $steuernummer_new = '';
1112   #<input type=hidden name="steuernummer_new" value="$form->{$steuernummer_new}">        
1113   print qq|
1114
1115           <input type=hidden name="nextsub" value="edit_form">
1116           <input type=hidden name="warnung" value="1">
1117           <input type=hidden name="saved" value="|.$locale->text('Bitte Angaben überprüfen').qq|">
1118           <input type=hidden name="path" value=$form->{path}>
1119           <input type=hidden name="login" value=$form->{login}>
1120           <input type=hidden name="password" value=$form->{password}>
1121           <input type=hidden name="warnung" value="0">
1122   |;
1123          
1124   @variables = qw(FA_Name FA_Strasse FA_PLZ 
1125     FA_Ort FA_Telefon FA_Fax FA_PLZ_Grosskunden FA_PLZ_Postfach FA_Postfach 
1126     FA_BLZ_1 FA_Kontonummer_1 FA_Bankbezeichnung_1 FA_BLZ_2
1127     FA_Kontonummer_2 FA_Bankbezeichnung_oertlich FA_Oeffnungszeiten 
1128     FA_Email FA_Internet);
1129   
1130   foreach $variable (@variables) {
1131     print qq|   
1132           <input name=$variable type=hidden value="$form->{$variable}">|;
1133   }
1134   
1135   print qq|
1136    </form>
1137    </body>
1138 |;
1139   $lxdebug->leave_sub();
1140 }
1141
1142
1143 sub edit_form {
1144   $lxdebug->enter_sub();
1145   $form->header();
1146   print qq|
1147     <body>
1148   |;
1149   my $elsterland = '';
1150   my $elster_amt = '';
1151   my $elsterFFFF = '';
1152   my $elstersteuernummer = '';
1153   &get_config($userspath, 'finanzamt.ini') if ($form->{saved} eq $locale->text('saved'));
1154
1155   # Auf Übergabefehler checken
1156   USTVA::info($locale->text('Bitte das Bundesland UND die Stadt bzw. den Einzugsbereich Ihres zuständigen Finanzamts auswählen.')) if ($form->{elsterFFFF_new} eq 'Auswahl' || $form->{elsterland_new} eq 'Auswahl');
1157   USTVA::info($locale->text('Es fehlen Angaben zur Versteuerung. 
1158   Wenn Sie Ist Versteuert sind, wählen Sie die Einnahmen/Überschuß-Rechnung aus. 
1159   Sind Sie Soll-Versteuert und Bilanzverpflichtet, dann wählen Sie Bilanz aus.')) if ( $form->{method} eq '' );
1160   # Klären, ob Variablen bereits befüllt sind UND ob veräderungen auf
1161   # der vorherigen Maske stattfanden: $change = 1(in der edit sub, 
1162   # mittels get_config)
1163   
1164   my $change = $form->{elsterland} eq $form->{elsterland_new} && $form->{elsterFFFF} eq $form->{elsterFFFF_new} ? '0':'1';
1165   $change = '0' if ($form->{saved} eq $locale->text('saved'));
1166   my $elster_init = &elster_hash();
1167   #my %elster_init = ();
1168   my %elster_init = %$elster_init;
1169   
1170   if ( $change eq '1' ){
1171     # Daten ändern
1172     $elsterland = $form->{elsterland_new};
1173     $elsterFFFF = $form->{elsterFFFF_new};
1174     $form->{elsterland} = $elsterland;
1175     $form->{elsterFFFF} = $elsterFFFF;
1176     $form->{steuernummer} = '';
1177     &create_steuernummer;  
1178     # rebuild elster_amt
1179     my $amt = '';
1180     foreach $amt ( keys %{ $elster_init{$form->{elsterland}} } ) {
1181        $elster_amt = $amt  if ($elster_init{$form->{elsterland}{$amt} eq $form->{elsterFFFF}} );
1182     }  
1183
1184     # load the predefined hash data into the FA_* Vars    
1185     my @variables = qw(FA_Name FA_Strasse FA_PLZ FA_Ort 
1186                     FA_Telefon FA_Fax FA_PLZ_Grosskunden FA_PLZ_Postfach 
1187                     FA_Postfach 
1188                     FA_BLZ_1 FA_Kontonummer_1 FA_Bankbezeichnung_1 
1189                     FA_BLZ_2 FA_Kontonummer_2 FA_Bankbezeichnung_oertlich 
1190                     FA_Oeffnungszeiten FA_Email FA_Internet);
1191     
1192     for (my $i = 0; $i <= 20; $i++) {
1193        $form->{$variables[$i]} = $elster_init->{$elsterland}->{$elsterFFFF}->[$i];
1194     }
1195
1196   } else {
1197
1198     $elsterland = $form->{elsterland};
1199     $elsterFFFF = $form->{elsterFFFF};
1200   
1201   } 
1202   my $stnr = $form->{steuernummer};
1203   $stnr =~ s/\D+//g;
1204   my $patterncount = $form->{patterncount};
1205   my $elster_pattern = $form->{elster_pattern};
1206   my $delimiter = $form->{delimiter};
1207   my $steuernummer = '';
1208   $steuernummer = $form->{steuernummer} if ($steuernummer eq '');
1209
1210   #Warnung
1211   my $warnung = $form->{warnung};
1212   #printout form
1213   print qq|
1214    <form name="elsterform" method=post action="$form->{script}">
1215    <table width="100%">
1216        <tr>
1217         <th colspan="2" class="listtop">|.$locale->text('Finanzamt - Einstellungen').qq|</th>
1218        </tr>
1219        <tr>
1220          <td colspan=2>
1221          <br>
1222   |;
1223   &show_fa_daten;
1224   print qq|
1225          </td>
1226        </tr>
1227        <tr>
1228          <td colspan="2">
1229            <br>
1230            <fieldset>
1231            <legend>
1232            <font size="+1">|.$locale->text('Steuernummer').qq|</font>
1233            </legend>
1234            <br>
1235   |;
1236   $steuernummer = USTVA::steuernummer_input($form->{elsterland}, 
1237          $form->{elsterFFFF}, $form->{steuernummer} );
1238   print qq|
1239            </H2><br>
1240            </fieldset>
1241            <br>
1242            <br>
1243            <hr>
1244          </td>
1245       </tr>
1246       <tr>
1247          <td align="left">
1248
1249
1250           <!--<input type=hidden name=nextsub value="debug">
1251           <input type=submit class=submit name=action value="|.$locale->text('debug').qq|">
1252           <input type=hidden name=nextsub value="test">
1253           <input type=submit class=submit name=action value="|.$locale->text('test').qq|">-->
1254           <input type=hidden name=lastsub value="edit">
1255           <input type=submit class=submit name=action value="|.$locale->text('back').qq|">
1256   |;
1257   if ( $form->{warnung} eq "1" ){
1258     print qq|
1259           <input type=hidden name=nextsub value="edit_form">
1260           <input type=submit class=submit name=action value="|.$locale->text('continue').qq|">
1261           <input type=hidden name="saved" value="|.$locale->text('Bitte alle Angaben überprüfen').qq|">
1262     |;
1263   } else {
1264     print qq|
1265           <input type=hidden name="nextsub" value="save">
1266           <input type=hidden name="filename" value="finanzamt.ini">
1267           <input type=submit class=submit name=action value="|.$locale->text('save').qq|">
1268          |;
1269   }
1270
1271   print qq|
1272          </td>
1273          <td align="right">
1274            <H2 class=confirm>$form->{saved}</H2>
1275          </td>
1276       </tr>
1277   </table>
1278   |;
1279
1280   my @variables = qw(FA_steuerberater_name FA_steuerberater_street
1281                   FA_steuerberater_city FA_steuerberater_tel
1282                   FA_voranmeld method  
1283                   FA_dauerfrist FA_71 FA_Name elster
1284                   path login password type elster_init saved
1285                   );
1286   my $variable = '';
1287   foreach $variable (@variables) {
1288   print qq|
1289         <input name="$variable" type="hidden" value="$form->{$variable}">|;
1290   }
1291   print qq|
1292           <input type=hidden name="elsterland" value="$elsterland">
1293           <input type=hidden name="elsterFFFF" value="$elsterFFFF">
1294           <input type=hidden name="warnung" value="$warnung">
1295           <input type=hidden name="elstersteuernummer" value="$elstersteuernummer">
1296           <input type=hidden name="steuernummer" value="$stnr">
1297   </form>
1298   |;
1299   $lxdebug->leave_sub();
1300 }
1301
1302
1303 sub create_steuernummer {
1304   $lxdebug->enter_sub();
1305   my $part=$form->{part};
1306   my $patterncount = $form->{patterncount};
1307   my $delimiter = $form->{delimiter};
1308   my $elster_pattern = $form->{elster_pattern};
1309   # rebuild steuernummer and elstersteuernummer
1310   # es gibt eine gespeicherte steuernummer $form->{steuernummer}
1311   # und die parts und delimiter 
1312   
1313   my $h =0;
1314   my $i =0;
1315   
1316   my $steuernummer_new = $part; 
1317   my $elstersteuernummer_new = $form->{elster_FFFF};
1318   $elstersteuernummer_new .= '0';
1319   
1320   for ( $h = 1; $h < $patterncount; $h++) {
1321     $steuernummer_new .= qq|$delimiter|;
1322     for (my $i = 1; $i <= length($elster_pattern); $i++ ) {
1323       $steuernummer_new .= $form->{"part_$h\_$i"};
1324       $elstersteuernummer_new .= $form->{"part_$h\_$i"};
1325     }
1326   }
1327   if ($form->{steuernummer} ne $steuernummer_new){
1328     $form->{steuernummer} = $steuernummer_new;
1329     $form->{elstersteuernummer} = $elstersteuernummer_new;
1330     $form->{steuernummer_new} = $steuernummer_new;
1331   } else{
1332     $form->{steuernummer_new} = '';
1333     $form->{elstersteuernummer_new} = '';   
1334   }
1335   $lxdebug->leave_sub();
1336 }
1337
1338
1339 sub get_config {
1340   $lxdebug->enter_sub();
1341
1342   my ($userpath, $filename) = @_;
1343   my ($key, $value) = '';
1344   open(FACONF, "$userpath/$filename") or $form->error("$userpath/$filename : $!");
1345     while (<FACONF>) {
1346           last if /^\[/;
1347           next if /^(#|\s)/;
1348           # remove comments
1349           s/\s#.*//g;
1350           # remove any trailing whitespace
1351           s/^\s*(.*?)\s*$/$1/;
1352           ($key, $value) = split /=/, $_, 2;
1353           #if ($value eq ' '){
1354           #   $form->{$key} = " " ;
1355           #} elsif ($value ne ' '){
1356              $form->{$key} = "$value";
1357           #}
1358     }
1359   close FACONF;
1360   # Textboxen formatieren: Linebreaks entfernen
1361   #
1362   #$form->{FA_Oeffnungszeiten} =~ s/\\\\n/<br>/g;
1363   $lxdebug->leave_sub();
1364 }
1365
1366
1367
1368 sub save {
1369   $lxdebug->enter_sub();
1370   my $filename = $form->{filename};
1371   #zuerst die steuernummer aus den part, parts_X_Y und delimiter herstellen
1372   create_steuernummer;
1373   # Textboxen formatieren: Linebreaks entfernen
1374   #
1375   $form->{FA_Oeffnungszeiten} =~ s/\r\n/\\n/g;
1376   #URL mit http:// davor?
1377   $form->{FA_Internet} =~ s/^http:\/\///;
1378   $form->{FA_Internet} = 'http://'. $form->{FA_Internet};
1379   
1380   my @config = qw(elster elsterland elstersteuernummer steuernummer 
1381                elsteramt elsterFFFF FA_Name FA_Strasse 
1382                FA_PLZ FA_Ort FA_Telefon FA_Fax FA_PLZ_Grosskunden 
1383                FA_PLZ_Postfach FA_Postfach FA_BLZ_1 FA_Kontonummer_1 
1384                FA_Bankbezeichnung_1 FA_BLZ_2 FA_Kontonummer_2 
1385                FA_Bankbezeichnung_oertlich FA_Oeffnungszeiten 
1386                FA_Email FA_Internet FA_voranmeld method FA_steuerberater_name
1387                FA_steuerberater_street FA_steuerberater_city FA_steuerberater_tel
1388                FA_71 FA_dauerfrist);
1389   # Hier kommt dann die Plausibilitätsprüfung der ELSTERSteuernummer
1390   if ( $form->{elstersteuernummer} ne '000000000' ) { 
1391     $form->{elster}='1';
1392     open(CONF, ">$userspath/$filename") or $form->error("$filename : $!");
1393     # create the config file
1394     print CONF qq|# Configuration file for USTVA\n\n|;
1395     my $key = '';   
1396     foreach $key (sort @config) {
1397       $form->{$key} =~ s/\\/\\\\/g;
1398       $form->{$key} =~ s/"/\\"/g;
1399       # strip M
1400       $form->{$key} =~ s/\r\n/\n/g;
1401       print CONF qq|$key=|; 
1402       if ($form->{$key} ne 'Y') {
1403         print CONF qq|$form->{$key}\n|;
1404       }
1405       if ($form->{$key} eq 'Y') {
1406         print CONF qq|checked \n|;
1407       }
1408     }
1409     print CONF qq|\n\n|;
1410     close CONF;
1411     $form->{saved} = $locale->text('saved');
1412   
1413   } else {
1414   
1415     $form->{saved} = $locale->text('Bitte eine Steuernummer angeben');
1416   }
1417
1418   &edit_form;
1419   $lxdebug->leave_sub();
1420 }
1421
1422 sub show_fa_daten {
1423   $lxdebug->enter_sub();
1424   my $readonly = $_;
1425   my $oeffnungszeiten = $form->{FA_Oeffnungszeiten} ;
1426   $oeffnungszeiten =~ s/\\\\n/\n/g;
1427   print qq|    <br>
1428                <fieldset>
1429                <legend>
1430                <font size="+1">|. $locale->text('Finanzamt').qq| $form->{FA_Name}</font>
1431                </legend>
1432   |;
1433   #print qq|\n<h4>$form->{FA_Ergaenzung_Name}&nbsp;</h4>
1434   #        | if ( $form->{FA_Ergaenzung_Name} );
1435   print qq|
1436                <table width="100%" valign="top">
1437                <tr>
1438                 <td valign="top">
1439                   <br>
1440                   <fieldset>
1441                     <legend>
1442                     <b>|.$locale->text('Address').qq|</b>
1443                     </legend>
1444
1445                   <table width="100%">
1446                    <tr>
1447                     <td colspan="2">
1448                      <input name="FA_Strasse" size="40" title="FA_Strasse" value="$form->{FA_Strasse}" $readonly>
1449                     </td width="100%">
1450                    </tr>
1451                    <tr>
1452                     <td width="116px">
1453                      <input name="FA_PLZ" size="10" title="FA_PLZ" value="$form->{FA_PLZ}" $readonly>
1454                     </td>
1455                     <td>
1456                      <input name="FA_Ort" size="20" title="FA_Ort" value="$form->{FA_Ort}" $readonly>
1457                     </td>
1458                   </tr>
1459                   </table>
1460                   </fieldset>
1461                   <br>
1462                   <fieldset>
1463                   <legend>
1464                   <b>|.$locale->text('Kontakt').qq|</b>
1465                   </legend>
1466                       |.$locale->text('Telefon').qq|<br>
1467                       <input name="FA_Telefon" size="40" title="FA_Telefon" value="$form->{FA_Telefon}" $readonly>
1468                       <br>
1469                       <br> 
1470                       |.$locale->text('Fax').qq|<br>
1471                       <input name="FA_Fax" size="40" title="FA_Fax" value="$form->{FA_Fax}" $readonly>
1472                       <br>
1473                       <br>
1474                       |.$locale->text('Internet').qq|<br>
1475                       <input name="FA_Email" size="40" title="FA_Email" value="$form->{FA_Email}" $readonly>
1476                       <br>
1477                       <br>
1478                       <input name="FA_Internet" size="40" title="" title="FA_Internet" value="$form->{FA_Internet}" $readonly>
1479                       <br>
1480                   </fieldset>
1481                 </td>
1482                 <td valign="top">
1483                   <br>
1484                   <fieldset>
1485                   <legend>
1486                   <b>|.$locale->text('Öffnungszeiten').qq|</b>
1487                   </legend>
1488                   <textarea name="FA_Oeffnungszeiten" rows="4" cols="40" $readonly>$oeffnungszeiten</textarea>
1489                   </fieldset>
1490                   <br>
1491   |;
1492   my $FA_1= ($form->{FA_BLZ_1} ne '' && 
1493        $form->{FA_Kontonummer_1} ne '' && 
1494        $form->{FA_Bankbezeichnung_1} ne '');
1495   my $FA_2= ($form->{FA_BLZ_2} ne '' &&
1496        $form->{FA_Kontonummer_2} ne '' && 
1497        $form->{FA_Bankbezeichnung_oertlich} ne '');
1498   if ( $FA_1 && $FA_2){
1499      print qq|
1500                     <fieldset>
1501                     <legend>
1502                     <b>|.$locale->text('Bankverbindungen des Finanzamts').qq|</b>
1503                     <legend>
1504                     <table>   
1505                     <tr>
1506                      <td>
1507                         |.$locale->text('Kreditinstitut').qq|
1508                         <br>
1509                         <input name="FA_Bankbezeichnung_1" size="30" value="$form->{FA_Bankbezeichnung_1}" $readonly>
1510                         <br>
1511                         <br>
1512                         |.$locale->text('Kontonummer').qq|
1513                         <br>
1514                         <input name="FA_Kontonummer_1" size="15" value="$form->{FA_Kontonummer_1}" $readonly>
1515                         <br>
1516                         <br> 
1517                         |.$locale->text('Bankleitzahl').qq|
1518                         <br>
1519                         <input name="FA_BLZ_1" size="15" value="$form->{FA_BLZ_1}" $readonly>
1520                      </td>
1521                      <td>
1522                         |.$locale->text('Kreditinstitut').qq|
1523                         <br>
1524                         <input name="FA_Bankbezeichnung_oertlich" size="30" value="$form->{FA_Bankbezeichnung_oertlich}" $readonly>
1525                         <br>
1526                         <br>
1527                         |.$locale->text('Kontonummer').qq|
1528                         <br>
1529                         <input name="FA_Kontonummer_2" size="15" value="$form->{FA_Kontonummer_2}" $readonly>
1530                         <br>
1531                         <br> 
1532                         |.$locale->text('Bankleitzahl').qq|
1533                         <br>
1534                         <input name="FA_BLZ_2" size="15" value="$form->{FA_BLZ_2}" $readonly>
1535                      </td>
1536                     </tr>
1537                     </table>
1538                     </fieldset>
1539     |; 
1540   } elsif ( $FA_1 ) {
1541     print qq|
1542                     <fieldset>
1543                     <legend>
1544                       <b>|.$locale->text('Bankverbindung des Finanzamts').qq|</b>
1545                     <legend>
1546                     |.$locale->text('Kontonummer').qq|
1547                     <br>
1548                     <input name="FA_Kontonummer_1" size="30" value="$form->{FA_Kontonummer_1}" $readonly>
1549                     <br>
1550                     <br> 
1551                     |.$locale->text('Bankleitzahl (BLZ)').qq|
1552                     <br>
1553                     <input name="FA_BLZ_1" size="15" value="$form->{FA_BLZ_1}" $readonly>
1554                     <br>
1555                     <br>
1556                     |.$locale->text('Kreditinstitut').qq|
1557                     <br>
1558                     <input name="FA_Bankbezeichnung_1" size="15" value="$form->{FA_Bankbezeichnung_1}" $readonly>
1559                     <br>
1560                     </fieldset>
1561     |;
1562   } else {
1563     print qq|
1564                     <fieldset>
1565                     <legend>
1566                       <b>|.$locale->text('Bankverbindung des Finanzamts').qq|</b>
1567                     <legend> 
1568                     |.$locale->text('Kontonummer').qq|
1569                     <br>
1570                     <input name="FA_Kontonummer_2" size="30" value="$form->{FA_Kontonummer_2}" $readonly>
1571                     <br>
1572                     <br> 
1573                     |.$locale->text('Bankleitzahl (BLZ)').qq|
1574                     <br>
1575                     <input name="FA_BLZ_2" size="15" value="$form->{FA_BLZ_2}" $readonly>
1576                     <br>
1577                     <br>
1578                     |.$locale->text('Kreditinstitut').qq|
1579                     <br>
1580                     <input name="FA_Bankbezeichnung_oertlich" size="15" value="$form->{FA_Bankbezeichnung_oertlich}" $readonly>
1581                     </fieldset>
1582     |;                     
1583   }
1584   print qq|
1585                  </td>
1586                </tr>              
1587           </table>
1588   </fieldset>
1589   |;
1590   $lxdebug->leave_sub();
1591 }
1592
1593
1594
1595 sub create_winston {
1596   $lxdebug->enter_sub();
1597   &get_config($userspath, 'finanzamt.ini');
1598
1599   # There is no generic Linux GNU/GPL solution out for using ELSTER.
1600   # In lack of availability linux users may use windows pendants. I choose
1601   # WINSTON, because it's free of coast, it has an API and its tested under
1602   # Linux using WINE.
1603   # The author of WINSTON developed some c-code to realize ELSTER under 
1604   # WINDOWS and Linux (http://www.felfri.de/fa_xml/). Next year (2005) I start to
1605   # develop a server side solution for LX-Office ELSTER under Linux and 
1606   # WINDOWS based on this c-code.
1607   #
1608   # You need to download WINSTON from http://www.felfri.de/winston/
1609   # There (http://www.felfri.de/winston/download.htm) you'll find instructions 
1610   # about WINSTON under Linux WINE
1611   # More infos about Winstons API: http://www.felfri.de/winston/schnittstellen.htm
1612   my $azr ='';
1613   my $file = ''; # Filename for Winstonfile
1614   $file .= 'U'; # 1. char 'U' = USTVA
1615        
1616   SWITCH: { # 2. and 3. char 01-12= Month 41-44= Quarter (azr:Abrechnungszeitraum)
1617         $form->{duetyp} eq "01" && do {
1618                                         $azr = "01";
1619                                         last SWITCH;
1620                                         };
1621         $form->{duetyp} eq "02" && do {
1622                                         $azr = "02";
1623                                         last SWITCH;
1624                                         };
1625         $form->{duetyp} eq "03" && do {
1626                                         $azr = "03";
1627                                         last SWITCH;
1628                                         };
1629         $form->{duetyp} eq "04" && do {
1630                                         $azr = "04";
1631                                         last SWITCH;
1632                                         };
1633         $form->{duetyp} eq "05" && do {
1634                                         $azr = "05";
1635                                         last SWITCH;
1636                                         };
1637         $form->{duetyp} eq "06" && do {
1638                                         $azr = "06";
1639                                         last SWITCH;
1640                                         };
1641         $form->{duetyp} eq "07" && do {
1642                                         $azr = "07";
1643                                         last SWITCH;
1644                                         };
1645         $form->{duetyp} eq "08" && do {
1646                                         $azr = "08";
1647                                         last SWITCH;
1648                                         };
1649         $form->{duetyp} eq "09" && do {
1650                                         $azr = "09";
1651                                         last SWITCH;
1652                                         };
1653         $form->{duetyp} eq "10" && do {
1654                                         $azr = "10";
1655                                         last SWITCH;
1656                                         };
1657         $form->{duetyp} eq "11" && do {
1658                                         $azr = "11";
1659                                         last SWITCH;
1660                                         };
1661         $form->{duetyp} eq "12" && do {
1662                                         $azr = "12";
1663                                         last SWITCH;
1664                                         };
1665         $form->{duetyp} eq "A" && do {
1666                                         $azr = "41";
1667                                         last SWITCH;
1668                                         };
1669         $form->{duetyp} eq "B" && do {
1670                                         $azr = "42";
1671                                         last SWITCH;
1672                                         };
1673         $form->{duetyp} eq "C" && do {
1674                                         $azr = "43";
1675                                         last SWITCH;
1676                                         };
1677         $form->{duetyp} eq "D" && do {
1678                                         $azr = "44";
1679                                         last SWITCH;
1680                                         };
1681                                    do { 
1682                                         $form->error("Ungültiger Anmeldezeitraum.\n
1683                                         Sie können für ELSTER nur einen monatlichen oder 
1684                                         quartalsweisen Anmeldezeitraum auswählen.");
1685                                         }; 
1686   }
1687
1688   $file .= $azr;      
1689   #4. and 5. char = year modulo 100
1690   $file .= sprintf("%02d", $form->{year}%100);
1691
1692   #6. to 18. char = Elstersteuernummer
1693   #Beispiel: Steuernummer in Bayern 
1694   #111/222/33334 ergibt für UStVA Jan 2004: U01049111022233334
1695       
1696   $file .= $form->{elsterFFFF};
1697   $file .= $form->{elstersteuernummer};
1698
1699   #file suffix
1700
1701   $file .= '.xml';
1702   $form->{elsterfile} = $file;
1703       
1704   #Calculations
1705       
1706   my $k51 = sprintf("%d", $form->parse_amount(\%myconfig, $form->{"51"})); # Umsätze zu 16% USt 
1707   my $k86 = sprintf("%d", $form->parse_amount(\%myconfig, $form->{"86"})); # Umsätze zu 7% USt 
1708   my $k97 = sprintf("%d", $form->parse_amount(\%myconfig, $form->{"97"})); # 16% Steuerpflichtige innergemeinsachftliche Erwerbe
1709   my $k93 = sprintf("%d", $form->parse_amount(\%myconfig, $form->{"93"})); # 16% Steuerpflichtige innergemeinsachftliche Erwerbe
1710   my $k94 = sprintf("%d", $form->parse_amount(\%myconfig, $form->{"94"})); # neuer Fahrzeuge von Lieferern
1711   my $k66 = $form->parse_amount(\%myconfig, $form->{"66"}) * 100;# Vorsteuer 7% plus 16% 
1712   my $k83 = $form->parse_amount(\%myconfig, $form->{"67"}) * 100;# Umsätze zu 7% USt 
1713   my $k96 = $form->parse_amount(\%myconfig, $form->{"96"}) * 100;#        
1714   #
1715   # Now build the xml content
1716   # 
1717       
1718   $form->{elster}= qq|<?xml version="1.0" encoding="ISO-8859-1" ?>
1719 <!-- Diese Datei ist mit Lx-Office $form->{version} generiert -->
1720 <WinstonAusgang>
1721  <Formular Typ="UST"></Formular>
1722  <Ordnungsnummer>$form->{elstersteuernummer}</Ordnungsnummer>
1723  <AnmeldeJahr>$form->{year}</AnmeldeJahr>
1724  <AnmeldeZeitraum>$azr</AnmeldeZeitraum>
1725   |;
1726  
1727   $form->{elster} .= qq|<Kennzahl Nr="51">$k51</Kennzahl>\n| if ($k51 ne '0');
1728   $form->{elster} .= qq|<Kennzahl Nr="86">$k86</Kennzahl>\n| if ($k86 ne '0');
1729   $form->{elster} .= qq|<Kennzahl Nr="97">$k97</Kennzahl>\n| if ($k97 ne '0');
1730   $form->{elster} .= qq|<Kennzahl Nr="93">$k93</Kennzahl>\n| if ($k93 ne '0');
1731   $form->{elster} .= qq|<Kennzahl Nr="94">$k94</Kennzahl>\n| if ($k94 ne '0');
1732   $form->{elster} .= qq|<Kennzahl Nr="96">$k96</Kennzahl>\n| if ($k96 ne '0');
1733   $form->{elster} .= qq|<Kennzahl Nr="66">$k66</Kennzahl>\n| if ($k66 ne '0');
1734   $form->{elster} .= qq|<Kennzahl Nr="83">$k83</Kennzahl>\n| if ($k83 ne '0');
1735   $form->{elster} .= qq|\n</WinstonAusgang>\n\n|;
1736   
1737   #$form->header;
1738   #print qq|$form->{elsterfile}|;
1739   #print qq|$form->{elster}|;
1740   $SIG{INT} = 'IGNORE';
1741   
1742   &save_winston;
1743   $lxdebug->leave_sub();
1744 }
1745
1746
1747 sub save_winston {
1748   $lxdebug->enter_sub();
1749   my $elster = $form->{elster};
1750   my $elsterfile = $form->{elsterfile};
1751   open(OUT, ">-") or $form->error("STDOUT : $!");
1752     print OUT qq|Content-Type: application/file;
1753 Content-Disposition: attachment; filename="$elsterfile"\n\n|;
1754     print OUT $elster;
1755   close(OUT);
1756   $lxdebug->leave_sub();
1757 }
1758
1759 sub continue {
1760   $lxdebug->enter_sub();
1761 # allow Symbolic references just here:
1762 no strict 'refs'; 
1763 &{$form->{nextsub}};
1764 use strict 'refs';
1765   $lxdebug->leave_sub();
1766 }
1767
1768 sub back { &{$form->{lastsub}} };
1769
1770 sub elster_hash {
1771   $lxdebug->enter_sub();
1772   my $finanzamt = USTVA::query_finanzamt(\%myconfig, \%$form);
1773   $lxdebug->leave_sub();
1774   return $finanzamt
1775 }
1776
1777 sub test {
1778   $lxdebug->enter_sub();
1779 # biegt nur den Testeintrag in Programm->Test auf eine Routine um
1780
1781 $form->header;
1782 &elster_send;
1783   $lxdebug->leave_sub();
1784 }
1785
1786
1787 sub elster_send {
1788   $lxdebug->enter_sub();
1789   #read config
1790   my $elster_conf = &elster_conf();
1791   &elster_xml();
1792   use Cwd;
1793   $form->{cwd} = cwd();
1794   $form->{tmpdir} = $form->{cwd} . '/' . $elster_conf->{'path'};
1795   $form->{tmpfile} = $elster_conf->{'err'};
1796   my $caller = $elster_conf->{'call'}[0];    
1797   
1798   chdir("$form->{tmpdir}") or $form->error($form->cleanup."chdir : $!");
1799   my $send= "faxmlsend $caller -config etc/faxmlsend.cnf -xml faxmlsend.xml -tt faxmlsend.tt -debug";
1800
1801   system("$send > $form->{tmpfile}");
1802   $form->{tmpdir} .= "$elster_conf->{'path'}/";
1803   $form->{tmpfile} = "faxmlsend.err";
1804   $form->error($form->cleanup."faxmlsend : OFD meldet: Error 404 \n Internetseite nicht vorhanden") if ($? eq '1024');
1805   $form->error($form->cleanup."faxmlsend : No such File: faxmlsend.xml \n Fehlernummer: $? \n Problem beim öffnen der faxmlsend.xml") if ($?);
1806   # foreach my $line (&elster_feedback("$elster_conf->{'path'}")){
1807   #   print qq|$line\n|;
1808   # }
1809   print qq|Log:<br>|;
1810   #for (my $i=0; $i<= )
1811   &elster_readlog();  
1812   print qq|\n ende\n|;
1813   $lxdebug->leave_sub();
1814 }
1815
1816
1817 sub elster_readlog {
1818   $lxdebug->enter_sub();
1819   my $elster_conf = &elster_conf();
1820   open(LOG, "$elster_conf->{'logfile'}") or $form->error("$elster_conf->{'logfile'}: $!");
1821   print qq|<listing>|;
1822   my $log='';
1823   my $xml='';
1824   my $tmp='';
1825   while (<LOG>){
1826     my $i = 0;
1827     #$_ =~ s/</&lt\;/;
1828     #$_ =~ s/>/&gt\;/;
1829     $_ =~ s/\s+//mg;
1830     #$_ =~ s/\015\012//mg;
1831     $_ =~ s/</\n</mg;
1832     #$_ =~ s/\n\n+//mg;
1833     if ($_ =~ /^\d\d\d\d\d\d/g){
1834       $log .= qq|$_<br>|;
1835     #} elsif ($_ =~ /(<([^\/]*?)>)/ ) {
1836     } elsif ($_ =~ /(<([^\/].*?)>(.*))/g ) {
1837       #$xml .= qq|$2 = $3\n\n|;
1838       #$_ =~ s/\015\012//mg;
1839       $_=~ s/\s+//;
1840       $xml .= qq|$_\n|;
1841       
1842     } else {
1843       $tmp .= qq|$_<br>|;
1844     }
1845     $i++;
1846   }
1847   #second parse
1848   #my $var='';
1849   #while (<$xml>){
1850   #  $var .= qq|$2 = $3\n\n|;
1851   #}
1852   #print qq|$log|;
1853   print qq|$xml|;
1854   print qq|</listing>|;
1855  # $_=$log;
1856  #  s{<(\w+)\b([^<>]*)>
1857  #    ((?:.(?!</?\1\b))*.)
1858  #      (<\1>) }
1859  #   { print "markup=",$1," args=",$2," enclosed=",$3," final=",$4 ; "" }gsex;
1860   close LOG;
1861   $lxdebug->leave_sub();
1862 }
1863
1864
1865 sub elster_feedback {
1866   $lxdebug->enter_sub();
1867   my ($file) = @_;
1868   my @content = ();
1869   print qq|feedback:<br>|;
1870   if (-f "$file") {
1871     open(FH, "$file");
1872       @content = <FH>;
1873     close(FH);
1874   }
1875   $lxdebug->leave_sub();
1876   return(@content);
1877 }
1878
1879
1880 sub elster_conf {
1881   $lxdebug->enter_sub();
1882   my $elster_conf = {
1883           'path'    => 'elster',
1884           'prg'     => 'faxmlsend',
1885           'err'     => 'faxmlsend.err',
1886           'ttfile'  => 'faxmlsend.tt',
1887           'xmlfile' => 'faxmlsend.xml',
1888           'cline'   => '-tt $ttfile -xml $xmlfile',
1889           'call'    => ['send', 'protokoll', 'anmeldesteuern'],
1890           'logfile' => 'log/faxmlsend.log',
1891           'conffile' => 'faxmlsend.cnf',
1892           'debug'   => '-debug'
1893   };
1894
1895   $lxdebug->leave_sub();
1896
1897   return $elster_conf;
1898 }
1899
1900 sub elster_xml {
1901   $lxdebug->enter_sub();
1902
1903   my $elster_conf = &elster_conf();
1904 #  $k51 = sprintf("%d", $form->parse_amount(\%myconfig, $form->{"51"})); # Umsätze zu 16% USt 
1905 #  $k86 = sprintf("%d", $form->parse_amount(\%myconfig, $form->{"86"})); # Umsätze zu 7% USt 
1906 #  $k97 = sprintf("%d", $form->parse_amount(\%myconfig, $form->{"97"})); # 16% Steuerpflichtige innergemeinsachftliche Erwerbe
1907 #  $k93 = sprintf("%d", $form->parse_amount(\%myconfig, $form->{"93"})); # 16% Steuerpflichtige innergemeinsachftliche Erwerbe
1908 #  $k94 = sprintf("%d", $form->parse_amount(\%myconfig, $form->{"94"})); # neuer Fahrzeuge von Lieferern
1909 #  $k66 = $form->parse_amount(\%myconfig, $form->{"66"}) * 100;# Vorsteuer 7% plus 16% 
1910 #  $k83 = $form->parse_amount(\%myconfig, $form->{"67"}) * 100;# Umsätze zu 7% USt 
1911 #  $k96 = $form->parse_amount(\%myconfig, $form->{"96"}) * 100;#        
1912
1913   my $TransferHeader = qq|<?xml version="1.0" encoding="ISO-8859-1"?>
1914 <?xml-stylesheet type="text/xsl" href="..\\Stylesheet\\ustva.xsl"?>
1915 <Elster xmlns="http://www.elster.de/2002/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.elster.de/2002/XMLSchema
1916 ..\\Schemata\\elster_UStA_200501_extern.xsd">
1917    <TransferHeader version="7">
1918       <Verfahren>ElsterAnmeldung</Verfahren>
1919       <DatenArt>UStVA</DatenArt>
1920       <Vorgang>send-NoSig</Vorgang>
1921       <Testmerker>700000004</Testmerker>
1922       <HerstellerID>74931</HerstellerID>
1923       <DatenLieferant>Helmut</DatenLieferant>
1924       <Datei>
1925         <Verschluesselung>PKCS#7v1.5</Verschluesselung>
1926         <Kompression>GZIP</Kompression>
1927         <DatenGroesse>123456789012345678901234567890123456789012</DatenGroesse>
1928         <TransportSchluessel/>
1929       </Datei>
1930       <RC>
1931         <Rueckgabe>
1932           <Code>0</Code>
1933           <Text/>
1934         </Rueckgabe>
1935         <Stack>
1936           <Code>0</Code>
1937           <Text/>
1938         </Stack>
1939       </RC>
1940       <VersionClient/>
1941       <Zusatz>
1942         <Info>test</Info>
1943       </Zusatz>
1944    </TransferHeader>|;
1945   
1946   my $DatenTeil = qq|
1947    <DatenTeil>
1948       <Nutzdatenblock>
1949          <NutzdatenHeader version="9">
1950             <NutzdatenTicket>234234234</NutzdatenTicket>
1951             <Empfaenger id="F">9198</Empfaenger>
1952             <Hersteller>
1953                <ProduktName>ElsterAnmeldung</ProduktName>
1954                <ProduktVersion>V 1.4</ProduktVersion>
1955             </Hersteller>
1956             <DatenLieferant>String, der Lieferanteninfo enthaelt</DatenLieferant>
1957             <Zusatz>
1958               <Info>....</Info>
1959             </Zusatz>
1960          </NutzdatenHeader>
1961          <Nutzdaten>
1962             <!--die Version gibt Auskunft ueber das Jahr und die derzeit gueltige Versionsnummer-->
1963             <Anmeldungssteuern art="UStVA" version="200501">
1964                <DatenLieferant>
1965                   <Name>OFD Muenchen</Name>
1966                   <Strasse>Meiserstr. 6</Strasse>
1967                   <PLZ>80335</PLZ>
1968                   <Ort>München</Ort>
1969                </DatenLieferant>
1970                <Erstellungsdatum>20041127</Erstellungsdatum>
1971                <Steuerfall>
1972                   <Umsatzsteuervoranmeldung>
1973                      <Jahr>2005</Jahr>
1974                      <Zeitraum>01</Zeitraum>
1975                      <Steuernummer>9198011310134</Steuernummer>
1976                      <Kz09>74931*NameSteuerber.*Berufsbez.*089*59958327*Mandantenname</Kz09>
1977                   </Umsatzsteuervoranmeldung>
1978                </Steuerfall>
1979             </Anmeldungssteuern>
1980          </Nutzdaten>
1981       </Nutzdatenblock>
1982    </DatenTeil>
1983 </Elster>\n|;
1984
1985   #$DatenTeil .= qq|                              <Kz51>$k51</Kz51>\n| if ($k51 ne '0');
1986   #$DatenTeil .= qq|                              <Kz86>$k86</Kz86>\n| if ($k86 ne '0');
1987   #$DatenTeil .= qq|                              <Kz97>$k97</Kz97>\n| if ($k97 ne '0');
1988   #$DatenTeil .= qq|                              <Kz93>$k93</Kz93>\n| if ($k93 ne '0');
1989   #$DatenTeil .= qq|                              <Kz94>$k94</Kz94>\n| if ($k94 ne '0');
1990   #$DatenTeil .= qq|                              <Kz96>$k96</Kz96>\n| if ($k96 ne '0');
1991   #$DatenTeil .= qq|                              <Kz66>$k66</Kz66>\n| if ($k66 ne '0');
1992   #$DatenTeil .= qq|                              <Kz83>$k83</Kz83>\n| if ($k83 ne '0');
1993
1994   my $filename = "$elster_conf->{'path'}/$elster_conf->{'xmlfile'}";
1995   open(XML, ">$elster_conf->{'path'}/$elster_conf->{'xmlfile'}") or $form->error("$filename : $!");
1996   print XML qq|$TransferHeader $DatenTeil|;
1997   close XML;
1998   $lxdebug->leave_sub();
1999 }
2000