#=====================================================================
-# Lx-Office ERP
+# kivitendo ERP
# Copyright (c) 2004 by Udo Spallek, Aachen
#
# Author: Udo Spallek
package USTVA;
+use List::Util qw(first);
+
use SL::DBUtils;
+use utf8;
+use strict;
+
+my @tax_office_information = (
+ { 'id' => 8, 'name' => 'Baden-Württemberg', 'taxbird_nr' => '0', 'elster_format' => 'FF/BBB/UUUUP', },
+ { 'id' => 9, 'name' => 'Bayern', 'taxbird_nr' => '1', 'elster_format' => 'FFF/BBB/UUUUP', },
+ { 'id' => 11, 'name' => 'Berlin', 'taxbird_nr' => '2', 'elster_format' => 'FF/BBB/UUUUP', },
+ { 'id' => 12, 'name' => 'Brandenburg', 'taxbird_nr' => '3', 'elster_format' => 'FFF/BBB/UUUUP', },
+ { 'id' => 4, 'name' => 'Bremen', 'taxbird_nr' => '4', 'elster_format' => 'FF BBB UUUUP', },
+ { 'id' => 2, 'name' => 'Hamburg', 'taxbird_nr' => '5', 'elster_format' => 'FF/BBB/UUUUP', },
+ { 'id' => 6, 'name' => 'Hessen', 'taxbird_nr' => '6', 'elster_format' => '0FF BBB UUUUP', },
+ { 'id' => 13, 'name' => 'Mecklenburg-Vorpommern', 'taxbird_nr' => '7', 'elster_format' => 'FFF/BBB/UUUUP', },
+ { 'id' => 3, 'name' => 'Niedersachsen', 'taxbird_nr' => '8', 'elster_format' => 'FF/BBB/UUUUP', },
+ { 'id' => 5, 'name' => 'Nordrhein-Westfalen', 'taxbird_nr' => '9', 'elster_format' => 'FFF/BBBB/UUUP', },
+ { 'id' => 7, 'name' => 'Rheinland-Pfalz', 'taxbird_nr' => '10', 'elster_format' => 'FF/BBB/UUUU/P', },
+ { 'id' => 10, 'name' => 'Saarland', 'taxbird_nr' => '11', 'elster_format' => 'FFF/BBB/UUUUP', },
+ { 'id' => 14, 'name' => 'Sachsen', 'taxbird_nr' => '12', 'elster_format' => 'FFF/BBB/UUUUP', },
+ { 'id' => 15, 'name' => 'Sachsen-Anhalt', 'taxbird_nr' => '13', 'elster_format' => 'FFF/BBB/UUUUP', },
+ { 'id' => 1, 'name' => 'Schleswig-Holstein', 'taxbird_nr' => '14', 'elster_format' => 'FF BBB UUUUP', },
+ { 'id' => 16, 'name' => 'Thüringen', 'taxbird_nr' => '15', 'elster_format' => 'FFF/BBB/UUUUP', },
+ );
+
+sub new {
+ my $type = shift;
+
+ my $self = {};
+
+ bless $self, $type;
+
+ $self->_init(@_);
+
+ return $self;
+}
+
+sub _init {
+ my $self = shift;
+
+ $self->{tax_office_information} = [];
+
+ foreach (@tax_office_information) {
+ my $entry = \%{ $_ };
+ $entry->{name} = $::locale->{iconv_utf8}->convert($entry->{name});
+ push @{ $self->{tax_office_information} }, $entry;
+ }
+}
+
sub get_coa {
my ( $self, $form, $myconfig) = @_;
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 $where_type = $type ? "AND tax.report_headings.type = '$type'" : '';
+ my $where_dcp = defined $dec_places ? "AND tax.report_variables.dec_places = '$dec_places'" : '';
my $query = qq|
SELECT $attribute
sub create_steuernummer {
$main::lxdebug->enter_sub();
- $part = $form->{part};
- $patterncount = $form->{patterncount};
- $delimiter = $form->{delimiter};
- $elster_pattern = $form->{elster_pattern};
+ my $form = $main::form;
+
+ our ($elster_FFFF);
+
+ my $part = $form->{part};
+ my $patterncount = $form->{patterncount};
+ my $delimiter = $form->{delimiter};
+ my $elster_pattern = $form->{elster_pattern};
# rebuild steuernummer and elstersteuernummer
# es gibt eine gespeicherte steuernummer $form->{steuernummer}
my $h = 0;
my $i = 0;
- $steuernummer_new = $part;
- $elstersteuernummer_new = $elster_FFFF;
- $elstersteuernummer_new .= '0';
+ my $steuernummer_new = $part;
+ my $elstersteuernummer_new = $elster_FFFF;
+ $elstersteuernummer_new .= '0';
for ($h = 1; $h < $patterncount; $h++) {
$steuernummer_new .= qq|$delimiter|;
$main::lxdebug->enter_sub();
my ($self, $elsterland, $elsterFFFF, $steuernummer) = @_;
+ our ($elster_FFFF, $elster_land);
my $steuernummer_input = '';
$stnr =~ s/\D+//g;
#Pattern description Elstersteuernummer
- my %elster_STNRformat = (
- 'Mecklenburg Vorpommern' => 'FFF/BBB/UUUUP', # '/' 3
- 'Hessen' => '0FF BBB UUUUP', # ' ' 3
- 'Nordrhein Westfalen' => 'FFF/BBBB/UUUP', # '/' 3
- 'Schleswig Holstein' => 'FF BBB UUUUP', # ' ' 2
- 'Berlin' => 'FF/BBB/UUUUP', # '/' 3
- 'Thüringen' => 'FFF/BBB/UUUUP', # '/' 3
- 'Sachsen' => 'FFF/BBB/UUUUP', # '/' 3
- 'Hamburg' => 'FF/BBB/UUUUP', # '/' 3
- 'Baden Württemberg' => 'FF/BBB/UUUUP', # '/' 2
- 'Sachsen Anhalt' => 'FFF/BBB/UUUUP', # '/' 3
- 'Saarland' => 'FFF/BBB/UUUUP', # '/' 3
- 'Bremen' => 'FF BBB UUUUP', # ' ' 3
- 'Bayern' => 'FFF/BBB/UUUUP', # '/' 3
- 'Rheinland Pfalz' => 'FF/BBB/UUUU/P', # '/' 4
- 'Niedersachsen' => 'FF/BBB/UUUUP', # '/' 3
- 'Brandenburg' => 'FFF/BBB/UUUUP', # '/' 3
- );
#split the pattern
- my $elster_pattern = $elster_STNRformat{$elster_land};
+ my $tax_office = first { $_->{name} eq $elster_land } @{ $self->{tax_office_information} };
+ my $elster_pattern = $tax_office->{elster_format};
my @elster_pattern = split(' ', $elster_pattern);
my $delimiter = ' ';
my $patterncount = @elster_pattern;
# use SL::Form;
- # Referenz wird übergeben, hash of hash wird nicht
- # in neues Hash kopiert, sondern direkt über die Referenz verändert
- # Prototyp für diese Konstruktion
+ # Referenz wird übergeben, hash of hash wird nicht
+ # in neues Hash kopiert, sondern direkt über die Referenz verändert
+ # Prototyp für diese Konstruktion
my ($self, $land, $elsterFFFF, $elster_init) = @_;
my $ffff = '';
my $checked = '';
$checked = 'checked' if ($elsterFFFF eq '' and $land eq '');
+ my %elster_land_fa;
- #if ($ENV{HTTP_USER_AGENT} =~ /(mozilla|opera|w3m)/i){
- #$terminal='mozilla';
- #} elsif ($ENV{HTTP_USER_AGENT} =~ /(links|lynx)/i){
- #$terminal = 'lynx';
- #}
-
- #if ( $terminal eq 'mozilla' or $terminal eq 'js' ) {
my $fa_auswahl = qq|
<script language="Javascript">
function update_auswahl()
var elsterBLAuswahl = document.verzeichnis.elsterland_new;
var elsterFAAuswahl = document.verzeichnis.elsterFFFF_new;
- elsterFAAuswahl.options.length = 0; // dropdown aufräumen
+ elsterFAAuswahl.options.length = 0; // dropdown aufräumen
|;
- foreach $elster_land (sort keys %$elster_init) {
+ foreach my $elster_land (sort keys %$elster_init) {
$fa_auswahl .= qq|
if (elsterBLAuswahl.options[elsterBLAuswahl.selectedIndex].
value == "$elster_land")
{
|;
my $j = 0;
- my %elster_land_fa = ();
+ %elster_land_fa = ();
$FFFF = '';
for $FFFF (keys %{ $elster_init->{$elster_land} }) {
$elster_land_fa{$FFFF} = $elster_init->{$elster_land}->{$FFFF}->[0];
if ($land eq '') {
$fa_auswahl .= qq|<option value="Auswahl" $checked>| . $main::locale->text('Select federal state...') . qq|</option>\n|;
}
- foreach $elster_land (sort keys %$elster_init) {
+ foreach my $elster_land (sort keys %$elster_init) {
$fa_auswahl .= qq|
<option value="$elster_land"|;
if ($elster_land eq $land and $checked eq '') {
</body>
|;
- exit;
+ ::end_of_request();
} else {
$main::lxdebug->leave_sub();
}
+# 20.10.2009 sschoeling: this sub seems to be orphaned.
sub stichtag {
$main::lxdebug->enter_sub();
# noch nicht fertig
- # soll mal eine Erinnerungsfunktion für USTVA Abgaben werden, die automatisch
- # den Termin der nächsten USTVA anzeigt.
+ # soll mal eine Erinnerungsfunktion für USTVA Abgaben werden, die automatisch
+ # den Termin der nächsten USTVA anzeigt.
#
#
my ($today, $FA_dauerfrist, $FA_voranmeld) = @_;
#$today =today * 1;
$today =~ /(\d\d\d\d)(\d\d)(\d\d)/;
- $year = $1;
- $month = $2;
- $day = $3;
- $yy = $year;
- $mm = $month;
- $yymmdd = "$year$month$day" * 1;
- $mmdd = "$month$day" * 1;
- $stichtag = '';
+ my $year = $1;
+ my $month = $2;
+ my $day = $3;
+ my $yy = $year;
+ my $mm = $month;
+ my $yymmdd = "$year$month$day" * 1;
+ my $mmdd = "$month$day" * 1;
+ my $stichtag = '';
#$tage_bis = '1234';
#$ical = '...vcal format';
#if ($FA_voranmeld eq 'month'){
- %liste = ("0110" => 'December',
- "0210" => 'January',
- "0310" => 'February',
- "0410" => 'March',
- "0510" => 'April',
- "0610" => 'May',
- "0710" => 'June',
- "0810" => 'July',
- "0910" => 'August',
- "1010" => 'September',
- "1110" => 'October',
- "1210" => 'November');
+ my %liste = (
+ "0110" => 'December',
+ "0210" => 'January',
+ "0310" => 'February',
+ "0410" => 'March',
+ "0510" => 'April',
+ "0610" => 'May',
+ "0710" => 'June',
+ "0810" => 'July',
+ "0910" => 'August',
+ "1010" => 'September',
+ "1110" => 'October',
+ "1210" => 'November',
+ );
#$mm += $dauerfrist
#$month *= 1;
$month += 1 if ($day > 10);
$month = sprintf("%02d", $month);
$stichtag = $year . $month . "10";
- $ust_va = $month . "10";
+ my $ust_va = $month . "10";
- foreach $date (%liste) {
+ foreach my $date (%liste) {
$ust_va = $liste{$date} if ($date eq $stichtag);
}
#$stichtag =~ /([\d]\d)(\d\d)$/
#$stichtag = "$1.$2.$yy"
#$stichtag=$1;
+ our $description; # most probably not existent.
+ our $tage_bis; # most probably not existent.
+ our $ical; # most probably not existent.
+
$main::lxdebug->leave_sub();
return ($stichtag, $description, $tage_bis, $ical);
}
my $filename = "sql/$table.sql";
my $tst = $dbh->prepare("SELECT * FROM $table");
- $tst->execute;
- if ($DBI::err) {
-
+ $tst->execute || do {
#There is no table, read the table from sql/finanzamt.sql
print qq|<p>Bitte warten, Tabelle $table wird einmalig in Datenbank:
- $myconfig->{dbname} als Benutzer: $myconfig->{dbuser} hinzugefügt...</p>|;
+ $myconfig->{dbname} als Benutzer: $myconfig->{dbuser} hinzugefügt...</p>|;
process_query($form, $dbh, $filename) || $self->error(DBI->errstr);
#execute second last call
my $dbh = $form->dbconnect($myconfig) or $self->error(DBI->errstr);
$dbh->disconnect();
- }
+ };
$tst->finish();
#$dbh->disconnect();
my @vars = (
'FA_Land_Nr', # 0
'FA_BUFA_Nr', # 1
- #'FA_Verteiler', # 2
+ #'FA_Verteiler', # 2
'FA_Name', # 3
'FA_Strasse', # 4
'FA_PLZ', # 5
'FA_BLZ_1', # 12
'FA_Kontonummer_1', # 13
'FA_Bankbezeichnung_1', # 14
- #'FA_BankIBAN_1', # 15
- #'FA_BankBIC_1', # 16
- #'FA_BankInhaber_BUFA_Nr_1', # 17
+ #'FA_BankIBAN_1', # 15
+ #'FA_BankBIC_1', # 16
+ #'FA_BankInhaber_BUFA_Nr_1', # 17
'FA_BLZ_2', # 18
'FA_Kontonummer_2', # 19
'FA_Bankbezeichnung_2', # 20
- #'FA_BankIBAN_2', # 21
- #'FA_BankBIC_2', # 22
- #'FA_BankInhaber_BUFA_Nr_2', # 23
+ #'FA_BankIBAN_2', # 21
+ #'FA_BankBIC_2', # 22
+ #'FA_BankInhaber_BUFA_Nr_2', # 23
'FA_Oeffnungszeiten', # 24
'FA_Email', # 25
'FA_Internet' # 26
- #'FA_zustaendige_Hauptstelle_BUFA_Nr', # 27
- #'FA_zustaendige_vorgesetzte_Finanzbehoerde' # 28
+ #'FA_zustaendige_Hauptstelle_BUFA_Nr', # 27
+ #'FA_zustaendige_vorgesetzte_Finanzbehoerde' # 28
);
my $field = join(', ', @vars);
$sth->execute || $form->dberror($query);
my $array_ref = $sth->fetchall_arrayref();
my $land = '';
+ my %finanzamt;
foreach my $row (@$array_ref) {
my $FA_finanzamt = $row;
- $land = 'Schleswig Holstein' if (@$FA_finanzamt[0] eq '1');
- $land = 'Hamburg' if (@$FA_finanzamt[0] eq '2');
- $land = 'Niedersachsen' if (@$FA_finanzamt[0] eq '3');
- $land = 'Bremen' if (@$FA_finanzamt[0] eq '4');
- $land = 'Nordrhein Westfalen' if (@$FA_finanzamt[0] eq '5');
- $land = 'Hessen' if (@$FA_finanzamt[0] eq '6');
- $land = 'Rheinland Pfalz' if (@$FA_finanzamt[0] eq '7');
- $land = 'Baden Württemberg' if (@$FA_finanzamt[0] eq '8');
- $land = 'Bayern' if (@$FA_finanzamt[0] eq '9');
- $land = 'Saarland' if (@$FA_finanzamt[0] eq '10');
- $land = 'Berlin' if (@$FA_finanzamt[0] eq '11');
- $land = 'Brandenburg' if (@$FA_finanzamt[0] eq '12');
- $land = 'Mecklenburg Vorpommern' if (@$FA_finanzamt[0] eq '13');
- $land = 'Sachsen' if (@$FA_finanzamt[0] eq '14');
- $land = 'Sachsen Anhalt' if (@$FA_finanzamt[0] eq '15');
- $land = 'Thüringen' if (@$FA_finanzamt[0] eq '16');
-
- $land = $main::locale->{iconv}->convert($land);
+ my $tax_office = first { $_->{id} == $FA_finanzamt->[0] } @{ $self->{tax_office_information} };
+ $land = $tax_office->{name};
+
+ # $land = $main::locale->{iconv}->convert($land);
my $ffff = @$FA_finanzamt[1];
$form->{decimalplaces} *= 1;
- foreach $item (@category_cent) {
+ foreach my $item (@category_cent) {
$form->{"$item"} = 0;
}
- foreach $item (@category_euro) {
+ foreach my $item (@category_euro) {
$form->{"$item"} = 0;
}
my $coa_name = coa_get($dbh);
# Controlvariable for templates
$form->{"$coa_name"} = '1';
- $main::lxdebug->message(LXDebug::DEBUG2, "COA: '$form->{coa}', \$form->{$coa_name} = 1");
+ $main::lxdebug->message(LXDebug->DEBUG2(), "COA: '$form->{coa}', \$form->{$coa_name} = 1");
&get_accounts_ustva($dbh, $last_period, $form->{fromdate}, $form->{todate},
$form, $category);
}
- # Fixme: Wird auch noch für Oesterreich gebraucht,
+ # Fixme: Wird auch noch für Oesterreich gebraucht,
# weil kein eigenes Ausgabeformular
- # sotte aber aus der allgeméinen Steuerberechnung verschwinden
+ # sotte aber aus der allgeméinen Steuerberechnung verschwinden
#
# Berechnung der USTVA Formularfelder laut Bogen 207
#
sub coa_get {
my ($dbh) = @_;
+ my $form = $main::form;
my $query= qq|SELECT coa FROM defaults|;
$sth->execute || $form->dberror($query);
- ($ref) = $sth->fetchrow_array;
+ my ($ref) = $sth->fetchrow_array;
return $ref;
$main::lxdebug->enter_sub();
my ($dbh, $last_period, $fromdate, $todate, $form, $category) = @_;
+ our ($dpt_join);
my $query;
my $where = "";
#########################################
# Ausgaben und Gl Buchungen sind gleich
- # für Ist- und Soll-Versteuerung
+ # für Ist- und Soll-Versteuerung
#########################################
$query .= qq|
UNION -- alle Ausgaben AP erfassen
my $ref;
# Show all $query in Debuglevel LXDebug::QUERY
- $callingdetails = (caller (0))[3];
- $main::lxdebug->message(LXDebug::QUERY, "$callingdetails \$query=\n $query");
+ my $callingdetails = (caller (0))[3];
+ $main::lxdebug->message(LXDebug->QUERY(), "$callingdetails \$query=\n $query");
my $sth = $dbh->prepare($query);
$sth->execute || $form->dberror($query);
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
# Bug 365 solved?!
$ref->{amount} *= -1;
$form->{ $ref->{$category} } += $ref->{amount};
my ($self, $userspath, $filename) = @_;
- $form->error("Missing Parameter: @_") if !$userspath || !$filename;
-
my $form = $main::form;
+ $form->error("Missing Parameter: @_") if !$userspath || !$filename;
+
$filename = "$form->{login}_$filename";
$filename =~ s|.*/||;
$filename = "$userspath/$filename";
- open my $FACONF, "<", $filename or sub {# Annon Sub
+ open my $FACONF, "<", $filename or do {# Annon Sub
# catch open error
# create file if file does not exist
open my $FANEW, ">", $filename or $form->error("CREATE: $filename : $!");