From: Udo Spallek Date: Sun, 29 Apr 2007 14:44:46 +0000 (+0000) Subject: Verlagern der USTVA Kennziffern auf einen zentralen Datenbankeintrag. X-Git-Tag: release-2.4.3^2~420 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=c1d8418b5244d224298431369c69ea971a69f3c2;p=kivitendo-erp.git Verlagern der USTVA Kennziffern auf einen zentralen Datenbankeintrag. 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. --- diff --git a/SL/USTVA.pm b/SL/USTVA.pm index 354e13e18..9f1551ed4 100644 --- a/SL/USTVA.pm +++ b/SL/USTVA.pm @@ -25,6 +25,55 @@ 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 diff --git a/bin/mozilla/ustva.pl b/bin/mozilla/ustva.pl index 3e353e832..8d0592718 100644 --- a/bin/mozilla/ustva.pl +++ b/bin/mozilla/ustva.pl @@ -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 index 000000000..66e8c752d --- /dev/null +++ b/sql/Pg-upgrade2/USTVA_abstraction.pl @@ -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] . "
" + $dbh->pg_putline($copy_data[$statement][$copy_line] . "\n"); + } + $dbh->pg_endcopy; + } + return 1; +} + + +return create_tables() && do_copy(); +