Verlagern der USTVA Kennziffern auf einen zentralen Datenbankeintrag.
authorUdo Spallek <info@wissensvermittlung.com>
Sun, 29 Apr 2007 14:44:46 +0000 (14:44 +0000)
committerUdo Spallek <info@wissensvermittlung.com>
Sun, 29 Apr 2007 14:44:46 +0000 (14:44 +0000)
Dies verhindert Probleme, dass manche Kennziffern in einzelnen Ausgabemedien nicht erscheinen, in anderen jedoch schon.
Auch bietet die Verlagerung auf die Datenbank - in einem späteren Schritt - die Abstraktion von Steuerreports auf verschiedene internationale Gegebenheiten.
Zur Vereinfachung habe ich das Schema tax.* eingefuehrt, in dem perspektivisch alle Steuerreport relevanten Tabellen einzug halten koennen.

SL/USTVA.pm
bin/mozilla/ustva.pl
sql/Pg-upgrade2/USTVA_abstraction.pl [new file with mode: 0644]

index 354e13e..9f1551e 100644 (file)
 
 package USTVA;
 
+sub report_variables {
+  # Get all positions for taxreport out of the database
+  # Needs Databaseupdate Pg-upgrade2/USTVA_abstraction.pl
+  
+  return unless defined wantarray;
+  
+  my ( $self,
+       $arg_ref) = @_;
+       
+  my $myconfig   = $arg_ref->{myconfig};
+  my $form       = $arg_ref->{form};
+  my $type       = $arg_ref->{type}; # 'paied' || 'received' || ''
+  my $attribute  = $arg_ref->{attribute}; # 
+  my $dec_places = (defined $arg_ref->{dec_places}) ? $arg_ref->{dec_places}:undef;
+
+  my $where_type = "AND tax.report_headings.type = '$type'" if ( $type );
+  my $where_dcp  = "AND tax.report_variables.dec_places = '$dec_places'" if ( defined $dec_places );
+
+  my $query = qq|
+    SELECT $attribute
+    FROM tax.report_variables 
+    LEFT JOIN tax.report_headings 
+      ON (tax.report_variables.heading_id = tax.report_headings.id)
+    WHERE 1=1 
+    $where_type
+    $where_dcp  
+  |;
+  
+  $main::lxdebug->message(LXDebug::QUERY, "\$query= \n $query\n");
+  
+  my $dbh = $form->dbconnect($myconfig);
+  my $sth = $dbh->prepare($query);
+
+  $sth->execute() || $form->dberror($query);
+  
+  my @positions;
+  
+  while ( my $row_ref = $sth->fetchrow_arrayref() ) {
+    push @positions, @$row_ref;  # Copy the array contents
+  }
+  
+  $sth->finish;
+  
+  $dbh->disconnect;
+  
+  return @positions;
+  
+}
+
 sub create_steuernummer {
   $main::lxdebug->enter_sub();
 
@@ -40,8 +89,8 @@ sub create_steuernummer {
   my $h = 0;
   my $i = 0;
 
-  $steuernummer_new       = $part;
-  $elstersteuernummer_new = $elster_FFFF;
+  $steuernummer_new        = $part;
+  $elstersteuernummer_new  = $elster_FFFF;
   $elstersteuernummer_new .= '0';
 
   for ($h = 1; $h < $patterncount; $h++) {
@@ -572,18 +621,32 @@ sub ustva {
 
   my $last_period     = 0;
   my $category        = "pos_ustva";
-  my @category_cent = qw(
-     511  861  36   80   971  931  98   96   53   74
-     85   65   66   61   62   67   63   64   59   69 
-     39   83   811  891  Z43  Z45  Z53  Z62  Z65  Z67
-  );
 
-  my @category_euro = qw(
-     41 44 49 43 48 51 
-     86 35 77 76 91 97 
-     93 95 94 42 60 45 
-     52 73 84 81 89
-  );
+  my @category_cent = USTVA->report_variables({
+      myconfig    => $myconfig,
+      form        => $form,
+      type        => '',
+      attribute   => 'position',
+      dec_places  => '2',
+  });
+  
+  push @category_cent, qw(83  Z43  Z45  Z53  Z62  Z65  Z67);
+  
+  my @category_euro = USTVA->report_variables({
+      myconfig    => $myconfig,
+      form        => $form,
+      type        => '',
+      attribute   => 'position',
+      dec_places  => '0',
+  });
+                           
+  push @category_euro, USTVA->report_variables({
+      myconfig    => $myconfig,
+      form        => $form,
+      type        => '',
+      attribute   => 'position',
+      dec_places  => '0',
+  });
 
   $form->{decimalplaces} *= 1;
 
@@ -593,9 +656,13 @@ sub ustva {
   foreach $item (@category_euro) {
     $form->{"$item"} = 0;
   }
+  my $coa_name = coa_get($dbh);
+  $form->{coa} = $coa_name;
+  
+  # Controlvariable for templates
+  $form->{"$coa_name"} = '1';
 
-  $form->{coa} = coa_get($dbh);
-  $main::lxdebug->message(LXDebug::DEBUG2, "COA: $form->{coa}");
+  $main::lxdebug->message(LXDebug::DEBUG2, "COA: '$form->{coa}',  \$form->{$coa_name} = 1");
 
   &get_accounts_ustva($dbh, $last_period, $form->{fromdate}, $form->{todate},
                       $form, $category);
@@ -843,7 +910,8 @@ sub get_accounts_ustva {
        LEFT JOIN taxkeys tk ON (
            tk.id = (
              SELECT id FROM taxkeys 
-             WHERE chart_id=ac.chart_id 
+             WHERE 1=1
+               AND chart_id=ac.chart_id 
                AND taxkey_id = ac.taxkey 
                AND startdate <= COALESCE(AP.transdate)
              ORDER BY startdate DESC LIMIT 1
index 3e353e8..8d05927 100644 (file)
@@ -754,18 +754,24 @@ sub generate_ustva {
     # Outputformat specific customisation's
     #
 
-    my @category_cent = qw(
-      511 861 36   80   971  931  98   96   53   74
-      85  65  66   61   62   67   63   64   59   69 
-      39  83  811  891  Z43  Z45  Z53  Z62  Z65  Z67
-      
-    );
-
-    my @category_euro = qw(
-      41 44 49 43 48 51 86 35 77 76 91 89
-      97 93 95 94 42 60 45 52 73 84 81 
-    );
+    my @category_cent = USTVA->report_variables({
+        myconfig    => \%myconfig,
+        form        => $form,
+        type        => '',
+        attribute   => 'position',
+        dec_places  => '2',
+    });
     
+    push @category_cent, qw(83  Z43  Z45  Z53  Z62  Z65  Z67);
+
+    my @category_euro = USTVA->report_variables({
+        myconfig    => \%myconfig,
+        form        => $form,
+        type        => '',
+        attribute   => 'position',
+        dec_places  => '0',
+    });
+
     $form->{id} = [];
     $form->{amount} = [];
 
diff --git a/sql/Pg-upgrade2/USTVA_abstraction.pl b/sql/Pg-upgrade2/USTVA_abstraction.pl
new file mode 100644 (file)
index 0000000..66e8c75
--- /dev/null
@@ -0,0 +1,155 @@
+# @tag: USTVA_abstraction
+# @description: Abstraktion der USTVA Report Daten. Dies vereinfacht die Integration von Steuerberichten anderer Nationen in Lx-Office.
+# @depends: release_2_4_2
+
+# Abstraktionlayer between general Taxreports and USTVA
+# Most of the data and structures are not used yet, but maybe in future, 
+# if there are other international customizings are requested...
+
+###################
+
+die("This script cannot be run from the command line.") unless ($main::form);
+
+sub do_query {
+  my ($query, $may_fail) = @_;
+
+  if (!$dbh->do($query)) {
+    mydberror($query) unless ($may_fail);
+    $dbh->rollback();
+    $dbh->begin_work();
+  }
+}
+
+
+sub create_tables {
+
+  # Watch out, SCHEMAs are new in Lx!
+  my @queries = ( # Watch out, it's a normal array!
+      q{ CREATE SCHEMA tax;
+      },
+      q{ CREATE TABLE tax.report_categorys (
+           id              integer NOT NULL PRIMARY KEY,
+           description     text,
+           subdescription  text
+         );
+      },              
+      q{ CREATE TABLE tax.report_headings (
+           id              integer NOT NULL PRIMARY KEY,
+           category_id     integer NOT NULL REFERENCES tax.report_categorys(id),
+           type            text,
+           description     text,
+           subdescription  text
+         );
+      },
+      q{ CREATE TABLE tax.report_variables (
+           id            integer NOT NULL PRIMARY KEY,
+           position      text NOT NULL,
+           heading_id    integer REFERENCES tax.report_headings(id),
+           description   text,
+           taxbase       text,
+           dec_places    text,
+           valid_from    date
+         );
+      },
+  );
+
+  do_query("DROP SCHEMA tax CASCADE;", 1);
+  map({ do_query($_, 0); } @queries);
+  
+  return 1;
+  
+}
+
+sub do_copy {
+
+  my @copy_statements = (
+    "COPY tax.report_categorys FROM STDIN WITH DELIMITER ';'",
+    "COPY tax.report_headings FROM STDIN WITH DELIMITER ';'", 
+    "COPY tax.report_variables FROM STDIN WITH DELIMITER ';'",
+  );
+
+  my @copy_data = (
+    [ "0;;",
+      "1;Lieferungen und sonstige Leistungen;(einschließlich unentgeltlicher Wertabgaben)",
+      "2;Innergemeinschaftliche Erwerbe;",
+      "3;Ergänzende Angaben zu Umsätzen;",
+      "99;Summe;",
+    ],
+    ["0;0;;;",
+     "1;1;received;Steuerfreie Umsätze mit Vorsteuerabzug;",
+     "2;1;recieved;Steuerfreie Umsätze ohne Vorsteuerabzug;",
+     "3;1;recieved;Steuerpflichtige Umsätze;(Lieferungen und sonstige Leistungen einschl. unentgeltlicher Wertabgaben)",
+     "4;2;recieved;Steuerfreie innergemeinschaftliche Erwerbe;",
+     "5;2;recieved;Steuerpflichtige innergemeinschaftliche Erwerbe;",
+     "6;3;recieved;Umsätze, für die als Leistungsempfänger die Steuer nach § 13b Abs. 2 UStG geschuldet wird;",
+     "66;3;recieved;;",
+     "7;3;paied;Abziehbare Vorsteuerbeträge;",
+     "8;3;paied;Andere Steuerbeträge;",
+     "99;99;;Summe;",
+    ],
+    ["0;keine;0;< < < keine UStVa Position > > >;;;19700101",
+     "1;41;1;Innergemeinschaftliche Lieferungen (§ 4 Nr. 1 Buchst. b UStG) an Abnehmer mit USt-IdNr.;0;0;19700101",
+     "2;44;1;neuer Fahrzeuge an Abnehmer ohne USt-IdNr.;0;0;19700101",
+     "3;49;1;neuer Fahrzeuge außerhalb eines Unternehmens (§ 2a UStG);0;0;19700101",
+     "4;43;1;Weitere steuerfreie Umsätze mit Vorsteuerabzug;0;0;19700101",
+     "5;48;2;Umsätze nach § 4 Nr. 8 bis 28 UStG;0;0;19700101",
+     "6;51;3;zum Steuersatz von 16 %;0;0;19700101",
+     "7;511;3;;6;2;19700101",
+     "8;81;3;zum Steuersatz von 19 %;0;0;19700101",
+     "9;811;3;;8;2;19700101",
+     "10;86;3;zum Steuersatz von 7 %;0;0;19700101",
+     "11;861;3;;10;2;19700101",
+     "12;35;3;Umsätze, die anderen Steuersätzen unterliegen;0;0;19700101",
+     "13;36;3;;12;2;19700101",
+     "14;77;3;Lieferungen in das übrige Gemeinschaftsgebiet an Abnehmer mit USt-IdNr.;0;0;19700101",
+     "15;76;3;Umsätze, für die eine Steuer nach § 24 UStG zu entrichten ist;0;0;19700101",
+     "16;80;3;;15;2;19700101",
+     "17;91;4;Erwerbe nach § 4b UStG;0;0;19700101",
+     "18;97;5;zum Steuersatz von 16 %;0;0;19700101",
+     "19;971;5;;18;2;19700101",
+     "20;89;5;zum Steuersatz von 19 %;0;0;19700101",
+     "21;891;5;;20;2;19700101",
+     "22;93;5;zum Steuersatz von 7 %;0;0;19700101",
+     "23;931;5;;22;2;19700101",
+     "24;95;5;zu anderen Steuersätzen;0;0;19700101",
+     "25;98;5;;24;2;19700101",
+     "26;94;5;neuer Fahrzeuge von Lieferern ohne USt-IdNr. zum allgemeinen Steuersatz;0;0;19700101",
+     "27;96;5;;26;2;19700101",
+     "28;42;66;Lieferungen des ersten Abnehmers bei innergemeinschaftlichen Dreiecksgeschäften (§ 25b Abs. 2 UStG);0;0;19700101",
+     "29;60;66;Steuerpflichtige Umsätze im Sinne des § 13b Abs. 1 Satz 1 Nr. 1 bis 5 UStG, für die der Leistungsempfänger die Steuer schuldet;0;0;19700101",
+     "30;45;66;Nicht steuerbare Umsätze (Leistungsort nicht im Inland);0;0;19700101",
+     "31;52;6;Leistungen eines im Ausland ansässigen Unternehmers (§ 13b Abs. 1 Satz 1 Nr. 1 und 5 UStG);0;0;19700101",
+     "32;53;6;;31;2;19700101",
+     "33;73;6;Lieferungen sicherungsübereigneter Gegenstände und Umsätze, die unter das GrEStG fallen (§ 13b Abs. 1 Satz 1 Nr. 2 und 3 UStG);0;0;19700101",
+     "34;74;6;;33;2;19700101",
+     "35;84;6;Bauleistungen eines im Inland ansässigen Unternehmers (§ 13b Abs. 1 Satz 1 Nr. 4 UStG);0;0;19700101",
+     "36;85;6;;35;2;19700101",
+     "37;65;6;Steuer infolge Wechsels der Besteuerungsform sowie Nachsteuer auf versteuerte Anzahlungen u. ä. wegen Steuersatzänderung;;2;19700101",
+     "38;66;7;Vorsteuerbeträge aus Rechnungen von anderen Unternehmern (§ 15 Abs. 1 Satz 1 Nr. 1 UStG), aus Leistungen im Sinne des § 13a Abs. 1 Nr. 6 UStG (§ 15 Abs. 1 Satz 1 Nr. 5 UStG) und aus innergemeinschaftlichen Dreiecksgeschäften (§ 25b Abs. 5 UStG);;2;19700101",
+     "39;61;7;Vorsteuerbeträge aus dem innergemeinschaftlichen Erwerb von Gegenständen (§ 15 Abs. 1 Satz 1 Nr. 3 UStG);;2;19700101",
+     "40;62;7;Entrichtete Einfuhrumsatzsteuer (§ 15 Abs. 1 Satz 1 Nr. 2 UStG);;2;19700101",
+     "41;67;7;Vorsteuerbeträge aus Leistungen im Sinne des § 13b Abs. 1 UStG (§ 15 Abs. 1 Satz 1 Nr. 4 UStG);;2;19700101",
+     "42;63;7;Vorsteuerbeträge, die nach allgemeinen Durchschnittssätzen berechnet sind (§§ 23 und 23a UStG);;2;19700101",
+     "43;64;7;Berichtigung des Vorsteuerabzugs (§ 15a UStG);;2;19700101",
+     "44;59;7;Vorsteuerabzug für innergemeinschaftliche Lieferungen neuer Fahrzeuge außerhalb eines Unternehmens (§ 2a UStG) sowie von Kleinunternehmern im Sinne des § 19 Abs. 1 UStG (§ 15 Abs. 4a UStG);;2;19700101",
+     "45;69;8;in Rechnungen unrichtig oder unberechtigt ausgewiesene Steuerbeträge (§ 14c UStG) sowie Steuerbeträge, die nach § 4 Nr. 4a Satz 1 Buchst. a Satz 2, § 6a Abs. 4 Satz 2, § 17 Abs. 1 Satz 6 oder § 25b Abs. 2 UStG geschuldet werden;;2;19700101",
+     "46;39;8;Anrechnung (Abzug) der festgesetzten Sondervorauszahlung für Dauerfristverlängerung (nur auszufüllen in der letzten Voranmeldung des Besteuerungszeitraums, in der Regel Dezember);;2;19700101",
+  ],
+  );
+
+  for my $statement ( 0 .. $#copy_statements ) {
+
+    do_query($copy_statements[$statement], 0);
+    
+    for my $copy_line ( 1 .. $#{$copy_data[$statement]} ) {
+      #print $copy_data[$statement][$copy_line] . "<br />"
+      $dbh->pg_putline($copy_data[$statement][$copy_line] . "\n");
+    }
+    $dbh->pg_endcopy;
+  }
+  return 1;
+}
+
+
+return create_tables() && do_copy();
+