From 7a1f60ec2df4d0d0a1b546f186df7bb968b8f498 Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Fri, 15 Jun 2007 11:03:07 +0000 Subject: [PATCH] Das Buchungsjournal auf die Verwendung der ReportGenerator-Klasse umgestellt. --- bin/mozilla/gl.pl | 630 +++++------------- css/lx-office-erp.css | 4 + locale/de/all | 4 +- locale/de/gl | 28 +- locale/de/rp | 2 - .../gl/generate_report_bottom_de.html | 14 + .../gl/generate_report_bottom_master.html | 14 + 7 files changed, 220 insertions(+), 476 deletions(-) create mode 100644 templates/webpages/gl/generate_report_bottom_de.html create mode 100644 templates/webpages/gl/generate_report_bottom_master.html diff --git a/bin/mozilla/gl.pl b/bin/mozilla/gl.pl index 461800b84..0fd863e51 100644 --- a/bin/mozilla/gl.pl +++ b/bin/mozilla/gl.pl @@ -31,12 +31,16 @@ # #====================================================================== +use POSIX qw(strftime); + use SL::GL; use SL::IS; use SL::PE; +use SL::ReportGenerator; require "bin/mozilla/arap.pl"; require "bin/mozilla/common.pl"; +require "bin/mozilla/report_generator.pl"; 1; @@ -204,7 +208,7 @@ sub edit { sub search { $lxdebug->enter_sub(); - $form->{title} = $locale->text('Buchungsjournal'); + $form->{title} = $locale->text('Journal'); $form->all_departments(\%myconfig); @@ -392,544 +396,248 @@ $jsscript $lxdebug->leave_sub(); } -sub generate_report { +sub create_subtotal_row { $lxdebug->enter_sub(); - $form->{sort} = "transdate" unless $form->{sort}; + my ($totals, $columns, $column_alignment, $subtotal_columns, $class) = @_; - GL->all_transactions(\%myconfig, \%$form); + my $row = { map { $_ => { 'data' => '', 'class' => $class, 'align' => $column_alignment->{$_}, } } @{ $columns } }; - $callback = - "$form->{script}?action=generate_report&login=$form->{login}&password=$form->{password}"; + map { $row->{$_}->{data} = $form->format_amount(\%myconfig, $totals->{$_}, 2) } @{ $subtotal_columns }; - $href = $callback; + map { $totals->{$_} = 0 } @{ $subtotal_columns }; - %acctype = ('A' => $locale->text('Asset'), - 'C' => $locale->text('Contra'), - 'L' => $locale->text('Liability'), - 'Q' => $locale->text('Equity'), - 'I' => $locale->text('Revenue'), - 'E' => $locale->text('Expense'),); + $lxdebug->leave_sub(); - $form->{title} = $locale->text('General Ledger'); + return $row; +} - $ml = ($form->{ml} =~ /(A|E|Q)/) ? -1 : 1; +sub generate_report { + $lxdebug->enter_sub(); - unless ($form->{category} eq 'X') { + $form->{sort} ||= "transdate"; + + GL->all_transactions(\%myconfig, \%$form); + + my %acctype = ('A' => $locale->text('Asset'), + 'C' => $locale->text('Contra'), + 'L' => $locale->text('Liability'), + 'Q' => $locale->text('Equity'), + 'I' => $locale->text('Revenue'), + 'E' => $locale->text('Expense'),); + + $form->{title} = $locale->text('Journal'); + if ($form->{category} ne 'X') { $form->{title} .= " : " . $locale->text($acctype{ $form->{category} }); } + + $form->{landscape} = 1; + + my $ml = ($form->{ml} =~ /(A|E|Q)/) ? -1 : 1; + + my @columns = qw( + transdate id reference description + notes source debit debit_accno + credit credit_accno debit_tax debit_tax_accno + credit_tax credit_tax_accno projectnumbers balance + ); + + my @hidden_variables = qw(accno source reference department description notes project_id datefrom dateto category l_subtotal); + push @hidden_variables, map { "l_${_}" } @columns; + + my (@options, $date_option); if ($form->{accno}) { - $href .= "&accno=" . $form->escape($form->{accno}); - $callback .= "&accno=" . $form->escape($form->{accno}, 1); - $option = - $locale->text('Account') - . " : $form->{accno} $form->{account_description}"; + push @options, $locale->text('Account') . " : $form->{accno} $form->{account_description}"; } if ($form->{source}) { - $href .= "&source=" . $form->escape($form->{source}); - $callback .= "&source=" . $form->escape($form->{source}, 1); - $option .= "\n
" if $option; - $option .= $locale->text('Source') . " : $form->{source}"; + push @options, $locale->text('Source') . " : $form->{source}"; } if ($form->{reference}) { - $href .= "&reference=" . $form->escape($form->{reference}); - $callback .= "&reference=" . $form->escape($form->{reference}, 1); - $option .= "\n
" if $option; - $option .= $locale->text('Reference') . " : $form->{reference}"; + push @options, $locale->text('Reference') . " : $form->{reference}"; } if ($form->{department}) { - $href .= "&department=" . $form->escape($form->{department}); - $callback .= "&department=" . $form->escape($form->{department}, 1); - ($department) = split /--/, $form->{department}; - $option .= "\n
" if $option; - $option .= $locale->text('Department') . " : $department"; + my ($department) = split /--/, $form->{department}; + push @options, $locale->text('Department') . " : $department"; } - if ($form->{description}) { - $href .= "&description=" . $form->escape($form->{description}); - $callback .= "&description=" . $form->escape($form->{description}, 1); - $option .= "\n
" if $option; - $option .= $locale->text('Description') . " : $form->{description}"; + push @options, $locale->text('Description') . " : $form->{description}"; } if ($form->{notes}) { - $href .= "¬es=" . $form->escape($form->{notes}); - $callback .= "¬es=" . $form->escape($form->{notes}, 1); - $option .= "\n
" if $option; - $option .= $locale->text('Notes') . " : $form->{notes}"; - } - if ($form->{project_id}) { - $href .= "&project_id=" . $form->escape($form->{project_id}); - $callback .= "&project_id=" . $form->escape($form->{project_id}); + push @options, $locale->text('Notes') . " : $form->{notes}"; } - if ($form->{datefrom}) { - $href .= "&datefrom=$form->{datefrom}"; - $callback .= "&datefrom=$form->{datefrom}"; - $option .= "\n
" if $option; - $option .= - $locale->text('From') . " " - . $locale->date(\%myconfig, $form->{datefrom}, 1); + $date_option = $locale->text('From') . " " . $locale->date(\%myconfig, $form->{datefrom}, 1); } if ($form->{dateto}) { - $href .= "&dateto=$form->{dateto}"; - $callback .= "&dateto=$form->{dateto}"; if ($form->{datefrom}) { - $option .= " "; - } else { - $option .= "\n
" if $option; + $date_option .= " "; } - $option .= - $locale->text('Bis') . " " - . $locale->date(\%myconfig, $form->{dateto}, 1); + $date_option .= $locale->text('Bis') . " " . $locale->date(\%myconfig, $form->{dateto}, 1); } - - @columns = $form->sort_columns( qw( - transdate id reference description - notes source debit debit_accno - credit credit_accno debit_tax debit_tax_accno - credit_tax credit_tax_accno accno - projectnumbers - ) + push @options, $date_option if $date_option; + + my $callback = build_std_url('action=generate_report', @hidden_variables); + + $form->{l_credit_accno} = 'Y'; + $form->{l_debit_accno} = 'Y'; + $form->{l_credit_tax} = 'Y'; + $form->{l_debit_tax} = 'Y'; + $form->{l_credit_tax_accno} = 'Y'; + $form->{l_debit_tax_accno} = 'Y'; + $form->{l_balance} = $form->{accno} ? 'Y' : ''; + + my %column_defs = ( + 'id' => { 'text' => $locale->text('ID'), }, + 'transdate' => { 'text' => $locale->text('Date'), }, + 'reference' => { 'text' => $locale->text('Reference'), }, + 'source' => { 'text' => $locale->text('Source'), }, + 'description' => { 'text' => $locale->text('Description'), }, + 'notes' => { 'text' => $locale->text('Notes'), }, + 'debit' => { 'text' => $locale->text('Debit'), }, + 'debit_accno' => { 'text' => $locale->text('Debit Account'), }, + 'credit' => { 'text' => $locale->text('Credit'), }, + 'credit_accno' => { 'text' => $locale->text('Credit Account'), }, + 'debit_tax' => { 'text' => $locale->text('Debit Tax'), }, + 'debit_tax_accno' => { 'text' => $locale->text('Debit Tax Account'), }, + 'credit_tax' => { 'text' => $locale->text('Credit Tax'), }, + 'credit_tax_accno' => { 'text' => $locale->text('Credit Tax Account'), }, + 'balance' => { 'text' => $locale->text('Balance'), }, + 'projectnumbers' => { 'text' => $locale->text('Project Numbers'), }, ); - if ($form->{accno}) { - @columns = grep !/accno/, @columns; - push @columns, "balance"; - $form->{l_balance} = "Y"; + map { $column_defs{$_}->{link} = $callback . "&sort=${_}" } qw(id transdate reference source description); + map { $column_defs{$_}->{link} = $callback . "&sort=accno" } qw(debit_accno credit_accno debit_tax_accno credit_tax_accno debit_tax credit_tax); + map { $column_defs{$_}->{visible} = $form->{"l_${_}"} ? 1 : 0 } @columns; + map { $column_defs{$_}->{visible} = 0 } qw(debit_accno credit_accno debit_tax_accno credit_tax_accno) if $form->{accno}; - } + my %column_alignment; + map { $column_alignment{$_} = 'right' } qw(balance id debit credit debit_tax credit_tax); + map { $column_alignment{$_} = 'center' } qw(transdate reference description source notes debit_accno credit_accno debit_tax_accno credit_tax_accno); - $form->{l_credit_accno} = "Y"; - $form->{l_debit_accno} = "Y"; - $form->{l_credit_tax} = "Y"; - $form->{l_debit_tax} = "Y"; - $form->{l_credit_tax_accno} = "Y"; - $form->{l_debit_tax_accno} = "Y"; - $form->{l_accno} = "N"; - foreach $item (@columns) { - if ($form->{"l_$item"} eq "Y") { - push @column_index, $item; - - # add column to href and callback - $callback .= "&l_$item=Y"; - $href .= "&l_$item=Y"; - } - } - - if ($form->{l_subtotal} eq 'Y') { - $callback .= "&l_subtotal=Y"; - $href .= "&l_subtotal=Y"; - } - - $callback .= "&category=$form->{category}"; - $href .= "&category=$form->{category}"; - - $column_header{id} = - "" - . $locale->text('ID') - . ""; - $column_header{transdate} = - "" - . $locale->text('Date') - . ""; - $column_header{reference} = - "" - . $locale->text('Reference') - . ""; - $column_header{source} = - "" - . $locale->text('Source') - . ""; - $column_header{description} = - "" - . $locale->text('Description') - . ""; - $column_header{notes} = - "" . $locale->text('Notes') . ""; - $column_header{debit} = - "" . $locale->text('Debit') . ""; - $column_header{debit_accno} = - "" - . $locale->text('Debit Account') - . ""; - $column_header{credit} = - "" . $locale->text('Credit') . ""; - $column_header{credit_accno} = - "" - . $locale->text('Credit Account') - . ""; - $column_header{debit_tax} = - "" - . $locale->text('Debit Tax') - . ""; - $column_header{debit_tax_accno} = - "" - . $locale->text('Debit Tax Account') - . ""; - $column_header{credit_tax} = - "" - . $locale->text('Credit Tax') - . ""; - $column_header{credit_tax_accno} = - "" - . $locale->text('Credit Tax Account') - . ""; - $column_header{balance} = "" . $locale->text('Balance') . ""; - $column_header{projectnumbers} = - "" . $locale->text('Project Numbers') . ""; - - $form->{landscape} = 1; - - $form->header; + my $report = SL::ReportGenerator->new(\%myconfig, $form); - print qq| - + $report->set_columns(%column_defs); + $report->set_column_order(@columns); - - - - - - - - - - - - - - -
$form->{title}
$option
- - - -|; + $report->set_export_options('generate_report', @hidden_variables); - map { print "$column_header{$_}\n" } @column_index; + $report->set_sort_indicator($form->{sort}, 1); - print " - - - - -"; + $report->set_options('top_info_text' => join("\n", @options), + 'output_format' => 'HTML', + 'title' => $form->{title}, + 'attachment_basename' => $locale->text('general_ledger_list') . strftime('_%Y%m%d', localtime time), + ); + $report->set_options_from_form(); # add sort to callback - $form->{callback} = "$callback&sort=$form->{sort}"; - $callback = $form->escape($form->{callback}); + $form->{callback} = "$callback&sort=" . E($form->{sort}); - # initial item for subtotals - if (@{ $form->{GL} }) { - $sameitem = $form->{GL}->[0]->{ $form->{sort} }; - } + $form->{balance} *= $ml; if ($form->{accno} && $form->{balance}) { + my $row = { + 'balance' => { + 'data' => $form->format_amount(\%myconfig, $form->{balance}, 2), + 'align' => 'right', + }, + }; + + $report->add_data($row); + } - map { $column_data{$_} = "" } @column_index; - $column_data{balance} = - ""; - - $i++; - $i %= 2; - print qq| - -|; - map { print "$column_data{$_}\n" } @column_index; + my @totals_columns = qw(debit credit debit_tax credit_tax); + my %subtotals = map { $_ => 0 } @totals_columns; + my %totals = map { $_ => 0 } @totals_columns; + my $idx = 0; - print qq| - -|; - } - $form->{balance} *= $ml; foreach $ref (@{ $form->{GL} }) { $form->{balance} *= $ml; - # if item ne sort print subtotal - if ($form->{l_subtotal} eq 'Y') { - if ($sameitem ne $ref->{ $form->{sort} }) { - &gl_subtotal; - } - } - - #foreach $key (sort keys(%{ $ref->{amount} })) { - # $form->{balance} += $ref->{amount}{$key}; - #} + my %rows; - $debit = ""; - foreach $key (sort keys(%{ $ref->{debit} })) { - $subtotaldebit += $ref->{debit}{$key}; - $totaldebit += $ref->{debit}{$key}; - if ($key == 0) { - $debit = $form->format_amount(\%myconfig, $ref->{debit}{$key}, 2, 0); - } else { - $debit .= - "
" . $form->format_amount(\%myconfig, $ref->{debit}{$key}, 2, 0); + foreach my $key (qw(debit credit debit_tax credit_tax)) { + $rows{$key} = []; + foreach my $idx (sort keys(%{ $ref->{$key} })) { + my $value = $ref->{$key}->{$idx}; + $subtotals{$key} += $value; + $totals{$key} += $value; + $form->{balance} = abs($form->{balance}) - abs($value); + push @{ $rows{$key} }, $form->format_amount(\%myconfig, $value, 2); } - $form->{balance} = abs($form->{balance}) - abs($ref->{debit}{$key}); } - $credit = ""; - foreach $key (sort keys(%{ $ref->{credit} })) { - $subtotalcredit += $ref->{credit}{$key}; - $totalcredit += $ref->{credit}{$key}; - if ($key == 0) { - $credit = $form->format_amount(\%myconfig, $ref->{credit}{$key}, 2, 0); - } else { - $credit .= "
" - . $form->format_amount(\%myconfig, $ref->{credit}{$key}, 2, 0); - } - $form->{balance} = abs($form->{balance}) - abs($ref->{credit}{$key}); + foreach my $key (qw(debit_accno credit_accno debit_tax_accno credit_tax_accno ac_transdate)) { + my $col = $key eq 'ac_transdate' ? 'transdate' : $key; + $rows{$col} = [ map { $ref->{$key}->{$_} } sort keys(%{ $ref->{$key} }) ]; } - $debittax = ""; - foreach $key (sort keys(%{ $ref->{debit_tax} })) { - $subtotaldebittax += $ref->{debit_tax}{$key}; - $totaldebittax += $ref->{debit_tax}{$key}; - if ($key == 0) { - $debittax = - $form->format_amount(\%myconfig, $ref->{debit_tax}{$key}, 2, 0); - } else { - $debittax .= "
" - . $form->format_amount(\%myconfig, $ref->{debit_tax}{$key}, 2, 0); - } - $form->{balance} = abs($form->{balance}) - abs($ref->{debit_tax}{$key}); - } + my $row = { }; + map { $row->{$_} = { 'data' => '', 'align' => $column_alignment{$_} } } @columns; - $credittax = ""; - foreach $key (sort keys(%{ $ref->{credit_tax} })) { - $subtotalcredittax += $ref->{credit_tax}{$key}; - $totalcredittax += $ref->{credit_tax}{$key}; - if ($key == 0) { - $credittax = - $form->format_amount(\%myconfig, $ref->{credit_tax}{$key}, 2, 0); - } else { - $credittax .= "
" - . $form->format_amount(\%myconfig, $ref->{credit_tax}{$key}, 2, 0); - } - $form->{balance} = abs($form->{balance}) - abs($ref->{credit_tax}{$key}); - } + $row->{balance}->{data} = $form->format_amount(\%myconfig, $form->{balance}, 2); + $row->{projectnumbers}->{data} = join ", ", sort { lc($a) cmp lc($b) } keys %{ $ref->{projectnumbers} }; - $debitaccno = ""; - $debittaxkey = ""; - $taxaccno = ""; - foreach $key (sort keys(%{ $ref->{debit_accno} })) { - if ($key == 0) { - $debitaccno = - "{debit_accno}{$key}&callback=$callback>$ref->{debit_accno}{$key}"; - } else { - $debitaccno .= - "
{debit_accno}{$key}&callback=$callback>$ref->{debit_accno}{$key}"; - } + map { $row->{$_}->{data} = $ref->{$_} } qw(id reference description source notes); - # if ($ref->{debit_taxkey}{$key} eq $debittaxkey) { - # $ref->{debit_tax_accno}{$key} = $taxaccno; - # } - $taxaccno = $ref->{debit_tax_accno}{$key}; - $debittaxkey = $ref->{debit_taxkey}{$key}; - } + map { $row->{$_}->{data} = join "\n", @{ $rows{$_} }; } qw(transdate debit credit); - $creditaccno = ""; - $credittaxkey = ""; - $taxaccno = ""; - foreach $key (sort keys(%{ $ref->{credit_accno} })) { - if ($key == 0) { - $creditaccno = - "{credit_accno}{$key}&callback=$callback>$ref->{credit_accno}{$key}"; - } else { - $creditaccno .= - "
{credit_accno}{$key}&callback=$callback>$ref->{credit_accno}{$key}"; - } - - # if ($ref->{credit_taxkey}{$key} eq $credittaxkey) { - # $ref->{credit_tax_accno}{$key} = $taxaccno; - # } - $taxaccno = $ref->{credit_tax_accno}{$key}; - $credittaxkey = $ref->{credit_taxkey}{$key}; - } + map { $row->{$_}->{data} = join "\n", @{ $rows{$_} } if ($ref->{"${_}_accno"} ne "") } qw(debit_tax credit_tax); - $debittaxaccno = ""; - foreach $key (sort keys(%{ $ref->{debit_tax_accno} })) { - if ($key == 0) { - $debittaxaccno = - "{debit_tax_accno}{$key}&callback=$callback>$ref->{debit_tax_accno}{$key}"; + foreach my $col (qw(debit_accno credit_accno debit_tax_accno credit_tax_accno)) { + if (lc $report->{options}->{output_format} eq 'html') { + $row->{$col}->{raw_data} = join "
", map { "$_" } @{ $rows{$col} }; } else { - $debittaxaccno .= - "
{debit_tax_accno}{$key}&callback=$callback>$ref->{debit_tax_accno}{$key}"; + $row->{$col}->{data} = join "\n", @{ $rows{$col} }; } } - $credittaxaccno = ""; - foreach $key (sort keys(%{ $ref->{credit_tax_accno} })) { - if ($key == 0) { - $credittaxaccno = - "{credit_tax_accno}{$key}&callback=$callback>$ref->{credit_tax_accno}{$key}"; - } else { - $credittaxaccno .= - "
{credit_tax_accno}{$key}&callback=$callback>$ref->{credit_tax_accno}{$key}"; - } - } + $row->{reference}->{link} = build_std_url("script=$ref->{module}.pl", 'action=edit', 'id=' . E($ref->{id}), 'callback'); - $transdate = ""; - foreach $key (sort keys(%{ $ref->{ac_transdate} })) { - if ($key == 0) { - $transdate = "$ref->{ac_transdate}{$key}"; - } else { - $transdate .= "
$ref->{ac_transdate}{$key}"; - } + my $row_set = [ $row ]; + + if (($form->{l_subtotal} eq 'Y') + && (($idx == (scalar @{ $form->{GL} } - 1)) + || ($ref->{ $form->{sort} } ne $form->{GL}->[$idx + 1]->{ $form->{sort} }))) { + push @{ $row_set }, create_subtotal_row(\%subtotals, \@columns, \%column_alignment, [ qw(debit credit) ], 'listsubtotal'); } - # $ref->{debit} = $form->format_amount(\%myconfig, $ref->{debit}, 2, " "); - # $ref->{credit} = $form->format_amount(\%myconfig, $ref->{credit}, 2, " "); - - $column_data{id} = ""; - $column_data{transdate} = ""; - $column_data{reference} = - ""; - $column_data{description} = ""; - $column_data{source} = ""; - $column_data{notes} = ""; - $column_data{debit} = ""; - $column_data{debit_accno} = ""; - $column_data{credit} = ""; - $column_data{credit_accno} = ""; - $column_data{debit_tax} = - ($ref->{debit_tax_accno} ne "") - ? "" - : ""; - $column_data{debit_tax_accno} = ""; - $column_data{credit_tax} = - ($ref->{credit_tax_accno} ne "") - ? "" - : ""; - $column_data{credit_tax_accno} = ""; - $column_data{balance} = - ""; - $column_data{projectnumbers} = - ""; - - $i++; - $i %= 2; - print " - "; - map { print "$column_data{$_}\n" } @column_index; - print ""; + $report->add_data($row_set); + $idx++; } - &gl_subtotal if ($form->{l_subtotal} eq 'Y'); - - map { $column_data{$_} = "" } @column_index; - - my $balanced_ledger = $totaldebit - + $totaldebittax - - $totalcredit - - $totalcredittax; - # = 0 for balanced ledger - - $column_data{debit} = - ""; - $column_data{credit} = - ""; - $column_data{debit_tax} = - ""; - $column_data{credit_tax} = - ""; - $column_data{balance} = - ""; - - print qq| - -|; - - map { print "$column_data{$_}\n" } @column_index; - - print qq| - - |; - + $report->add_separator(); - if ( abs($balanced_ledger) > 0.001 ) { + # = 0 for balanced ledger + my $balanced_ledger = $totals{debit} + $totals{debit_tax} - $totals{credit} - $totals{credit_tax}; - print qq| - - -
 " - . $form->format_amount(\%myconfig, $form->{balance} * $ml, 2, 0) - . "
 $ref->{id} $transdate{module}.pl?action=edit&id=$ref->{id}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{reference}$ref->{description} $ref->{source} $ref->{notes} $debit$debitaccno$credit$creditaccno$debittax$debittaxaccno$credittax$credittaxaccno" - . $form->format_amount(\%myconfig, $form->{balance}, 2, 0) . "" . join(", ", sort({ lc($a) cmp lc($b) } keys(%{ $ref->{projectnumbers} }))) . "
 " - . $form->format_amount(\%myconfig, $totaldebit, 2, " ") . "" - . $form->format_amount(\%myconfig, $totalcredit, 2, " ") . "" - . $form->format_amount(\%myconfig, $totaldebittax, 2, " ") . "" - . $form->format_amount(\%myconfig, $totalcredittax, 2, " ") . "" - . $form->format_amount(\%myconfig, $form->{balance} * $ml, 2, 0) . "
