Revision 886784c7
Von Sven Schöling vor mehr als 13 Jahren hinzugefügt
bin/mozilla/rp.pl | ||
---|---|---|
}
|
||
|
||
sub generate_tax_report {
|
||
$main::lxdebug->enter_sub();
|
||
|
||
$main::auth->assert('report');
|
||
|
||
my $form = $main::form;
|
||
my %myconfig = %main::myconfig;
|
||
my $locale = $main::locale;
|
||
$::lxdebug->enter_sub;
|
||
$::auth->assert('report');
|
||
|
||
RP->tax_report(\%myconfig, \%$form);
|
||
RP->tax_report(\%::myconfig, $::form);
|
||
|
||
my $descvar = "$form->{accno}_description";
|
||
my $description = $form->escape($form->{$descvar});
|
||
my $ratevar = "$form->{accno}_rate";
|
||
my $descvar = "$::form->{accno}_description";
|
||
my ($subtotalnetamount, $subtotaltax, $subtotal) = (0, 0, 0);
|
||
|
||
my $department = $form->escape($form->{department});
|
||
|
||
# construct href
|
||
my $href =
|
||
"$form->{script}?&action=generate_tax_report&fromdate=$form->{fromdate}&todate=$form->{todate}&db=$form->{db}&method=$form->{method}&accno=$form->{accno}&$descvar=$description&department=$department&report=$form->{report}";
|
||
|
||
# construct callback
|
||
$description = $form->escape($form->{$descvar}, 1);
|
||
$department = $form->escape($form->{department}, 1);
|
||
my $callback =
|
||
"$form->{script}?&action=generate_tax_report&fromdate=$form->{fromdate}&todate=$form->{todate}&db=$form->{db}&method=$form->{method}&accno=$form->{accno}&$descvar=$description&department=$department&report=$form->{report}";
|
||
|
||
my $title = $form->escape($form->{title});
|
||
$href .= "&title=$title";
|
||
$title = $form->escape($form->{title}, 1);
|
||
$callback .= "&title=$title";
|
||
my $href =
|
||
my $callback = build_std_url('action=generate_tax_report', $descvar,
|
||
qw(fromdate todate db method accno department report title));
|
||
|
||
$form->{title} = qq|$form->{title} $form->{"$form->{accno}_description"} |;
|
||
|
||
my @columns =
|
||
$form->sort_columns(qw(id transdate invnumber name netamount tax amount));
|
||
my @columns = $::form->sort_columns(qw(id transdate invnumber name netamount tax amount));
|
||
my @column_index;
|
||
|
||
foreach my $item (@columns) {
|
||
if ($form->{"l_$item"} eq "Y") {
|
||
push @column_index, $item;
|
||
|
||
# add column to href and callback
|
||
for my $item (@columns, 'subtotal') {
|
||
if ($::form->{"l_$item"} eq "Y") {
|
||
$callback .= "&l_$item=Y";
|
||
$href .= "&l_$item=Y";
|
||
}
|
||
}
|
||
|
||
if ($form->{l_subtotal} eq 'Y') {
|
||
$callback .= "&l_subtotal=Y";
|
||
$href .= "&l_subtotal=Y";
|
||
for my $item (@columns) {
|
||
if ($::form->{"l_$item"} eq "Y") {
|
||
push @column_index, $item;
|
||
}
|
||
}
|
||
|
||
my $option;
|
||
if ($form->{department}) {
|
||
($department) = split /--/, $form->{department};
|
||
$option = $locale->text('Department') . " : $department";
|
||
my @options;
|
||
if ($::form->{department}) {
|
||
my ($department) = split /--/, $::form->{department};
|
||
push @options, $::locale->text('Department') . " : $department";
|
||
}
|
||
|
||
my ($fromdate, $todate);
|
||
# if there are any dates
|
||
if ($form->{fromdate} || $form->{todate}) {
|
||
if ($form->{fromdate}) {
|
||
$fromdate = $locale->date(\%myconfig, $form->{fromdate}, 1);
|
||
}
|
||
if ($form->{todate}) {
|
||
$todate = $locale->date(\%myconfig, $form->{todate}, 1);
|
||
}
|
||
|
||
$form->{period} = "$fromdate - $todate";
|
||
if ($::form->{fromdate} || $::form->{todate}) {
|
||
my $fromdate = $::locale->date(\%::myconfig, $::form->{fromdate}, 1) if $::form->{fromdate};
|
||
my $todate = $::locale->date(\%::myconfig, $::form->{todate}, 1) if $::form->{todate};
|
||
push @options, "$fromdate - $todate";
|
||
} else {
|
||
$form->{period} =
|
||
$locale->date(\%myconfig, $form->current_date(\%myconfig), 1);
|
||
push @options, $::locale->date(\%::myconfig, $::form->current_date, 1);
|
||
}
|
||
|
||
my ($name, $invoice, $arap);
|
||
if ($form->{db} eq 'ar') {
|
||
$name = $locale->text('Customer');
|
||
if ($::form->{db} eq 'ar') {
|
||
$name = $::locale->text('Customer');
|
||
$invoice = 'is.pl';
|
||
$arap = 'ar.pl';
|
||
}
|
||
if ($form->{db} eq 'ap') {
|
||
$name = $locale->text('Vendor');
|
||
if ($::form->{db} eq 'ap') {
|
||
$name = $::locale->text('Vendor');
|
||
$invoice = 'ir.pl';
|
||
$arap = 'ap.pl';
|
||
}
|
||
|
||
$option .= "<br>" if $option;
|
||
$option .= "$form->{period}";
|
||
|
||
my %column_header;
|
||
$column_header{id} = qq|<th><a class=listheading href=$href&sort=id>| . $locale->text('ID') . qq|</th>|;
|
||
$column_header{invnumber} = qq|<th><a class=listheading href=$href&sort=invnumber>| . $locale->text('Invoice') . qq|</th>|;
|
||
$column_header{transdate} = qq|<th><a class=listheading href=$href&sort=transdate>| . $locale->text('Date') . qq|</th>|;
|
||
$column_header{netamount} = qq|<th class=listheading>| . $locale->text('Amount') . qq|</th>|;
|
||
$column_header{tax} = qq|<th class=listheading>| . $locale->text('Tax') . qq|</th>|;
|
||
$column_header{amount} = qq|<th class=listheading>| . $locale->text('Total') . qq|</th>|;
|
||
|
||
$column_header{name} = qq|<th><a class=listheading href=$href&sort=name>$name</th>|;
|
||
|
||
$form->header;
|
||
|
||
print qq|
|
||
<body>
|
||
|
||
<table width=100%>
|
||
<tr>
|
||
<th class=listtop>$form->{title}</th>
|
||
</tr>
|
||
<tr height="5"></tr>
|
||
<tr>
|
||
<td>$option</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<table width=100%>
|
||
<tr class=listheading>
|
||
|;
|
||
|
||
map { print "$column_header{$_}\n" } @column_index;
|
||
my %column_header = (
|
||
id => $::locale->text('ID'),
|
||
invnumber => $::locale->text('Invoice'),
|
||
transdate => $::locale->text('Date'),
|
||
netamount => $::locale->text('Amount'),
|
||
tax => $::locale->text('Tax'),
|
||
amount => $::locale->text('Total'),
|
||
name => $name,
|
||
);
|
||
|
||
print qq|
|
||
</tr>
|
||
|;
|
||
my %column_sorted = map { $_ => 1 } qw(id invnumber transdate);
|
||
|
||
# add sort and escape callback
|
||
$callback = $form->escape($callback . "&sort=$form->{sort}");
|
||
$callback .= "&sort=$::form->{sort}";
|
||
|
||
my $sameitem;
|
||
if (@{ $form->{TR} }) {
|
||
$sameitem = $form->{TR}->[0]->{ $form->{sort} };
|
||
if (@{ $::form->{TR} }) {
|
||
$sameitem = $::form->{TR}->[0]->{ $::form->{sort} };
|
||
}
|
||
|
||
my ($totalnetamount, $totaltax);
|
||
my ($i);
|
||
foreach my $ref (@{ $form->{TR} }) {
|
||
my ($totalnetamount, $totaltax, @data);
|
||
for my $ref (@{ $::form->{TR} }) {
|
||
|
||
my $module = ($ref->{invoice}) ? $invoice : $arap;
|
||
|
||
if ($form->{l_subtotal} eq 'Y') {
|
||
if ($sameitem ne $ref->{ $form->{sort} }) {
|
||
tax_subtotal(\@column_index, \$subtotalnetamount, \$subtotaltax, \$subtotal);
|
||
$sameitem = $ref->{ $form->{sort} };
|
||
if ($::form->{l_subtotal} eq 'Y') {
|
||
if ($sameitem ne $ref->{ $::form->{sort} }) {
|
||
push @data, {
|
||
subtotal => 1,
|
||
netamount => $subtotalnetamount,
|
||
tax => $subtotaltax,
|
||
amount => $subtotal,
|
||
};
|
||
$subtotalnetamount = 0;
|
||
$subtotaltax = 0;
|
||
$sameitem = $ref->{ $::form->{sort} };
|
||
}
|
||
}
|
||
|
||
$totalnetamount += $ref->{netamount};
|
||
$totaltax += $ref->{tax};
|
||
$ref->{amount} = $ref->{netamount} + $ref->{tax};
|
||
|
||
$subtotalnetamount += $ref->{netamount};
|
||
$subtotaltax += $ref->{tax};
|
||
$totalnetamount += $ref->{netamount};
|
||
$totaltax += $ref->{tax};
|
||
$ref->{amount} = $ref->{netamount} + $ref->{tax};
|
||
|
||
map {
|
||
$ref->{$_} = $form->format_amount(\%myconfig, $ref->{$_}, 2, " ");
|
||
} qw(netamount tax amount);
|
||
|
||
my %column_data;
|
||
$column_data{id} = qq|<td>$ref->{id}</td>|;
|
||
$column_data{invnumber} =
|
||
qq|<td><a href=$module?action=edit&id=$ref->{id}&callback=$callback>$ref->{invnumber}</a></td>|;
|
||
$column_data{transdate} = qq|<td>$ref->{transdate}</td>|;
|
||
$column_data{name} = qq|<td>$ref->{name} </td>|;
|
||
|
||
map { $column_data{$_} = qq|<td align=right>$ref->{$_}</td>| }
|
||
qw(netamount tax amount);
|
||
|
||
$i++;
|
||
$i %= 2;
|
||
print qq|
|
||
<tr class=listrow$i>
|
||
|;
|
||
|
||
map { print "$column_data{$_}\n" } @column_index;
|
||
|
||
print qq|
|
||
</tr>
|
||
|;
|
||
|
||
push @data, { map { $_ => { data => $ref->{$_} } } keys %$ref };
|
||
$data[-1]{invnumber}{link} = "$module?action=edit&id=$ref->{id}&callback=$callback";
|
||
$data[-1]{$_}{numeric} = 1 for qw(netamount tax amount);
|
||
}
|
||
|
||
if ($form->{l_subtotal} eq 'Y') {
|
||
tax_subtotal(\@column_index, \$subtotalnetamount, \$subtotaltax, \$subtotal);
|
||
if ($::form->{l_subtotal} eq 'Y') {
|
||
push @data, {
|
||
subtotal => 1,
|
||
netamount => $subtotalnetamount,
|
||
tax => $subtotaltax,
|
||
amount => $subtotal,
|
||
};
|
||
}
|
||
|
||
my %column_data;
|
||
map { $column_data{$_} = qq|<th> </th>| } @column_index;
|
||
|
||
print qq|
|
||
</tr>
|
||
<tr class=listtotal>
|
||
|;
|
||
|
||
my $total = $form->format_amount(\%myconfig, $totalnetamount + $totaltax, 2, " ");
|
||
$totalnetamount = $form->format_amount(\%myconfig, $totalnetamount, 2, " ");
|
||
$totaltax = $form->format_amount(\%myconfig, $totaltax, 2, " ");
|
||
|
||
$column_data{netamount} = qq|<th class=listtotal align=right>$totalnetamount</th>|;
|
||
$column_data{tax} = qq|<th class=listtotal align=right>$totaltax</th>|;
|
||
$column_data{amount} = qq|<th class=listtotal align=right>$total</th>|;
|
||
|
||
map { print "$column_data{$_}\n" } @column_index;
|
||
|
||
print qq|
|
||
</tr>
|
||
</table>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td><hr size=3 noshade></td>
|
||
</tr>
|
||
</table>
|
||
|
||
</body>
|
||
</html>
|
||
|;
|
||
|
||
$main::lxdebug->leave_sub();
|
||
}
|
||
|
||
sub tax_subtotal {
|
||
$main::lxdebug->enter_sub();
|
||
|
||
my ($column_index, $subtotalnetamount, $subtotaltax, $subtotal) = @_;
|
||
|
||
my $form = $main::form;
|
||
my %myconfig = %main::myconfig;
|
||
my $locale = $main::locale;
|
||
|
||
my %column_data;
|
||
map { $column_data{$_} = "<td> </td>" } @{ $column_index };
|
||
|
||
$$subtotalnetamount = $form->format_amount(\%myconfig, $$subtotalnetamount, 2, " ");
|
||
$$subtotaltax = $form->format_amount(\%myconfig, $$subtotaltax, 2, " ");
|
||
$$subtotal = $form->format_amount(\%myconfig, $$subtotalnetamount + $$subtotaltax, 2, " ");
|
||
|
||
$column_data{netamount} = "<th class=listsubtotal align=right>$$subtotalnetamount</th>";
|
||
$column_data{tax} = "<th class=listsubtotal align=right>$$subtotaltax</th>";
|
||
$column_data{amount} = "<th class=listsubtotal align=right>$$subtotal</th>";
|
||
|
||
$$subtotalnetamount = 0;
|
||
$$subtotaltax = 0;
|
||
|
||
print qq|
|
||
<tr class=listsubtotal>
|
||
|;
|
||
map { print "\n$column_data{$_}" } @{ $column_index };
|
||
push @data, {
|
||
total => 1,
|
||
netamount => $totalnetamount,
|
||
tax => $totaltax,
|
||
amount => $totalnetamount + $totaltax,
|
||
};
|
||
|
||
print qq|
|
||
</tr>
|
||
|;
|
||
$::form->header;
|
||
print $::form->parse_html_template('rp/tax_report', {
|
||
column_index => \@column_index,
|
||
column_header => \%column_header,
|
||
column_sorted => \%column_sorted,
|
||
sort_base => $href,
|
||
DATA => \@data,
|
||
options => \@options,
|
||
});
|
||
|
||
$main::lxdebug->leave_sub();
|
||
$::lxdebug->leave_sub;
|
||
}
|
||
|
||
sub list_payments {
|
templates/webpages/rp/tax_report.html | ||
---|---|---|
[%- USE L %]
|
||
[%- USE HTML %]
|
||
[%- USE LxERP %]
|
||
[%- USE T8 %]
|
||
|
||
[% BLOCK sub_total %]
|
||
<tr class='[% class %]'>
|
||
[% FOREACH col IN column_index %]
|
||
<td class='[% class %] numeric'>
|
||
[%- SWITCH col %]
|
||
[%- CASE [ 'netamount', 'tax', 'amount' ] %][% LxERP.format_amount(row.$col, 2) %]
|
||
[%- CASE %] [% END %]
|
||
</td>
|
||
[% END %]
|
||
</tr>
|
||
[% END %]
|
||
|
||
<body>
|
||
|
||
<h1>[% title %] [% SET tax_report__accno_title = accno _ '_description' %][% GET $tax_report__accno_title %]</h1>
|
||
|
||
<p>
|
||
[% FOREACH option IN options %][% option %][% '<br>' UNLESS loop.last %][% END %]
|
||
</p>
|
||
|
||
<table width=100%>
|
||
<tr class=listheading>
|
||
[%- FOREACH col IN column_index %]
|
||
<th>
|
||
[%- IF column_sorted.$col %]<a href="[% sort_base %]&sort=[% col %]">[% END %]
|
||
[%- column_header.$col %]
|
||
[%- IF column_sorted.$col %]</a>[% END %]
|
||
</th>
|
||
[%- END %]
|
||
</tr>
|
||
|
||
[%- FOREACH row IN DATA %]
|
||
[% IF row.subtotal %]
|
||
[% PROCESS sub_total class='listsubtotal' %]
|
||
[% ELSIF row.total %]
|
||
[% PROCESS sub_total class='listtotal' %]
|
||
[% ELSE %]
|
||
<tr class='listrow[% loop.count % 2 %]'>
|
||
[%- FOREACH col IN column_index %]
|
||
<td[% IF row.$col.numeric %] class="numeric"[% END %]>
|
||
[%- IF row.$col.link %]<a href="[% row.$col.link %]">[% END %]
|
||
[%- IF row.$col.numeric %]
|
||
[%- LxERP.format_amount(row.$col.data, 2) | html %]
|
||
[%- ELSE %]
|
||
[%- row.$col.data | html %]
|
||
[%- END %]
|
||
[%- IF row.$col.link %]</a>[% END %]
|
||
</td>
|
||
[%- END %]
|
||
</tr>
|
||
[% END %]
|
||
[%- END %]
|
||
</table>
|
||
<hr size=3 noshade>
|
||
</body>
|
||
</html>
|
||
|
Auch abrufbar als: Unified diff
rp.pl::tax_report nach template ausgelagert.