Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 18942bd7

Von Udo Spallek vor etwa 18 Jahren hinzugefügt

  • ID 18942bd70d66bd2348c6550887bc2994dfcaf358
  • Vorgänger 7643cf44
  • Nachfolger 635dd08d

USTVA: Patch zur besseren Unterstuetzung der oesterreichischen Verhaeltnisse.

Unterschiede anzeigen:

SL/USTVA.pm
$form->{"$item"} = 0;
}
$form->{coa} = coa_get($dbh);
$main::lxdebug->message(LXDebug::DEBUG2, "COA: $form->{coa}");
&get_accounts_ustva($dbh, $last_period, $form->{fromdate}, $form->{todate},
$form, $category);
###########################################
#
# Nationspecific Modfications
#
###########################################
# Germany
if ( $form->{coa} eq 'Germany-DATEV-SKR03EU' or $form->{coa} eq 'Germany-DATEV-SKR04EU'){
# 16%/19% Umstellung
# Umordnen der Kennziffern
if ( $form->{year} < 2007) {
$form->{35} += $form->{81};
$form->{36} += $form->{811};
$form->{95} += $form->{89};
$form->{98} += $form->{891};
map { delete $form->{$_} } qw(81 811 89 891);
} else {
$form->{35} += $form->{51};
$form->{36} += $form->{511};
$form->{95} += $form->{97};
$form->{98} += $form->{971};
map { delete $form->{$_} } qw(51 511 97 971);
}
# 16%/19% Umstellung
# Umordnen der Kennziffern
if ( $form->{year} < 2007) {
$form->{35} += $form->{81};
$form->{36} += $form->{811};
$form->{95} += $form->{89};
$form->{98} += $form->{891};
map { delete $form->{$_} } qw(81 811 89 891);
} else {
$form->{35} += $form->{51};
$form->{36} += $form->{511};
$form->{95} += $form->{97};
$form->{98} += $form->{971};
map { delete $form->{$_} } qw(51 511 97 971);
}
# Fixme: Wird auch noch f?r Oesterreich gebraucht,
# weil kein eigenes Ausgabeformular
# sotte aber aus der allgem?inen Steuerberechnung verschwinden
#
# Berechnung der USTVA Formularfelder laut Bogen 207
#
......
$main::lxdebug->leave_sub();
}
sub coa_get {
my ($dbh) = @_;
my $query= qq|SELECT coa FROM defaults|;
my $sth = $dbh->prepare($query);
$sth->execute || $form->dberror($query);
($ref) = $sth->fetchrow_array;
return $ref;
};
sub get_accounts_ustva {
$main::lxdebug->enter_sub();
......
my $APwhere = '';
my $arwhere = "";
my $item;
my $gltaxkey_where = "(tk.pos_ustva>=59 AND tk.pos_ustva<=66)";
my $gltaxkey_where = "(tk.pos_ustva>=59 AND tk.pos_ustva<=66)";
if ($fromdate) {
if ($form->{method} eq 'cash') {
......
if ($todate) {
$where .= " AND ac.transdate <= '$todate'";
$ARwhere .= " AND acc.transdate <= '$todate'";
$subwhere .= " AND transdate <= '$todate'";
$APwhere .= " AND AP.transdate <= '$todate'";
}
if ($department_id) {
......
sum(ac.amount) AS amount,
tk.pos_ustva
FROM acc_trans ac
JOIN AP ON (AP.id = ac.trans_id )
JOIN ap ON (ap.id = ac.trans_id )
JOIN chart c ON (c.id = ac.chart_id)
LEFT JOIN taxkeys tk ON (
tk.id = (
SELECT id FROM taxkeys
WHERE chart_id=ac.chart_id
--AND taxkey_id=ac.taxkey
AND taxkey_id = ac.taxkey
AND startdate <= COALESCE(AP.transdate)
ORDER BY startdate DESC LIMIT 1
)
)
WHERE
1=1
$APwhere
$where
$dpt_where
$project
GROUP BY tk.pos_ustva
......
tk.id = (
SELECT id FROM taxkeys
WHERE chart_id=ac.chart_id
--AND taxkey_id=ac.taxkey
AND NOT $gltaxkey_where
AND startdate <= COALESCE(ac.transdate)
ORDER BY startdate DESC LIMIT 1
......
tk.id = (
SELECT id FROM taxkeys
WHERE chart_id=ac.chart_id
--AND taxkey_id=ac.taxkey
AND $gltaxkey_where
AND startdate <= COALESCE(ac.transdate)
ORDER BY startdate DESC LIMIT 1
bin/mozilla/ustva.pl
$form->{co_city} =~ s/\\n//g;
}
################################
#
# Outputformat specific customisation's
# Nation specific customisations
#
################################
# Germany
if ( $form->{coa} eq 'Germany-DATEV-SKR03EU' or $form->{coa} eq 'Germany-DATEV-SKR04EU') {
#
# 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_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
);
$form->{id} = [];
$form->{amount} = [];
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
);
$form->{id} = [];
$form->{amount} = [];
if ( $form->{format} eq 'pdf' or $form->{format} eq 'postscript') {
if ( $form->{format} eq 'pdf' or $form->{format} eq 'postscript') {
$form->{IN} = "$form->{type}-$form->{year}.tex";
$form->{padding} = "~~";
$form->{bold} = "\textbf{";
$form->{endbold} = "}";
$form->{br} = '\\\\';
$form->{IN} = "$form->{type}-$form->{year}.tex";
$form->{padding} = "~~";
$form->{bold} = "\textbf{";
$form->{endbold} = "}";
$form->{br} = '\\\\';
# Zahlenformatierung f?r Latex USTVA Formulare
# Zahlenformatierung f?r Latex USTVA Formulare
foreach my $number (@category_euro) {
$form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '0', '');
}
foreach my $number (@category_euro) {
$form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '0', '');
}
my ${decimal_comma} = ( $myconfig{numberformat} eq '1.000,00'
or $myconfig{numberformat} eq '1000,00' ) ? ',':'.';
my ${decimal_comma} = ( $myconfig{numberformat} eq '1.000,00'
or $myconfig{numberformat} eq '1000,00' ) ? ',':'.';
foreach my $number (@category_cent) {
$form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '');
$form->{$number} =~ s/${decimal_comma}/~~/g;
}
foreach my $number (@category_cent) {
$form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '');
$form->{$number} =~ s/${decimal_comma}/~~/g;
}
} elsif ( $form->{format} eq 'html') { # Formatierungen f?r HTML Ausgabe
} elsif ( $form->{format} eq 'html') { # Formatierungen f?r HTML Ausgabe
$form->{IN} = $form->{type} . '.html';
$form->{padding} = "&nbsp;&nbsp;";
$form->{bold} = "<b>";
$form->{endbold} = "</b>";
$form->{br} = "<br>";
$form->{address} =~ s/\\n/\n/g;
$form->{IN} = $form->{type} . '.html';
$form->{padding} = "&nbsp;&nbsp;";
$form->{bold} = "<b>";
$form->{endbold} = "</b>";
$form->{br} = "<br>";
$form->{address} =~ s/\\n/\n/g;
foreach $number (@category_cent) {
$form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '0');
}
foreach $number (@category_euro) {
$form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '0', '0');
}
foreach $number (@category_cent) {
$form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '0');
}
foreach $number (@category_euro) {
$form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '0', '0');
}
} elsif ( $form->{format} eq 'elsterwinston' ) {
} elsif ( $form->{format} eq 'elsterwinston' ) {
$form->{IN} = 'winston.xml';
#
# Build Winston filename
#
my $file = 'U'; # 1. char 'U' = USTVA
$file .= $form->{period};
#4. and 5. char = year modulo 100
$file .= sprintf("%02d", $form->{year} % 100);
#6. to 18. char = Elstersteuernummer
#Beispiel: Steuernummer in Bayern
#111/222/33334 ergibt f?r UStVA Jan 2004: U01049111022233334
$file .= $form->{elsterFFFF};
$file .= $form->{elstersteuernummer};
#file suffix
$file .= '.xml';
$form->{tmpfile} = "$userspath/$file";
$form->{attachment_filename} = "$file";
# Zahlenformatierung f?r Winston
$form->{IN} = 'winston.xml';
#
# Build Winston filename
#
my $file = 'U'; # 1. char 'U' = USTVA
$file .= $form->{period};
#4. and 5. char = year modulo 100
$file .= sprintf("%02d", $form->{year} % 100);
#6. to 18. char = Elstersteuernummer
#Beispiel: Steuernummer in Bayern
#111/222/33334 ergibt f?r UStVA Jan 2004: U01049111022233334
$file .= $form->{elsterFFFF};
$file .= $form->{elstersteuernummer};
#file suffix
$file .= '.xml';
$form->{tmpfile} = "$userspath/$file";
$form->{attachment_filename} = "$file";
# Zahlenformatierung f?r Winston
my $temp_numberformat = $myconfig{numberformat};
# Numberformat must be '1000.00' for Winston
$myconfig{numberformat} = '1000.00';
foreach my $number (@category_cent) {
$form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '2', '') : '';
}
foreach my $number (@category_euro) {
$form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '0', '') : '';
}
# Re-set Numberformat
$myconfig{numberformat} = $temp_numberformat;
my $temp_numberformat = $myconfig{numberformat};
# Numberformat must be '1000.00' for Winston
# push Kennziffern to <%foreach Array fo easyer
# output in xml format. Thx to Moritz.
my %winston_id_for = (
# No Winston remap?!
);
$myconfig{numberformat} = '1000.00';
foreach my $kennziffer (@category_cent, @category_euro) {
foreach my $number (@category_cent) {
$form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '2', '') : '';
}
foreach my $number (@category_euro) {
$form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '0', '') : '';
}
# Re-set Numberformat
$myconfig{numberformat} = $temp_numberformat;
next if ( $kennziffer =~ m/Z\d\d/);
next if ( $form->{$kennziffer} == 0 );
if (defined $winston_id_for{$kennziffer} ) {
push(@{ $form->{id}}, $winston_id_for{$kennziffer});
} else {
push(@{ $form->{id}}, "$kennziffer");
}
push(@{ $form->{amount}}, $form->{$kennziffer});
}
# push Kennziffern to <%foreach Array fo easyer
# output in xml format. Thx to Moritz.
my %winston_id_for = (
# No Winston remap?!
);
} elsif ( $form->{format} eq 'elstertaxbird' ) {
foreach my $kennziffer (@category_cent, @category_euro) {
# Define serveral filenames
$form->{IN} = 'taxbird.txb';
next if ( $kennziffer =~ m/Z\d\d/);
next if ( $form->{$kennziffer} == 0 );
$form->{attachment_filename} = "USTVA-" . $form->{period}
. sprintf("%02d", $form->{year} % 100) . ".txb";
$form->{tmpfile} = "$userspath/" . $form->{attachment_filename};
# TODO: set Output to UTF-8 or system Preference
#$form->{"iconv"} = Text::Iconv->new($myconfig{dbcharset}, "UTF-8");
#my $iconv = $self->{"iconv"};
#$iconv->convert($variable);
if ($form->{period} =~ /^[4]\d$/ ){
my %periods = ( # Lx => taxbird
'41' => '12',
'42' => '13',
'43' => '14',
'44' => '15',
);
if (defined $winston_id_for{$kennziffer} ) {
push(@{ $form->{id}}, $winston_id_for{$kennziffer});
foreach my $quarter ( keys %periods ) {
$form->{taxbird_period} = $periods{$quarter} if ( $form->{period} eq $quarter);
}
} elsif ($form->{period} =~ /^\d+$/ ) {
$form->{period} =~ s/^0//g;
my $period = $form->{period};
$period * 1;
$period--;
$form->{period} = $period;
} else {
push(@{ $form->{id}}, "$kennziffer");
$form->header;
USTVA::error( $locale->text('Wrong Period' ));
exit(0);
}
push(@{ $form->{amount}}, $form->{$kennziffer});
}
} elsif ( $form->{format} eq 'elstertaxbird' ) {
my %lands = ( # Lx => taxbird # TODO: besser als array...
'Baden W?rtemberg' => '0',
'Bayern' => '1',
'Berlin' => '2',
'Brandenburg' => '3',
'Bremen' => '4',
'Hamburg' => '5',
'Hessen' => '6',
'Mecklenburg Vorpommern' => '7',
'Niedersachsen' => '8',
'Nordrhein Westfalen' => '9',
'Rheinland Pfalz' => '10',
'Saarland' => '11',
'Sachsen' => '12',
'Sachsen Anhalt' => '13',
'Schleswig Holstein' => '14',
'Th?ringen' => '15',
);
foreach my $land ( keys %lands ){
$form->{taxbird_land_nr} = $lands{$land} if ($form->{elsterland} eq $land );
}
$form->{co_zip} = $form->{co_city};
$form->{co_zip} =~ s/\D//g;
$form->{co_city} =~ s/\d//g;
$form->{co_city} =~ s/^\s//g;
($form->{co_phone_prefix}, $form->{co_phone}) = split("-", $form->{tel});
$form->{co_phone_prefix} =~ s/\s//g;
$form->{co_phone} =~ s/\s//g;
$form->{taxbird_steuernummer} = $form->{steuernummer};
# $form->{taxbird_steuernummer} =~ s/\D//g;
$form->{taxbird_steuernummer} =~ s/\///; # ersten Querstrich ersetzen
# Numberformatting for Taxbird
my $temp_numberformat = $myconfig{numberformat};
# Numberformat must be '1000,00' for Taxbird ?!
$myconfig{numberformat} = '1000,00';
foreach my $number (@category_cent) {
$form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '2', '') : '';
}
foreach my $number (@category_euro) {
$form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '0', '') : '';
}
# Re-set Numberformat
$myconfig{numberformat} = $temp_numberformat;
# push Kennziffern to <%foreach Array fo easyer
# output in xml format. Thx to Moritz.
my %taxbird_id_for = (
'511' => 'Kz51-calc',
'861' => 'Kz86-calc',
'971' => 'Kz97-calc',
'931' => 'Kz93-calc',
'811' => 'Kz81-calc',
'891' => 'Kz89-calc',
'Z45' => 'uebertrag',
'Z53' => 'ust-sum',
'Z62' => 'ust-minus-vost',
'Z65' => 'ust-sum+69',
'Z67' => 'ust-vz',
);
for my $kennziffer (@category_cent, @category_euro) {
# Define serveral filenames
$form->{IN} = 'taxbird.txb';
next if ($kennziffer eq 'Z43');
$form->{attachment_filename} = "USTVA-" . $form->{period}
. sprintf("%02d", $form->{year} % 100) . ".txb";
$form->{tmpfile} = "$userspath/" . $form->{attachment_filename};
# TODO: set Output to UTF-8 or system Preference
#$form->{"iconv"} = Text::Iconv->new($myconfig{dbcharset}, "UTF-8");
#my $iconv = $self->{"iconv"};
#$iconv->convert($variable);
if ($form->{period} =~ /^[4]\d$/ ){
my %periods = ( # Lx => taxbird
'41' => '12',
'42' => '13',
'43' => '14',
'44' => '15',
);
foreach my $quarter ( keys %periods ) {
$form->{taxbird_period} = $periods{$quarter} if ( $form->{period} eq $quarter);
}
} elsif ($form->{period} =~ /^\d+$/ ) {
$form->{period} =~ s/^0//g;
my $period = $form->{period};
$period * 1;
$period--;
$form->{period} = $period;
} else {
if ($form->{$kennziffer} != 0){
if (defined $taxbird_id_for{$kennziffer}) {
push(@{ $form->{id}}, $taxbird_id_for{$kennziffer});
} else {
push(@{ $form->{id}}, "Kz$kennziffer");
}
push(@{ $form->{amount}}, $form->{$kennziffer});
}
}
} elsif ( $form->{format} eq '' ){ # No format error.
$form->header;
USTVA::error( $locale->text('Wrong Period' ));
USTVA::error( $locale->text('Application Error. No Format given' ) . "!");
exit(0);
} else { # All other Formats are wrong
$form->header;
USTVA::error( $locale->text('Application Error. Wrong Format') . ": " . $form->{format} );
exit(0);
}
my %lands = ( # Lx => taxbird # TODO: besser als array...
'Baden W?rtemberg' => '0',
'Bayern' => '1',
'Berlin' => '2',
'Brandenburg' => '3',
'Bremen' => '4',
'Hamburg' => '5',
'Hessen' => '6',
'Mecklenburg Vorpommern' => '7',
'Niedersachsen' => '8',
'Nordrhein Westfalen' => '9',
'Rheinland Pfalz' => '10',
'Saarland' => '11',
'Sachsen' => '12',
'Sachsen Anhalt' => '13',
'Schleswig Holstein' => '14',
'Th?ringen' => '15',
);
foreach my $land ( keys %lands ){
$form->{taxbird_land_nr} = $lands{$land} if ($form->{elsterland} eq $land );
}
$form->{co_zip} = $form->{co_city};
$form->{co_zip} =~ s/\D//g;
$form->{co_city} =~ s/\d//g;
$form->{co_city} =~ s/^\s//g;
($form->{co_phone_prefix}, $form->{co_phone}) = split("-", $form->{tel});
$form->{co_phone_prefix} =~ s/\s//g;
$form->{co_phone} =~ s/\s//g;
$form->{taxbird_steuernummer} = $form->{steuernummer};
# $form->{taxbird_steuernummer} =~ s/\D//g;
$form->{taxbird_steuernummer} =~ s/\///; # ersten Querstrich ersetzen
# Numberformatting for Taxbird
my $temp_numberformat = $myconfig{numberformat};
# Numberformat must be '1000,00' for Taxbird ?!
$myconfig{numberformat} = '1000,00';
foreach my $number (@category_cent) {
$form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '2', '') : '';
}
foreach my $number (@category_euro) {
$form->{$number} = ( $form->{$number} !=0 ) ? $form->format_amount(\%myconfig, $form->{$number}, '0', '') : '';
}
# Re-set Numberformat
$myconfig{numberformat} = $temp_numberformat;
# push Kennziffern to <%foreach Array fo easyer
# output in xml format. Thx to Moritz.
my %taxbird_id_for = (
'511' => 'Kz51-calc',
'861' => 'Kz86-calc',
'971' => 'Kz97-calc',
'931' => 'Kz93-calc',
'811' => 'Kz81-calc',
'891' => 'Kz89-calc',
'Z45' => 'uebertrag',
'Z53' => 'ust-sum',
'Z62' => 'ust-minus-vost',
'Z65' => 'ust-sum+69',
'Z67' => 'ust-vz',
# Austria
} elsif ($form->{coa} eq 'Austria') {
#
# Outputformat specific customisation's
#
my @category_euro = 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
41 44 49 43 48 51 86 35 77 76 91 89
97 93 95 94 42 60 45 52 73 84 81
);
for my $kennziffer (@category_cent, @category_euro) {
next if ($kennziffer eq 'Z43');
if ( $form->{format} eq 'html') { # Formatierungen f?r HTML Ausgabe
if ($form->{$kennziffer} != 0){
if (defined $taxbird_id_for{$kennziffer}) {
push(@{ $form->{id}}, $taxbird_id_for{$kennziffer});
} else {
push(@{ $form->{id}}, "Kz$kennziffer");
}
push(@{ $form->{amount}}, $form->{$kennziffer});
$form->{IN} = $form->{type} . '.html';
$form->{padding} = "&nbsp;&nbsp;";
$form->{bold} = "<b>";
$form->{endbold} = "</b>";
$form->{br} = "<br>";
$form->{address} =~ s/\\n/\n/g;
foreach $number (@category_euro) {
$form->{$number} = $form->format_amount(\%myconfig, $form->{$number}, '2', '0');
}
}
}
} elsif ( $form->{format} eq '' ){ # No format error.
$form->header;
USTVA::error( $locale->text('Application Error. No Format given' ) . "!");
exit(0);
} else { # All other Formats are wrong
$form->header;
USTVA::error( $locale->text('Application Error. Wrong Format') . ": " . $form->{format} );
exit(0);
}
# end nation specific customisations
if ( $form->{period} eq '13' and $form->{format} ne 'html') {
$form->header;

Auch abrufbar als: Unified diff