From e71494c125864eaeff3afa997189cc4531363034 Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Wed, 13 Jun 2007 14:27:44 +0000 Subject: [PATCH] Die Liste der Kreditorenbuchungen auf die Verwendung der ReportGenerator-Klasse umgestellt. --- bin/mozilla/ap.pl | 432 +++++------------- locale/de/ap | 18 +- .../ap/ap_transactions_bottom_de.html | 16 + .../ap/ap_transactions_bottom_master.html | 16 + 4 files changed, 174 insertions(+), 308 deletions(-) create mode 100644 templates/webpages/ap/ap_transactions_bottom_de.html create mode 100644 templates/webpages/ap/ap_transactions_bottom_master.html diff --git a/bin/mozilla/ap.pl b/bin/mozilla/ap.pl index ff29c0bbc..fc9d9defc 100644 --- a/bin/mozilla/ap.pl +++ b/bin/mozilla/ap.pl @@ -31,14 +31,18 @@ # #====================================================================== +use POSIX qw(strftime); + use SL::AP; use SL::IR; use SL::IS; use SL::PE; +use SL::ReportGenerator; require "bin/mozilla/arap.pl"; require "bin/mozilla/common.pl"; require "bin/mozilla/drafts.pl"; +require "bin/mozilla/report_generator.pl"; 1; @@ -1308,359 +1312,177 @@ $jsscript $lxdebug->leave_sub(); } +sub create_subtotal_row { + $lxdebug->enter_sub(); + + my ($totals, $columns, $column_alignment, $subtotal_columns, $class) = @_; + + my $row = { map { $_ => { 'data' => '', 'class' => $class, 'align' => $column_alignment->{$_}, } } @{ $columns } }; + + map { $row->{$_}->{data} = $form->format_amount(\%myconfig, $totals->{$_}, 2) } @{ $subtotal_columns }; + + $row->{tax}->{data} = $form->format_amount(\%myconfig, $totals->{amount} - $totals->{netamount}, 2); + + map { $totals->{$_} = 0 } @{ $subtotal_columns }; + + $lxdebug->leave_sub(); + + return $row; +} + sub ap_transactions { $lxdebug->enter_sub(); - $form->{vendor} = $form->unescape($form->{vendor}); ($form->{vendor}, $form->{vendor_id}) = split(/--/, $form->{vendor}); + $form->{sort} ||= 'transdate'; + AP->ap_transactions(\%myconfig, \%$form); - $callback = - "$form->{script}?action=ap_transactions&login=$form->{login}&password=$form->{password}"; - $href = $callback; + $form->{title} = $locale->text('AP Transactions'); + my $report = SL::ReportGenerator->new(\%myconfig, $form); + + my @columns = + qw(transdate id type invnumber ordnumber name netamount tax amount paid datepaid + due duedate transaction_description notes employee globalprojectnumber); + + my @hidden_variables = map { "l_${_}" } @columns; + push @hidden_variables, "l_subtotal", qw(open closed vendor invnumber ordnumber activity_description notes project_id transdatefrom transdateto); + + my $href = build_std_url('action=ap_transactions', grep { $form->{$_} } @hidden_variables); + + my %column_defs = ( + 'transdate' => { 'text' => $locale->text('Date'), }, + 'id' => { 'text' => $locale->text('ID'), }, + 'type' => { 'text' => $locale->text('Type'), }, + 'invnumber' => { 'text' => $locale->text('Invoice'), }, + 'ordnumber' => { 'text' => $locale->text('Order'), }, + 'name' => { 'text' => $locale->text('Vendor'), }, + 'netamount' => { 'text' => $locale->text('Amount'), }, + 'tax' => { 'text' => $locale->text('Tax'), }, + 'amount' => { 'text' => $locale->text('Total'), }, + 'paid' => { 'text' => $locale->text('Paid'), }, + 'datepaid' => { 'text' => $locale->text('Date Paid'), }, + 'due' => { 'text' => $locale->text('Amount Due'), }, + 'duedate' => { 'text' => $locale->text('Due Date'), }, + 'transaction_description' => { 'text' => $locale->text('Transaction description'), }, + 'notes' => { 'text' => $locale->text('Notes'), }, + 'employee' => { 'text' => $locale->text('Salesperson'), }, + 'globalprojectnumber' => { 'text' => $locale->text('Project Number'), }, + ); + + foreach my $name (qw(id transdate duedate invnumber ordnumber name datepaid + employee shippingpoint shipvia)) { + $column_defs{$name}->{link} = $href . "&sort=$name"; + } + + my %column_alignment = map { $_ => 'right' } qw(netamount tax amount paid due); + + $form->{"l_type"} = "Y"; + map { $column_defs{$_}->{visible} = $form->{"l_${_}"} ? 1 : 0 } @columns; + + $report->set_columns(%column_defs); + $report->set_column_order(@columns); + + $report->set_export_options('ap_transactions', @hidden_variables); + + my @options; if ($form->{vendor}) { - $callback .= "&vendor=" . $form->escape($form->{vendor}, 1); - $href .= "&vendor=" . $form->escape($form->{vendor}); - $option .= $locale->text('Vendor') . " : $form->{vendor}"; + push @options, $locale->text('Vendor') . " : $form->{vendor}"; } if ($form->{department}) { - $callback .= "&department=" . $form->escape($form->{department}, 1); - $href .= "&department=" . $form->escape($form->{department}); ($department) = split /--/, $form->{department}; - $option .= "\n
" if ($option); - $option .= $locale->text('Department') . " : $department"; + push @options, $locale->text('Department') . " : $department"; } if ($form->{invnumber}) { - $callback .= "&invnumber=" . $form->escape($form->{invnumber}, 1); - $href .= "&invnumber=" . $form->escape($form->{invnumber}); - $option .= "\n
" if ($option); - $option .= $locale->text('Invoice Number') . " : $form->{invnumber}"; + push @options, $locale->text('Invoice Number') . " : $form->{invnumber}"; } if ($form->{ordnumber}) { - $callback .= "&ordnumber=" . $form->escape($form->{ordnumber}, 1); - $href .= "&ordnumber=" . $form->escape($form->{ordnumber}); - $option .= "\n
" if ($option); - $option .= $locale->text('Order Number') . " : $form->{ordnumber}"; + push @options, $locale->text('Order Number') . " : $form->{ordnumber}"; } if ($form->{notes}) { - $callback .= "¬es=" . $form->escape($form->{notes}, 1); - $href .= "¬es=" . $form->escape($form->{notes}); - $option .= "\n
" if $option; - $option .= $locale->text('Notes') . " : $form->{notes}"; + push @options, $locale->text('Notes') . " : $form->{notes}"; + } + if ($form->{transaction_description}) { + push @options, $locale->text('Transaction description') . " : $form->{transaction_description}"; } - if ($form->{transdatefrom}) { - $callback .= "&transdatefrom=$form->{transdatefrom}"; - $href .= "&transdatefrom=$form->{transdatefrom}"; - $option .= "\n
" if ($option); - $option .= - $locale->text('From') . " " - . $locale->date(\%myconfig, $form->{transdatefrom}, 1); + push @options, $locale->text('From') . " " . $locale->date(\%myconfig, $form->{transdatefrom}, 1); } if ($form->{transdateto}) { - $callback .= "&transdateto=$form->{transdateto}"; - $href .= "&transdateto=$form->{transdateto}"; - $option .= "\n
" if ($option); - $option .= - $locale->text('Bis') . " " - . $locale->date(\%myconfig, $form->{transdateto}, 1); + push @options, $locale->text('Bis') . " " . $locale->date(\%myconfig, $form->{transdateto}, 1); } if ($form->{open}) { - $callback .= "&open=$form->{open}"; - $href .= "&open=$form->{open}"; - $option .= "\n
" if ($option); - $option .= $locale->text('Open'); + push @options, $locale->text('Open'); } if ($form->{closed}) { - $callback .= "&closed=$form->{closed}"; - $href .= "&closed=$form->{closed}"; - $option .= "\n
" if ($option); - $option .= $locale->text('Closed'); - } - if ($form->{globalproject_id}) { - $callback .= "&globalproject_id=" . E($form->{globalproject_id}); - $href .= "&globalproject_id=" . E($form->{globalproject_id}); + push @options, $locale->text('Closed'); } - @columns = - qw(transdate id type invnumber ordnumber name netamount tax amount paid datepaid - due duedate notes employee globalprojectnumber); + $report->set_options('top_info_text' => join("\n", @options), + 'raw_bottom_info_text' => $form->parse_html_template('ap/ap_transactions_bottom'), + 'output_format' => 'HTML', + 'title' => $form->{title}, + 'attachment_basename' => $locale->text('invoice_list') . strftime('_%Y%m%d', localtime time), + ); + $report->set_options_from_form(); - $form->{"l_type"} = "Y"; + # add sort and escape callback, this one we use for the add sub + $form->{callback} = $href .= "&sort=$form->{sort}"; - foreach $item (@columns) { - if ($form->{"l_$item"} eq "Y") { - push @column_index, $item; + # escape callback for href + $callback = $form->escape($href); - # add column to href and callback - $callback .= "&l_$item=Y"; - $href .= "&l_$item=Y"; - } - } + my @subtotal_columns = qw(netamount amount paid due); - if ($form->{l_subtotal} eq 'Y') { - $callback .= "&l_subtotal=Y"; - $href .= "&l_subtotal=Y"; - } - - $column_header{id} = - qq|| - . $locale->text('ID') - . qq||; - $column_header{transdate} = - qq|| - . $locale->text('Date') - . qq||; - $column_header{type} = - "" . $locale->text('Type') . ""; - $column_header{duedate} = - qq|| - . $locale->text('Due Date') - . qq||; - $column_header{due} = - qq|| . $locale->text('Amount Due') . qq||; - $column_header{invnumber} = - qq|| - . $locale->text('Invoice') - . qq||; - $column_header{ordnumber} = - qq|| - . $locale->text('Order') - . qq||; - $column_header{name} = - qq|| - . $locale->text('Vendor') - . qq||; - $column_header{netamount} = - qq|| . $locale->text('Amount') . qq||; - $column_header{tax} = - qq|| . $locale->text('Tax') . qq||; - $column_header{amount} = - qq|| . $locale->text('Total') . qq||; - $column_header{paid} = - qq|| . $locale->text('Paid') . qq||; - $column_header{datepaid} = - qq|| - . $locale->text('Date Paid') - . qq||; - $column_header{notes} = - qq|| . $locale->text('Notes') . qq||; - $column_header{employee} = - "" - . $locale->text('Employee') . ""; - $column_header{globalprojectnumber} = - qq|| . $locale->text('Project Number') . qq||; - - $form->{title} = $locale->text('AP Transactions'); + my %totals = map { $_ => 0 } @subtotal_columns; + my %subtotals = map { $_ => 0 } @subtotal_columns; - $form->header; - - print qq| - - - - - - - - - - - - - - - - -
$form->{title}
$option
- - -|; + my $idx = 0; - map { print "\n$column_header{$_}" } @column_index; + foreach $ap (@{ $form->{AP} }) { + $ap->{tax} = $ap->{amount} - $ap->{netamount}; + $ap->{due} = $ap->{amount} - $ap->{paid}; - print qq| - -|; + map { $subtotals{$_} += $ap->{$_}; + $totals{$_} += $ap->{$_} } @subtotal_columns; - # add sort and escape callback - $form->{callback} = "$callback&sort=$form->{sort}"; - $callback = $form->escape($form->{callback}); + map { $ap->{$_} = $form->format_amount(\%myconfig, $ap->{$_}, 2) } qw(netamount tax amount paid due); - if (@{ $form->{AP} }) { - $sameitem = $form->{AP}->[0]->{ $form->{sort} }; - } + $ap->{type} = + $ap->{invoice} ? $locale->text("Invoice (one letter abbreviation)") : + $locale->text("AP Transaction (abbreviation)"); - # sums and tax on reports by Antonio Gallardo - # - foreach $ap (@{ $form->{AP} }) { + my $row = { }; - if ($form->{l_subtotal} eq 'Y') { - if ($sameitem ne $ap->{ $form->{sort} }) { - &ap_subtotal; - $sameitem = $ap->{ $form->{sort} }; - } + foreach my $column (@columns) { + $row->{$column} = { + 'data' => $ap->{$column}, + 'align' => $column_alignment{$column}, + }; } - $column_data{netamount} = - ""; - $column_data{tax} = ""; - $column_data{amount} = - ""; - $column_data{paid} = - ""; - $column_data{due} = ""; - - $totalnetamount += $ap->{netamount}; - $totalamount += $ap->{amount}; - $totalpaid += $ap->{paid}; - $totaldue += ($ap->{amount} - $ap->{paid}); - - $subtotalnetamount += $ap->{netamount}; - $subtotalamount += $ap->{amount}; - $subtotalpaid += $ap->{paid}; - $subtotaldue += ($ap->{amount} - $ap->{paid}); - - $column_data{transdate} = ""; - $column_data{type} = ""; - $column_data{duedate} = ""; - $column_data{datepaid} = ""; - - $module = ($ap->{invoice}) ? "ir.pl" : $form->{script}; - - $column_data{invnumber} = - qq||; - $column_data{id} = ""; - $column_data{ordnumber} = ""; - $column_data{name} = ""; - $ap->{notes} =~ s/\r\n/
/g; - $column_data{notes} = ""; - $column_data{employee} = ""; - $column_data{globalprojectnumber} = - ""; - - $i++; - $i %= 2; - print " - -"; + $row->{invnumber}->{link} = build_std_url("script=" . ($ap->{invoice} ? 'ir.pl' : 'ap.pl'), 'action=edit') + . "&id=" . E($ap->{id}) . "&callback=${callback}"; - map { print "\n$column_data{$_}" } @column_index; + my $row_set = [ $row ]; - print qq| - -|; + if (($form->{l_subtotal} eq 'Y') + && (($idx == (scalar @{ $form->{AP} } - 1)) + || ($ap->{ $form->{sort} } ne $form->{AP}->[$idx + 1]->{ $form->{sort} }))) { + push @{ $row_set }, create_subtotal_row(\%subtotals, \@columns, \%column_alignment, \@subtotal_columns, 'listsubtotal'); + } - } + $report->add_data($row_set); - if ($form->{l_subtotal} eq 'Y') { - &ap_subtotal; + $idx++; } - # print totals - print qq| - -|; - - map { $column_data{$_} = "" } @column_index; - - $column_data{netamount} = - ""; - $column_data{tax} = ""; - $column_data{amount} = - ""; - $column_data{paid} = - ""; - $column_data{due} = - ""; - - map { print "$column_data{$_}\n" } @column_index; - - print qq| - -
" - . $form->format_amount(\%myconfig, $ap->{netamount}, 2, " ") - . "" - . $form->format_amount(\%myconfig, $ap->{amount} - $ap->{netamount}, - 2, " ") - . "" - . $form->format_amount(\%myconfig, $ap->{amount}, 2, " ") . "" - . $form->format_amount(\%myconfig, $ap->{paid}, 2, " ") . "" - . $form->format_amount(\%myconfig, $ap->{amount} - $ap->{paid}, - 2, " ") - . "$ap->{transdate} " . - ($ap->{invoice} ? $locale->text("Invoice (one letter abbreviation)") : - $locale->text("AP Transaction (abbreviation)")) - . "$ap->{duedate} $ap->{datepaid} $ap->{invnumber}$ap->{id}$ap->{ordnumber} $ap->{name}$ap->{notes} $ap->{employee} " . H($ap->{globalprojectnumber}) . "
 " - . $form->format_amount(\%myconfig, $totalnetamount, 2, " ") . "" - . $form->format_amount(\%myconfig, $totalamount - $totalnetamount, - 2, " ") - . "" - . $form->format_amount(\%myconfig, $totalamount, 2, " ") . "" - . $form->format_amount(\%myconfig, $totalpaid, 2, " ") . "" - . $form->format_amount(\%myconfig, $totaldue, 2, " ") . "
