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();
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++) {
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;
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);
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
--- /dev/null
+# @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();
+