From c1d8418b5244d224298431369c69ea971a69f3c2 Mon Sep 17 00:00:00 2001 From: Udo Spallek Date: Sun, 29 Apr 2007 14:44:46 +0000 Subject: [PATCH] =?utf8?q?Verlagern=20der=20USTVA=20Kennziffern=20auf=20ei?= =?utf8?q?nen=20zentralen=20Datenbankeintrag.=20Dies=20verhindert=20Proble?= =?utf8?q?me,=20dass=20manche=20Kennziffern=20in=20einzelnen=20Ausgabemedi?= =?utf8?q?en=20nicht=20erscheinen,=20in=20anderen=20jedoch=20schon.=20Auch?= =?utf8?q?=20bietet=20die=20Verlagerung=20auf=20die=20Datenbank=20-=20in?= =?utf8?q?=20einem=20sp=C3=A4teren=20Schritt=20-=20die=20Abstraktion=20von?= =?utf8?q?=20Steuerreports=20auf=20verschiedene=20internationale=20Gegeben?= =?utf8?q?heiten.=20Zur=20Vereinfachung=20habe=20ich=20das=20Schema=20tax.?= =?utf8?q?*=20eingefuehrt,=20in=20dem=20perspektivisch=20alle=20Steuerrepo?= =?utf8?q?rt=20relevanten=20Tabellen=20einzug=20halten=20koennen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- SL/USTVA.pm | 100 ++++++++++++++--- bin/mozilla/ustva.pl | 28 +++-- sql/Pg-upgrade2/USTVA_abstraction.pl | 155 +++++++++++++++++++++++++++ 3 files changed, 256 insertions(+), 27 deletions(-) create mode 100644 sql/Pg-upgrade2/USTVA_abstraction.pl 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(); + -- 2.20.1