-

+ $report->add_separator(); + $report->add_data(create_subtotal_row(\%totals, \@columns, \%column_alignment, \@subtotal_columns, 'listtotal')); -
-
{script}> - - - -{login}> -{password}> - - - - - -
- - - -|; - - $lxdebug->leave_sub(); -} - -sub ap_subtotal { - $lxdebug->enter_sub(); - - map { $column_data{$_} = " " } @column_index; - - $column_data{netamount} = - "" - . $form->format_amount(\%myconfig, $subtotalnetamount, 2, " ") - . ""; - $column_data{tax} = "" - . $form->format_amount(\%myconfig, $subtotalamount - $subtotalnetamount, - 2, " ") - . ""; - $column_data{amount} = - "" - . $form->format_amount(\%myconfig, $subtotalamount, 2, " ") . ""; - $column_data{paid} = - "" - . $form->format_amount(\%myconfig, $subtotalpaid, 2, " ") . ""; - $column_data{due} = - "" - . $form->format_amount(\%myconfig, $subtotaldue, 2, " ") . ""; - - $subtotalnetamount = 0; - $subtotalamount = 0; - $subtotalpaid = 0; - $subtotaldue = 0; - - print ""; - - map { print "\n$column_data{$_}" } @column_index; - - print qq| - -|; + $report->generate_with_headers(); $lxdebug->leave_sub(); } diff --git a/locale/de/ap b/locale/de/ap index 511cd0c80..121ed7dae 100644 --- a/locale/de/ap +++ b/locale/de/ap @@ -1,6 +1,5 @@ $self->{texts} = { 'ADDED' => 'Hinzugefügt', - 'AP Transaction' => 'Kreditorenbuchung', 'AP Transaction (abbreviation)' => 'K', 'AP Transactions' => 'Kreditorenbuchungen', 'Account' => 'Konto', @@ -17,6 +16,7 @@ $self->{texts} = { 'Bin List' => 'Lagerliste', 'Bis' => 'bis', 'CANCELED' => 'Storniert', + 'CSV export -- options' => 'CSV-Export -- Optionen', 'Cancel Accounts Payables Transaction' => 'Kreditorenbuchung stornieren', 'Cannot delete transaction!' => 'Buchung kann nicht gelöscht werden!', 'Cannot post payment for a closed period!' => 'Es können keine Zahlungen für abgeschlossene Bücher gebucht werden!', @@ -27,6 +27,9 @@ $self->{texts} = { 'Confirm!' => 'Bestätigen Sie!', 'Confirmation' => 'Auftragsbestätigung', 'Continue' => 'Weiter', + 'Could not spawn html2ps or GhostScript.' => 'html2ps oder GhostScript 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 Limit' => 'Kreditlimit', 'Credit Note' => 'Gutschrift', 'Currency' => 'Währung', @@ -107,6 +110,7 @@ $self->{texts} = { 'Order' => 'Auftrag', 'Order Number' => 'Auftragsnummer', 'PAYMENT POSTED' => 'Rechung gebucht', + 'PDF export -- options' => 'PDF-Export -- Optionen', 'POSTED' => 'Gebucht', 'POSTED AS NEW' => 'Als neu gebucht', 'PRINTED' => 'Gedruckt', @@ -134,6 +138,7 @@ $self->{texts} = { 'SAVED' => 'Gespeichert', 'SAVED FOR DUNNING' => 'Gespeichert', 'SCREENED' => 'Angezeigt', + 'Salesperson' => 'Verkäufer', 'Save draft' => 'Entwurf speichern', 'Select a Customer' => 'Endkunde auswählen', 'Select a part' => 'Artikel auswählen', @@ -155,6 +160,7 @@ $self->{texts} = { 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'Das Feld \'tag\' darf nur aus alphanumerischen Zeichen und den Zeichen - _ ( ) bestehen.', 'Total' => 'Summe', 'Transaction deleted!' => 'Buchung gelöscht!', + 'Transaction description' => 'Vorgangsbezeichnung', 'Transaction has already been cancelled!' => 'Diese Buchung wurde bereits storniert.', 'Transaction posted!' => 'Buchung verbucht!', 'Trying to call a sub without a name' => 'Es wurde versucht, eine Unterfunktion ohne Namen aufzurufen.', @@ -166,7 +172,6 @@ $self->{texts} = { 'Value' => 'Wert', 'Variable' => 'Variable', 'Vendor' => 'Lieferant', - 'Vendor Invoice' => 'Einkaufsrechnung', 'Vendor details' => 'Lieferantendetails', 'Vendor missing!' => 'Lieferant fehlt!', 'Vendor not on file or locked!' => 'Dieser Lieferant existiert nicht oder ist gesperrt.', @@ -177,12 +182,14 @@ $self->{texts} = { 'button' => '?', 'history' => 'Historie', 'invoice' => 'Rechnung', + 'invoice_list' => 'debitorenbuchungsliste', 'mark as paid' => 'als bezahlt markieren', 'no' => 'nein', 'packing_list' => 'Versandliste', 'pick_list' => 'Entnahmeliste', 'proforma' => 'Proforma', 'purchase_order' => 'Auftrag', + 'report_generator_nextsub is not defined.' => 'report_generator_nextsub ist nicht definiert.', 'request_quotation' => 'Angebotsanforderung', 'sales_order' => 'Kundenauftrag', 'sales_quotation' => 'Verkaufsangebot', @@ -197,7 +204,6 @@ $self->{subs} = { 'Q' => 'Q', 'add' => 'add', 'add_transaction' => 'add_transaction', - 'ap_subtotal' => 'ap_subtotal', 'ap_transaction' => 'ap_transaction', 'ap_transactions' => 'ap_transactions', 'ar_transaction' => 'ar_transaction', @@ -208,6 +214,7 @@ $self->{subs} = { 'check_project' => 'check_project', 'continue' => 'continue', 'create_links' => 'create_links', + 'create_subtotal_row' => 'create_subtotal_row', 'delete' => 'delete', 'delete_drafts' => 'delete_drafts', 'delivery_customer_selection' => 'delivery_customer_selection', @@ -216,6 +223,8 @@ $self->{subs} = { 'draft_action_dispatcher' => 'draft_action_dispatcher', 'edit' => 'edit', 'employee_selection_internal' => 'employee_selection_internal', + 'export_as_csv' => 'export_as_csv', + 'export_as_pdf' => 'export_as_pdf', 'form_footer' => 'form_footer', 'form_header' => 'form_header', 'format_dates' => 'format_dates', @@ -233,6 +242,7 @@ $self->{subs} = { 'project_selection_internal' => 'project_selection_internal', 'reformat_numbers' => 'reformat_numbers', 'remove_draft' => 'remove_draft', + 'report_generator_do' => 'report_generator_do', 'sales_invoice' => 'sales_invoice', 'save_draft' => 'save_draft', 'search' => 'search', @@ -257,6 +267,8 @@ $self->{subs} = { 'löschen' => 'delete', 'entwürfe_löschen' => 'delete_drafts', 'kreditorenbuchung_bearbeiten' => 'edit_accounts_payables_transaction', + 'als_csv_exportieren' => 'export_as_csv', + 'als_pdf_exportieren' => 'export_as_pdf', 'buchen' => 'post', 'zahlung_buchen' => 'post_payment', 'entwurf_speichern' => 'save_draft', diff --git a/templates/webpages/ap/ap_transactions_bottom_de.html b/templates/webpages/ap/ap_transactions_bottom_de.html new file mode 100644 index 000000000..3b7faa63b --- /dev/null +++ b/templates/webpages/ap/ap_transactions_bottom_de.html @@ -0,0 +1,16 @@ +
+ + + + + + + Neu erfassen
+ + + + +
+ + + diff --git a/templates/webpages/ap/ap_transactions_bottom_master.html b/templates/webpages/ap/ap_transactions_bottom_master.html new file mode 100644 index 000000000..ed2739564 --- /dev/null +++ b/templates/webpages/ap/ap_transactions_bottom_master.html @@ -0,0 +1,16 @@ +
+ + + + + + + Create new
+ + + + +
+ + + -- 2.20.1