| - . $locale->text('Unbalanced Ledger') - . ": " - . $form->format_amount(\%myconfig, $balanced_ledger, 3, " ") - - } elsif ( abs($balanced_ledger) <= 0.001 ) { + my $row = create_subtotal_row(\%totals, \@columns, \%column_alignment, [ qw(debit credit debit_tax credit_tax) ], 'listtotal'); + $row->{balance} = { + 'data' => $form->format_amount(\%myconfig, $form->{balance} * $ml, 2), + 'align' => 'right', + 'class' => 'listtotal', + }; + $report->add_data($row); - print qq|| - . $locale->text('Balanced Ledger') + my $raw_bottom_info_text; + if (!$form->{accno} && (abs($balanced_ledger) > 0.001)) { + $raw_bottom_info_text .= + '

' + . $locale->text('Unbalanced Ledger') + . ': ' + . $form->format_amount(\%myconfig, $balanced_ledger, 3) + . '

'; } - - print qq| -
-

+ $raw_bottom_info_text .= $form->parse_html_template('gl/generate_report_bottom'); -
- -
{script}> - - + $report->set_options('raw_bottom_info_text' => $raw_bottom_info_text); -{login}> -{password}> - - - - - - + $report->generate_with_headers(); -
- - - -|; - $lxdebug->leave_sub(); - -} - -sub gl_subtotal { - $lxdebug->enter_sub(); - - $subtotaldebit = - $form->format_amount(\%myconfig, $subtotaldebit, 2, " "); - $subtotalcredit = - $form->format_amount(\%myconfig, $subtotalcredit, 2, " "); - - map { $column_data{$_} = " " } - qw(transdate id reference source description accno); - $column_data{debit} = "$subtotaldebit"; - $column_data{credit} = "$subtotalcredit"; - - print ""; - map { print "$column_data{$_}\n" } @column_index; - print ""; - - $subtotaldebit = 0; - $subtotalcredit = 0; - - $sameitem = $ref->{ $form->{sort} }; $lxdebug->leave_sub(); - } sub update { diff --git a/css/lx-office-erp.css b/css/lx-office-erp.css index 386fbb5eb..a699d56aa 100644 --- a/css/lx-office-erp.css +++ b/css/lx-office-erp.css @@ -218,3 +218,7 @@ fieldset { label { cursor:pointer; } + +.unbalanced_ledger { + background-color: #ffa0a0; +} diff --git a/locale/de/all b/locale/de/all index 3da22ebbe..2826bf42e 100644 --- a/locale/de/all +++ b/locale/de/all @@ -176,7 +176,6 @@ aktualisieren wollen?', 'Backup of dataset' => 'Sicherung der Datenbank', 'Balance' => 'Bilanz', 'Balance Sheet' => 'Bilanz', - 'Balanced Ledger' => 'Bilanz ausgeglichen', 'Bank' => 'Bank', 'Bank Code' => 'BLZ', 'Bank Code (long)' => 'Bankleitzahl (BLZ)', @@ -205,7 +204,6 @@ aktualisieren wollen?', 'Buchungsdatum' => 'Buchungsdatum', 'Buchungsgruppe' => 'Buchungsgruppe', 'Buchungsgruppen' => 'Buchungsgruppen', - 'Buchungsjournal' => 'Buchungsjournal', 'Buchungsnummer' => 'Buchungsnummer', 'Business Number' => 'Firmennummer', 'Business Volume' => 'Geschäftsvolumen', @@ -216,7 +214,6 @@ aktualisieren wollen?', 'Calculate' => 'Berechnen', 'Cancel Accounts Payables Transaction' => 'Kreditorenbuchung stornieren', 'Cancel Accounts Receivables Transaction' => 'Debitorenbuchung stornieren', - 'Cancel General Ledger Transaction' => 'Buchung stornieren', 'Cannot create Lock!' => 'System kann nicht gesperrt werden!', 'Cannot delete account!' => 'Konto kann nicht gelöscht werden!', 'Cannot delete customer!' => 'Kunde kann nicht gelöscht werden!', @@ -1290,6 +1287,7 @@ aktualisieren wollen?', 'emailed to' => 'gemailt an', 'for Period' => 'für den Zeitraum', 'from (time)' => 'von', + 'general_ledger_list' => 'buchungsjournal', 'history' => 'Historie', 'history search engine' => 'Historien Suchmaschine', 'invoice' => 'Rechnung', diff --git a/locale/de/gl b/locale/de/gl index 09404bd55..f84cbcf43 100644 --- a/locale/de/gl +++ b/locale/de/gl @@ -1,7 +1,5 @@ $self->{texts} = { 'ADDED' => 'Hinzugefügt', - 'AP Transaction' => 'Kreditorenbuchung', - 'AR Transaction' => 'Debitorenbuchung', 'Account' => 'Konto', 'Add General Ledger Transaction' => 'Dialogbuchen', 'Address' => 'Adresse', @@ -14,15 +12,14 @@ $self->{texts} = { 'Aug' => 'Aug', 'August' => 'August', 'Balance' => 'Bilanz', - 'Balanced Ledger' => 'Bilanz ausgeglichen', 'Belegnummer' => 'Buchungsnummer', 'Bin List' => 'Lagerliste', 'Bis' => 'bis', 'Buchungsdatum' => 'Buchungsdatum', - 'Buchungsjournal' => 'Buchungsjournal', 'Buchungsnummer' => 'Buchungsnummer', 'CANCELED' => 'Storniert', - 'Cancel General Ledger Transaction' => 'Buchung stornieren', + 'CSV export -- options' => 'CSV-Export -- Optionen', + 'Cancel Accounts Receivables Transaction' => 'Debitorenbuchung stornieren', 'Cannot delete transaction!' => 'Buchung kann nicht gelöscht werden!', 'Cannot have a value in both Debit and Credit!' => 'Es kann nicht gleichzeitig Soll und Haben gebucht werden!', 'Cannot post a transaction without a value!' => 'Eine Buchung ohne Betrag kann nicht vorgenommen werden!', @@ -32,6 +29,10 @@ $self->{texts} = { 'Confirmation' => 'Auftragsbestätigung', 'Continue' => 'Weiter', 'Contra' => 'gegen', + 'Could not spawn html2ps or GhostScript.' => 'html2ps oder GhostScript konnte nicht gestartet werden.', + 'Could not spawn the printer command.' => 'Die Druckanwendung konnte nicht gestartet werden.', + 'Could not write the html2ps config file.' => 'Die temporäre html2ps-Konfigurationsdatei konnte nicht geschrieben werden.', + 'Could not write the temporary HTML file.' => 'Eine temporäre HTML-Datei konnte nicht geschrieben werden.', 'Credit' => 'Haben', 'Credit Account' => 'Habenkonto', 'Credit Note' => 'Gutschrift', @@ -68,14 +69,13 @@ $self->{texts} = { 'Feb' => 'Feb', 'February' => 'Februar', 'From' => 'Von', - 'GL Transaction' => 'Dialogbuchung', - 'General Ledger' => 'Finanzbuchhaltung', 'History' => 'Historie', 'ID' => 'Buchungsnummer', 'Include in Report' => 'In Bericht aufnehmen', 'Invoice' => 'Rechnung', 'Jan' => 'Jan', 'January' => 'Januar', + 'Journal' => 'Buchungsjournal', 'Jul' => 'Jul', 'July' => 'Juli', 'Jun' => 'Jun', @@ -111,6 +111,7 @@ $self->{texts} = { 'October' => 'Oktober', 'Out of balance transaction!' => 'Buchung ist nicht ausgeglichen!', 'PAYMENT POSTED' => 'Rechung gebucht', + 'PDF export -- options' => 'PDF-Export -- Optionen', 'POSTED' => 'Gebucht', 'POSTED AS NEW' => 'Als neu gebucht', 'PRINTED' => 'Gedruckt', @@ -136,7 +137,6 @@ $self->{texts} = { 'SAVED' => 'Gespeichert', 'SAVED FOR DUNNING' => 'Gespeichert', 'SCREENED' => 'Angezeigt', - 'Sales Invoice' => 'Rechnung', 'Select a Customer' => 'Endkunde auswählen', 'Select a part' => 'Artikel auswählen', 'Select a project' => 'Projekt auswählen', @@ -154,6 +154,7 @@ $self->{texts} = { 'Tax' => 'Steuer', 'Taxkey' => 'Steuerschlüssel', 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'Das Feld \'tag\' darf nur aus alphanumerischen Zeichen und den Zeichen - _ ( ) bestehen.', + 'The list has been printed.' => 'Die Liste wurde ausgedruckt.', 'To (time)' => 'Bis', 'Transaction %d cancelled.' => 'Buchung %d erfolgreich storniert.', 'Transaction Date missing!' => 'Buchungsdatum fehlt!', @@ -166,19 +167,21 @@ $self->{texts} = { 'Update' => 'Erneuern', 'Value' => 'Wert', 'Variable' => 'Variable', - 'Vendor Invoice' => 'Einkaufsrechnung', 'Vendor details' => 'Lieferantendetails', 'Vendor not on file or locked!' => 'Dieser Lieferant existiert nicht oder ist gesperrt.', 'Vendor not on file!' => 'Lieferant ist nicht in der Datenbank!', 'Yes' => 'Ja', 'bin_list' => 'Lagerliste', 'button' => '?', + 'general_ledger_list' => 'buchungsjournal', 'invoice' => 'Rechnung', 'no' => 'nein', 'packing_list' => 'Versandliste', 'pick_list' => 'Entnahmeliste', 'proforma' => 'Proforma', 'purchase_order' => 'Auftrag', + 'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to ist nicht definiert.', + 'report_generator_nextsub is not defined.' => 'report_generator_nextsub ist nicht definiert.', 'request_quotation' => 'Angebotsanforderung', 'sales_order' => 'Kundenauftrag', 'sales_quotation' => 'Verkaufsangebot', @@ -201,6 +204,7 @@ $self->{subs} = { 'check_name' => 'check_name', 'check_project' => 'check_project', 'continue' => 'continue', + 'create_subtotal_row' => 'create_subtotal_row', 'delete' => 'delete', 'delivery_customer_selection' => 'delivery_customer_selection', 'display_form' => 'display_form', @@ -211,7 +215,6 @@ $self->{subs} = { 'form_header' => 'form_header', 'format_dates' => 'format_dates', 'generate_report' => 'generate_report', - 'gl_subtotal' => 'gl_subtotal', 'gl_transaction' => 'gl_transaction', 'mark_as_paid_common' => 'mark_as_paid_common', 'name_selected' => 'name_selected', @@ -223,6 +226,11 @@ $self->{subs} = { 'project_selected' => 'project_selected', 'project_selection_internal' => 'project_selection_internal', 'reformat_numbers' => 'reformat_numbers', + 'report_generator_back' => 'report_generator_back', + 'report_generator_dispatcher' => 'report_generator_dispatcher', + 'report_generator_do' => 'report_generator_do', + 'report_generator_export_as_csv' => 'report_generator_export_as_csv', + 'report_generator_export_as_pdf' => 'report_generator_export_as_pdf', 'sales_invoice' => 'sales_invoice', 'search' => 'search', 'select_employee' => 'select_employee', diff --git a/locale/de/rp b/locale/de/rp index 15551adbd..776b38ab9 100644 --- a/locale/de/rp +++ b/locale/de/rp @@ -121,7 +121,6 @@ $self->{texts} = { 'Pick List' => 'Sammelliste', 'Please enter values' => 'Bitte Werte eingeben', 'Postscript' => 'Postscript', - 'Print' => 'Drucken', 'Printer' => 'Drucker', 'Proforma Invoice' => 'Proformarechnung', 'Project' => 'Projekt', @@ -144,7 +143,6 @@ $self->{texts} = { 'Select a Customer' => 'Endkunde auswählen', 'Select a part' => 'Artikel auswählen', 'Select a project' => 'Projekt auswählen', - 'Select all' => 'Alle auswählen', 'Select an employee' => 'Angestellten auswählen', 'Select from one of the names below' => 'Wählen Sie einen der untenstehenden Namen', 'Select from one of the projects below' => 'Wählen Sie eines der untenstehenden Projekte', diff --git a/templates/webpages/gl/generate_report_bottom_de.html b/templates/webpages/gl/generate_report_bottom_de.html new file mode 100644 index 000000000..3d1c8d117 --- /dev/null +++ b/templates/webpages/gl/generate_report_bottom_de.html @@ -0,0 +1,14 @@ +
+ + + + + + + + + + + + +
diff --git a/templates/webpages/gl/generate_report_bottom_master.html b/templates/webpages/gl/generate_report_bottom_master.html new file mode 100644 index 000000000..6ce644a49 --- /dev/null +++ b/templates/webpages/gl/generate_report_bottom_master.html @@ -0,0 +1,14 @@ +
+ + + + + + + + + + + + +
-- 2.20.1