Kunden- und Liferantenstammdatenliste auf die Verwendung von ReportGenerator umgestellt.
authorMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 19 Jun 2007 15:05:38 +0000 (15:05 +0000)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 19 Jun 2007 15:05:38 +0000 (15:05 +0000)
SL/CT.pm
bin/mozilla/ct.pl
locale/de/all
locale/de/ct
templates/webpages/ct/list_names_bottom_de.html [new file with mode: 0644]
templates/webpages/ct/list_names_bottom_master.html [new file with mode: 0644]

index 67822d4..51c4507 100644 (file)
--- a/SL/CT.pm
+++ b/SL/CT.pm
@@ -587,6 +587,7 @@ sub search {
   $sortorder =
     $form->{sort} && $allowed_sort_columns{$form->{sort}} ?
     $form->{sort} : "name";
+  $form->{sort} = $sortorder;
   $sortorder = "country,city,street" if ($sortorder eq "address");
 
   if ($form->{"${cv}number"}) {
index 2a8e0d2..d0510e8 100644 (file)
 # $locale->text('Add Customer')
 # $locale->text('Add Vendor')
 
-use SL::CT;
-use CGI::Ajax;
 use CGI;
-use Data::Dumper;
+use CGI::Ajax;
+use POSIX qw(strftime);
+
+use SL::CT;
+use SL::ReportGenerator;
 
 require "bin/mozilla/common.pl";
+require "bin/mozilla/reportgenerator.pl";
 
 1;
 
@@ -217,241 +220,119 @@ sub search {
 sub list_names {
   $lxdebug->enter_sub();
 
-  CT->search(\%myconfig, \%$form);
+  $form->{IS_CUSTOMER} = $form->{db} eq 'customer';
 
-  $callback =
-    "$form->{script}?action=list_names&db=$form->{db}&login=$form->{login}&password=$form->{password}&status=$form->{status}&obsolete=$form->{obsolete}";
-  $href = $callback;
-
-  @columns =
-    $form->sort_columns(id, name,
-                        "$form->{db}number", address,
-                        contact,             phone,
-                        fax,                 email,
-                        taxnumber,
-                        sic_code,            business,
-                        invnumber,           ordnumber,
-                        quonumber);
-
-  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";
-    }
-  }
-  $number =
-    ($form->{db} eq "customer")
-    ? $locale->text('Customer Number')
-    : $locale->text('Vendor Number');
+  CT->search(\%myconfig, \%$form);
 
+  my @options;
   if ($form->{status} eq 'all') {
-    $option = $locale->text('All');
-  }
-  if ($form->{status} eq 'orphaned') {
-    $option .= $locale->text('Orphaned');
+    push @options, $locale->text('All');
+
+  } elsif ($form->{status} eq 'orphaned') {
+    push @options, $locale->text('Orphaned');
   }
+
   if ($form->{name}) {
-    $callback .= "&name=" . $form->escape($form->{name}, 1);
-    $href .= "&name=" . $form->escape($form->{name});
-    $option .= "\n<br>" . $locale->text('Name') . " : $form->{name}";
+    push @options, $locale->text('Name') . " : $form->{name}";
   }
   if ($form->{contact}) {
-    $callback .= "&contact=" . $form->escape($form->{contact}, 1);
-    $href .= "&contact=" . $form->escape($form->{contact});
-    $option .= "\n<br>" . $locale->text('Contact') . " : $form->{contact}";
+    push @options, $locale->text('Contact') . " : $form->{contact}";
   }
   if ($form->{"$form->{db}number"}) {
-    $callback .=
-      qq|&$form->{db}number=| . $form->escape($form->{"$form->{db}number"}, 1);
-    $href .=
-      "&$form->{db}number=" . $form->escape($form->{"$form->{db}number"});
-    $option .=
-      "\n<br>" . $locale->text('Number') . qq| : $form->{"$form->{db}number"}|;
+    push @options, $locale->text('Number') . qq| : $form->{"$form->{db}number"}|;
   }
   if ($form->{email}) {
-    $callback .= "&email=" . $form->escape($form->{email}, 1);
-    $href .= "&email=" . $form->escape($form->{email});
-    $option .= "\n<br>" . $locale->text('E-mail') . " : $form->{email}";
+    push @options, $locale->text('E-mail') . " : $form->{email}";
   }
 
-  $form->{callback} = "$callback&sort=$form->{sort}";
-  $callback = $form->escape($form->{callback});
-
-  $column_header{id} =
-    qq|<th class=listheading>| . $locale->text('ID') . qq|</th>|;
-  $column_header{"$form->{db}number"} =
-    qq|<th><a class=listheading href=$href&sort=$form->{db}number>$number</a></th>|;
-  $column_header{name} =
-      qq|<th><a class=listheading href=$href&sort=name>|
-    . $locale->text('Name')
-    . qq|</a></th>|;
-  $column_header{address} =
-      qq|<th><a class=listheading href=$href&sort=address>|
-    . $locale->text('Address')
-    . qq|</a></th>|;
-  $column_header{contact} =
-      qq|<th><a class=listheading href=$href&sort=contact>|
-    . $locale->text('Contact')
-    . qq|</a></th>|;
-  $column_header{phone} =
-      qq|<th><a class=listheading href=$href&sort=phone>|
-    . $locale->text('Phone')
-    . qq|</a></th>|;
-  $column_header{fax} =
-      qq|<th><a class=listheading href=$href&sort=fax>|
-    . $locale->text('Fax')
-    . qq|</a></th>|;
-  $column_header{email} =
-      qq|<th><a class=listheading href=$href&sort=email>|
-    . $locale->text('E-mail')
-    . qq|</a></th>|;
-  $column_header{cc} =
-      qq|<th><a class=listheading href=$href&sort=cc>|
-    . $locale->text('Cc')
-    . qq|</a></th>|;
-
-  $column_header{taxnumber} =
-      qq|<th><a class=listheading href=$href&sort=taxnumber>|
-    . $locale->text('Tax Number')
-    . qq|</a></th>|;
-  $column_header{sic_code} =
-      qq|<th><a class=listheading href=$href&sort=sic_code>|
-    . $locale->text('SIC')
-    . qq|</a></th>|;
-  $column_header{business} =
-      qq|<th><a class=listheading href=$href&sort=business>|
-    . $locale->text('Type of Business')
-    . qq|</a></th>|;
-
-  $column_header{invnumber} =
-      qq|<th><a class=listheading href=$href&sort=invnumber>|
-    . $locale->text('Invoice')
-    . qq|</a></th>|;
-  $column_header{ordnumber} =
-      qq|<th><a class=listheading href=$href&sort=ordnumber>|
-    . $locale->text('Order')
-    . qq|</a></th>|;
-  $column_header{quonumber} =
-      qq|<th><a class=listheading href=$href&sort=quonumber>|
-    . $locale->text('Quotation')
-    . qq|</a></th>|;
-
-  $label = ucfirst $form->{db} . "s";
-  $form->{title} = $locale->text($label);
-
-  $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;
-
-  print qq|
-        </tr>
-|;
+  my @columns = (
+    'id',        'name',  "$form->{db}number", 'address',  'contact',  'phone',
+    'fax',       'email', 'taxnumber',         'sic_code', 'business', 'invnumber',
+    'ordnumber', 'quonumber'
+  );
+
+  my %column_defs = (
+    'id'                => { 'text' => $locale->text('ID'), },
+    "$form->{db}number" => { 'text' => $form->{IS_CUSTOMER} ? $locale->text('Customer Number') : $locale->text('Vendor Number'), },
+    'name'              => { 'text' => $locale->text('Name'), },
+    'address'           => { 'text' => $locale->text('Address'), },
+    'contact'           => { 'text' => $locale->text('Contact'), },
+    'phone'             => { 'text' => $locale->text('Phone'), },
+    'fax'               => { 'text' => $locale->text('Fax'), },
+    'email'             => { 'text' => $locale->text('E-mail'), },
+    'cc'                => { 'text' => $locale->text('Cc'), },
+    'taxnumber'         => { 'text' => $locale->text('Tax Number'), },
+    'sic_code'          => { 'text' => $locale->text('SIC'), },
+    'business'          => { 'text' => $locale->text('Type of Business'), },
+    'invnumber'         => { 'text' => $locale->text('Invoice'), },
+    'ordnumber'         => { 'text' => $form->{IS_CUSTOMER} ? $locale->text('Sales Order') : $locale->text('Purchase Order'), },
+    'quonumber'         => { 'text' => $form->{IS_CUSTOMER} ? $locale->text('Quotation')   : $locale->text('Request for Quotation'), },
+  );
+
+  map { $column_defs{$_}->{visible} = $form->{"l_$_"} eq 'Y' } @columns;
+
+  my @hidden_variables  = (qw(db status obsolete), map { "l_$_" } @columns);
+  my @hidden_nondefault = grep({ $form->{$_} } @hidden_variables);
+  my $callback          = build_std_url('action=list_names', grep { $form->{$_} } @hidden_variables);
+  $form->{callback}     = "$callback&sort=" . E($form->{sort});
+
+  map { $column_defs{$_}->{link} = "${callback}&sort=${_}" } @columns;
+
+  my ($ordertype, $quotationtype, $attachment_basename);
+  if ($form->{IS_CUSTOMER}) {
+    $form->{title}       = $locale->text('Customers');
+    $ordertype           = 'sales_order';
+    $quotationtype       = 'sales_quotation';
+    $attachment_basename = $locale->text('customer_list');
 
-  $ordertype = ($form->{db} eq 'customer') ? 'sales_order' : 'purchase_order';
-  $quotationtype =
-    ($form->{db} eq 'customer') ? 'sales_quotation' : 'request_quotation';
-
-  foreach $ref (@{ $form->{CT} }) {
+  } else {
+    $form->{title}       = $locale->text('Vendors');
+    $ordertype           = 'purchase_order';
+    $quotationtype       = 'request_quotation';
+    $attachment_basename = $locale->text('vendor_list');
+  }
 
-    if ($ref->{id} eq $sameid) {
-      map { $column_data{$_} = "<td>&nbsp;</td>" } @column_index;
-    } else {
-      map { $column_data{$_} = "<td>$ref->{$_}&nbsp;</td>" } @column_index;
+  my $report = SL::ReportGenerator->new(\%myconfig, $form);
 
-      map { $column_data{$_} = "<td>$ref->{$_}&nbsp;</td>" }
-        (invnumber, ordnumber, quonumber);
+  $report->set_options('top_info_text'         => join("\n", @options),
+                       'raw_bottom_info_text'  => $form->parse_html_template2('ct/list_names_bottom'),
+                       'output_format'         => 'HTML',
+                       'title'                 => $form->{title},
+                       'attachment_basename'   => $attachment_basename . strftime('_%Y%m%d', localtime time),
+    );
+  $report->set_options_from_form();
 
-      $column_data{name} =
-        "<td align=left><a href=$form->{script}?action=edit&id=$ref->{id}&db=$form->{db}&login=$form->{login}&password=$form->{password}&status=$form->{status}&callback=$callback>$ref->{name}&nbsp;</td>";
+  $report->set_columns(%column_defs);
+  $report->set_column_order(@columns);
 
-      if ($ref->{email}) {
-        $email = $ref->{email};
-        $email =~ s/</\&lt;/;
-        $email =~ s/>/\&gt;/;
+  $report->set_export_options('list_names', @hidden_variables);
 
-        $column_data{email} =
-          qq|<td><a href="mailto:$ref->{email}">$email</a></td>|;
-      }
+  $report->set_sort_indicator($form->{sort}, 1);
 
-    }
+  my $previous_id;
 
-    if ($ref->{formtype} eq 'invoice') {
-      $column_data{invnumber} =
-        "<td><a href=$ref->{module}.pl?action=edit&id=$ref->{invid}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{invnumber}&nbsp;</td>";
-    }
+  foreach my $ref (@{ $form->{CT} }) {
+    my $row = { map { $_ => { 'data' => '' } } @columns };
 
-    if ($ref->{formtype} eq 'order') {
-      $column_data{ordnumber} =
-        "<td><a href=$ref->{module}.pl?action=edit&id=$ref->{invid}&type=$ordertype&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{ordnumber}&nbsp;</td>";
-    }
+    if ($ref->{id} ne $previous_id) {
+      $previous_id = $ref->{id};
+      map { $row->{$_}->{data} = $ref->{$_} } @columns;
 
-    if ($ref->{formtype} eq 'quotation') {
-      $column_data{quonumber} =
-        "<td><a href=$ref->{module}.pl?action=edit&id=$ref->{invid}&type=$quotationtype&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{quonumber}&nbsp;</td>";
+      $row->{name}->{link}  = build_std_url('action=edit', 'id=' . E($ref->{id}), 'callback', @hidden_nondefault);
+      $row->{email}->{link} = 'mailto:' . E($ref->{email});
     }
 
-    $i++;
-    $i %= 2;
-    print "
-        <tr class=listrow$i>
-";
-
-    map { print "$column_data{$_}\n" } @column_index;
-
-    print qq|
-        </tr>
-|;
-
-    $sameid = $ref->{id};
+    my $base_url              = build_std_url("script=$ref->{module}.pl", 'action=edit', 'id=' . E($ref->{invid}), 'callback', @hidden_nondefault);
+    $row->{invnumber}->{link} = $base_url;
+    $row->{ordnumber}->{link} = $base_url . "&type=${ordertype}";
+    $row->{quonumber}->{link} = $base_url . "&type=${quotationtype}";
+    my $column                = $ref->{formtype} eq 'invoice' ? 'invnumber' : $ref->{formtype} eq 'order' ? 'ordnumber' : 'quonumber';
+    $row->{$column}->{data}   = $ref->{$column};
 
+    $report->add_data($row);
   }
 
-  print qq|
-      </table>
-    </td>
-  </tr>
-  <tr>
-    <td><hr size=3 noshade></td>
-  </tr>
-</table>
-
-<br>
-<form method=post action=$form->{script}>
-
-<input name=callback type=hidden value="$form->{callback}">
-<input name=db type=hidden value=$form->{db}>
-
-<input type=hidden name=login value=$form->{login}>
-<input type=hidden name=password value=$form->{password}>
-
-<input class=submit type=submit name=action value="|
-    . $locale->text('Add') . qq|">
-
-  </form>
-
-</body>
-</html>
-|;
+  $report->generate_with_headers();
 
   $lxdebug->leave_sub();
 }
index f09e9e3..8841566 100644 (file)
@@ -726,8 +726,10 @@ aktualisieren wollen?',
   'New Buchungsgruppe <TMPL_VAR __counter__>' => 'Neue Buchungsgruppe <TMPL_VAR __counter__>',
   'New Templates'               => 'neue Vorlagen',
   'New contact'                 => 'Neuer Ansprechpartner',
+  'New customer'                => 'Neuer Kunde',
   'New sales order'             => 'Neuer Auftrag',
   'New unit'                    => 'Neue Einheit',
+  'New vendor'                  => 'Neuer Lieferante',
   'Next Dunning Level'          => 'Nächste Mahnstufe',
   'No'                          => 'Nein',
   'No Company Address given'    => 'Keine Firmenadresse hinterlegt!',
@@ -1276,6 +1278,7 @@ aktualisieren wollen?',
   'close'                       => 'schließen',
   'config'                      => 'Konfiguration',
   'continue'                    => 'weiter',
+  'customer_list'               => 'kundenliste',
   'customernumber not unique!'  => 'Die Kundennummer ist schon vergeben',
   'debug'                       => 'Debug',
   'delete'                      => 'Löschen',
@@ -1350,6 +1353,7 @@ aktualisieren wollen?',
   'use program settings'        => 'benutze Programmeinstellungen',
   'ustva'                       => 'UStVA',
   'valid from'                  => 'Gültig ab',
+  'vendor_list'                 => 'lieferantenliste',
   'winston_export'              => 'Winston-Export',
   'wrongformat'                 => 'Falsches Format',
   'yes'                         => 'ja',
index 7feb701..121e5ab 100644 (file)
@@ -3,7 +3,6 @@ $self->{texts} = {
   'ADDED'                       => 'Hinzugefügt',
   'Abteilung'                   => 'Abteilung',
   'Account Number'              => 'Kontonummer',
-  'Add'                         => 'Erfassen',
   'Add Customer'                => 'Kunde erfassen',
   'Add Vendor'                  => 'Lieferant erfassen',
   'Address'                     => 'Adresse',
@@ -17,6 +16,7 @@ $self->{texts} = {
   'Bin List'                    => 'Lagerliste',
   'Birthday'                    => 'Geburtstag',
   'CANCELED'                    => 'Storniert',
+  'CSV export -- options'       => 'CSV-Export -- Optionen',
   'Cannot delete customer!'     => 'Kunde kann nicht gelöscht werden!',
   'Cannot delete vendor!'       => 'Lieferant kann nicht gelöscht werden!',
   'Cc'                          => 'Cc',
@@ -25,6 +25,10 @@ $self->{texts} = {
   'Confirmation'                => 'Auftragsbestätigung',
   'Contact'                     => 'Kontakt',
   'Continue'                    => 'Weiter',
+  '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&auml;re html2ps-Konfigurationsdatei konnte nicht geschrieben werden.',
+  'Could not write the temporary HTML file.' => 'Eine tempor&auml;re HTML-Datei konnte nicht geschrieben werden.',
   'Country'                     => 'Land',
   'Credit Limit'                => 'Kreditlimit',
   'Credit Note'                 => 'Gutschrift',
@@ -89,6 +93,7 @@ $self->{texts} = {
   'Orders'                      => 'Aufträge',
   'Orphaned'                    => 'Nie benutzt',
   'PAYMENT POSTED'              => 'Rechung gebucht',
+  'PDF export -- options'       => 'PDF-Export -- Optionen',
   'POSTED'                      => 'Gebucht',
   'POSTED AS NEW'               => 'Als neu gebucht',
   'PRINTED'                     => 'Gedruckt',
@@ -113,10 +118,12 @@ $self->{texts} = {
   'Quotation'                   => 'Angebot',
   'Quotations'                  => 'Angebote',
   'RFQ'                         => 'Anfrage',
+  'Request for Quotation'       => 'Anfrage',
   'SAVED'                       => 'Gespeichert',
   'SAVED FOR DUNNING'           => 'Gespeichert',
   'SCREENED'                    => 'Angezeigt',
   'SIC'                         => 'SIC',
+  'Sales Order'                 => 'Kundenauftrag',
   'Salesman'                    => 'Verkäufer/in',
   'Sat. Fax'                    => 'Sat. Fax',
   'Sat. Phone'                  => 'Sat. Tel.',
@@ -140,6 +147,7 @@ $self->{texts} = {
   'Tax Number'                  => 'Steuernummer',
   'Tax Number / SSN'            => 'Steuernummer',
   '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.',
   'This customer number is already in use.' => 'Diese Kundennummer wird bereits verwendet.',
   'This vendor number is already in use.' => 'Diese Lieferantennummer wird bereits verwendet.',
   'Title'                       => 'Titel',
@@ -159,6 +167,7 @@ $self->{texts} = {
   'Vendors'                     => 'Lieferanten',
   'Zipcode'                     => 'PLZ',
   'bin_list'                    => 'Lagerliste',
+  'customer_list'               => 'kundenliste',
   'customernumber not unique!'  => 'Die Kundennummer ist schon vergeben',
   'history'                     => 'Historie',
   'invoice'                     => 'Rechnung',
@@ -167,10 +176,13 @@ $self->{texts} = {
   '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',
   's'                           => 's',
   'sales_order'                 => 'Kundenauftrag',
   'sales_quotation'             => 'Verkaufsangebot',
+  'vendor_list'                 => 'lieferantenliste',
   'yes'                         => 'ja',
 };
 
@@ -201,6 +213,11 @@ $self->{subs} = {
   'part_selection_internal'     => 'part_selection_internal',
   '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',
   'save'                        => 'save',
   'save_and_ap_transaction'     => 'save_and_ap_transaction',
   'save_and_ar_transaction'     => 'save_and_ar_transaction',
diff --git a/templates/webpages/ct/list_names_bottom_de.html b/templates/webpages/ct/list_names_bottom_de.html
new file mode 100644 (file)
index 0000000..e984ecd
--- /dev/null
@@ -0,0 +1,13 @@
+[% USE HTML %]<form method="post" action="ct.pl">
+
+ <input name="callback" type="hidden" value="[% HTML.escape(callback) %]">
+ <input name="db" type="hidden" value="[% HTML.escape(db) %]">
+
+ <input name="login" type="hidden" value="[% HTML.escape(login) %]">
+ <input name="password" type="hidden" value="[% HTML.escape(password) %]">
+
+ [% IF IS_CUSTOMER %]Neuer Kunde[% ELSE %]Neuer Lieferante[% END %]<br>
+
+ <input class="submit" type="submit" name="action" value="Erfassen">
+
+</form>
diff --git a/templates/webpages/ct/list_names_bottom_master.html b/templates/webpages/ct/list_names_bottom_master.html
new file mode 100644 (file)
index 0000000..eb30398
--- /dev/null
@@ -0,0 +1,13 @@
+[% USE HTML %]<form method="post" action="ct.pl">
+
+ <input name="callback" type="hidden" value="[% HTML.escape(callback) %]">
+ <input name="db" type="hidden" value="[% HTML.escape(db) %]">
+
+ <input name="login" type="hidden" value="[% HTML.escape(login) %]">
+ <input name="password" type="hidden" value="[% HTML.escape(password) %]">
+
+ [% IF IS_CUSTOMER %]<translate>New customer</translate>[% ELSE %]<translate>New vendor</translate>[% END %]<br>
+
+ <input class="submit" type="submit" name="action" value="<translate>Add</translate>">
+
+</form>