Erstellen von Rechnungen aus mehreren Lieferscheinen heraus.
authorMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 19 Mar 2008 21:10:33 +0000 (21:10 +0000)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 19 Mar 2008 21:10:33 +0000 (21:10 +0000)
12 files changed:
SL/DO.pm
bin/mozilla/do.pl
locale/de/all
locale/de/ca
locale/de/do
locale/de/login
locale/de/oe
locale/de/todo
templates/webpages/do/orders_bottom_de.html [new file with mode: 0644]
templates/webpages/do/orders_bottom_master.html [new file with mode: 0644]
templates/webpages/do/orders_top_de.html [new file with mode: 0644]
templates/webpages/do/orders_top_master.html [new file with mode: 0644]

index acbd8da..79dc341 100644 (file)
--- a/SL/DO.pm
+++ b/SL/DO.pm
@@ -425,7 +425,8 @@ sub delete {
 sub retrieve {
   $main::lxdebug->enter_sub();
 
-  my ($self)   = @_;
+  my $self     = shift;
+  my %params   = @_;
 
   my $myconfig = \%main::myconfig;
   my $form     = $main::form;
@@ -435,98 +436,120 @@ sub retrieve {
 
   my ($query, $query_add, @values, $sth, $ref);
 
-  if (!$form->{id}) {
+  my $vc   = $params{vc} eq 'customer' ? 'customer' : 'vendor';
+
+  my $mode = !$params{ids} ? 'default' : ref $params{ids} eq 'ARRAY' ? 'multi' : 'single';
+
+  if ($mode eq 'default') {
     $ref = selectfirst_hashref_query($form, $dbh, qq|SELECT current_date AS transdate, current_date AS reqdate|);
     map { $form->{$_} = $ref->{$_} } keys %$ref;
+
+    # get last name used
+    $form->lastname_used($dbh, $myconfig, $vc) unless $form->{"${vc}_id"};
+
+    $main::lxdebug->leave_sub();
+
+    return 1;
   }
 
-  my $vc = $form->{vc} eq "customer" ? "customer" : "vendor";
+  my @do_ids              = map { conv_i($_) } ($mode eq 'multi' ? @{ $params{ids} } : ($params{ids}));
+  my $do_ids_placeholders = join(', ', ('?') x scalar(@do_ids));
 
-  if ($form->{id}) {
+  # retrieve order for single id
+  # NOTE: this query is intended to fetch all information only ONCE.
+  # so if any of these infos is important (or even different) for any item,
+  # it will be killed out and then has to be fetched from the item scope query further down
+  $query =
+    qq|SELECT dord.cp_id, dord.donumber, dord.ordnumber, dord.transdate, dord.reqdate,
+         dord.shippingpoint, dord.shipvia, dord.notes, dord.intnotes,
+         e.name AS employee, dord.employee_id, dord.salesman_id,
+         dord.${vc}_id, cv.name AS ${vc},
+         dord.closed, dord.reqdate, dord.department_id, dord.cusordnumber,
+         d.description AS department, dord.language_id,
+         dord.shipto_id,
+         dord.globalproject_id, dord.delivered, dord.transaction_description
+       FROM delivery_orders dord
+       JOIN ${vc} cv ON (dord.${vc}_id = cv.id)
+       LEFT JOIN employee e ON (dord.employee_id = e.id)
+       LEFT JOIN department d ON (dord.department_id = d.id)
+       WHERE dord.id IN ($do_ids_placeholders)|;
+  $sth = prepare_execute_query($form, $dbh, $query, @do_ids);
 
-    # retrieve order for single id
-    # NOTE: this query is intended to fetch all information only ONCE.
-    # so if any of these infos is important (or even different) for any item,
-    # it will be killed out and then has to be fetched from the item scope query further down
-    $query =
-      qq|SELECT dord.cp_id, dord.donumber, dord.ordnumber, dord.transdate, dord.reqdate,
-           dord.shippingpoint, dord.shipvia, dord.notes, dord.intnotes,
-           e.name AS employee, dord.employee_id, dord.salesman_id,
-           dord.${vc}_id, cv.name AS ${vc},
-           dord.closed, dord.reqdate, dord.department_id, dord.cusordnumber,
-           d.description AS department, dord.language_id,
-           dord.shipto_id,
-           dord.globalproject_id, dord.delivered, dord.transaction_description
-         FROM delivery_orders dord
-         JOIN ${vc} cv ON (dord.${vc}_id = cv.id)
-         LEFT JOIN employee e ON (dord.employee_id = e.id)
-         LEFT JOIN department d ON (dord.department_id = d.id)
-         WHERE dord.id = ?|;
-    $sth = prepare_execute_query($form, $dbh, $query, conv_i($form->{id}));
-
-    $ref = $sth->fetchrow_hashref(NAME_lc);
-    $sth->finish();
+  delete $form->{"${vc}_id"};
+  while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+    if ($form->{"${vc}_id"} && ($ref->{"${vc}_id"} != $form->{"${vc}_id"})) {
+      $sth->finish();
+      $main::lxdebug->leave_sub();
+
+      return 0;
+    }
 
     map { $form->{$_} = $ref->{$_} } keys %$ref if ($ref);
+  }
+  $sth->finish();
 
-    $form->{saved_donumber} = $form->{donumber};
+  $form->{saved_donumber} = $form->{donumber};
 
-    # if not given, fill transdate with current_date
-    $form->{transdate} = $form->current_date($myconfig) unless $form->{transdate};
+  # if not given, fill transdate with current_date
+  $form->{transdate} = $form->current_date($myconfig) unless $form->{transdate};
 
+  if ($mode eq 'single') {
     $query = qq|SELECT s.* FROM shipto s WHERE s.trans_id = ? AND s.module = 'DO'|;
-    $sth = prepare_execute_query($form, $dbh, $query, $form->{id});
+    $sth   = prepare_execute_query($form, $dbh, $query, $form->{id});
 
-    $ref = $sth->fetchrow_hashref(NAME_lc);
-    delete($ref->{id});
+    $ref   = $sth->fetchrow_hashref(NAME_lc);
+    delete $ref->{id};
     map { $form->{$_} = $ref->{$_} } keys %$ref;
-    $sth->finish;
+    $sth->finish();
 
     # get printed, emailed and queued
     $query = qq|SELECT s.printed, s.emailed, s.spoolfile, s.formname FROM status s WHERE s.trans_id = ?|;
-    $sth = prepare_execute_query($form, $dbh, $query, conv_i($form->{id}));
+    $sth   = prepare_execute_query($form, $dbh, $query, conv_i($form->{id}));
 
     while ($ref = $sth->fetchrow_hashref(NAME_lc)) {
       $form->{printed} .= "$ref->{formname} " if $ref->{printed};
       $form->{emailed} .= "$ref->{formname} " if $ref->{emailed};
       $form->{queued}  .= "$ref->{formname} $ref->{spoolfile} " if $ref->{spoolfile};
     }
-    $sth->finish;
+    $sth->finish();
     map { $form->{$_} =~ s/ +$//g } qw(printed emailed queued);
 
-    my %oid = ('Pg'     => 'oid',
-               'Oracle' => 'rowid');
-
-    my $transdate = $form->{transdate} ? $dbh->quote($form->{transdate}) : "current_date";
+  } else {
+    delete $form->{id};
+  }
 
-    # retrieve individual items
-    # this query looks up all information about the items
-    # stuff different from the whole will not be overwritten, but saved with a suffix.
-    $query =
-      qq|SELECT doi.id AS delivery_order_items_id,
-           p.partnumber, p.assembly, doi.description, doi.qty,
-           doi.sellprice, doi.parts_id AS id, doi.unit, doi.discount, p.bin, p.notes AS partnotes,
-           doi.reqdate, doi.project_id, doi.serialnumber, doi.lastcost,
-           doi.ordnumber, doi.transdate, doi.cusordnumber, doi.longdescription,
-           doi.price_factor_id, doi.price_factor, doi.marge_price_factor,
-           pr.projectnumber,
-           pg.partsgroup
-         FROM delivery_order_items doi
-         JOIN parts p ON (doi.parts_id = p.id)
-         JOIN delivery_orders dord ON (doi.delivery_order_id = dord.id)
-         LEFT JOIN project pr ON (doi.project_id = pr.id)
-         LEFT JOIN partsgroup pg ON (p.partsgroup_id = pg.id)
-         WHERE doi.delivery_order_id = ?
-         ORDER BY doi.$oid{$myconfig->{dbdriver}}|;
-
-    $form->{form_details} = selectall_hashref_query($form, $dbh, $query, conv_i($form->{id}));
+  my %oid = ('Pg'     => 'oid',
+             'Oracle' => 'rowid');
 
+  # retrieve individual items
+  # this query looks up all information about the items
+  # stuff different from the whole will not be overwritten, but saved with a suffix.
+  $query =
+    qq|SELECT doi.id AS delivery_order_items_id,
+         p.partnumber, p.assembly, doi.description, doi.qty,
+         doi.sellprice, doi.parts_id AS id, doi.unit, doi.discount, p.bin, p.notes AS partnotes,
+         doi.reqdate, doi.project_id, doi.serialnumber, doi.lastcost,
+         doi.ordnumber, doi.transdate, doi.cusordnumber, doi.longdescription,
+         doi.price_factor_id, doi.price_factor, doi.marge_price_factor,
+         pr.projectnumber,
+         pg.partsgroup
+       FROM delivery_order_items doi
+       JOIN parts p ON (doi.parts_id = p.id)
+       JOIN delivery_orders dord ON (doi.delivery_order_id = dord.id)
+       LEFT JOIN project pr ON (doi.project_id = pr.id)
+       LEFT JOIN partsgroup pg ON (p.partsgroup_id = pg.id)
+       WHERE doi.delivery_order_id IN ($do_ids_placeholders)
+       ORDER BY doi.$oid{$myconfig->{dbdriver}}|;
+
+  $form->{form_details} = selectall_hashref_query($form, $dbh, $query, @do_ids);
+
+  if ($mode eq 'single') {
     my $in_out = $form->{type} =~ /^sales/ ? 'out' : 'in';
 
     $query =
       qq|SELECT qty, unit, bin_id, warehouse_id, chargenumber
-           FROM delivery_order_items_stock
-           WHERE delivery_order_item_id = ?|;
+         FROM delivery_order_items_stock
+         WHERE delivery_order_item_id = ?|;
     my $sth = prepare_query($form, $dbh, $query);
 
     foreach my $doi (@{ $form->{form_details} }) {
@@ -540,16 +563,13 @@ sub retrieve {
     }
 
     $sth->finish();
-
-  } else {
-    # get last name used
-    $form->lastname_used($dbh, $myconfig, $form->{vc}) unless $form->{"$form->{vc}_id"};
-
   }
 
   Common::webdav_folder($form) if ($main::webdav);
 
   $main::lxdebug->leave_sub();
+
+  return 1;
 }
 
 sub order_details {
index 2eee9ed..2117805 100644 (file)
@@ -156,7 +156,8 @@ sub order_links {
 
   my $editing = $form->{id};
 
-  DO->retrieve();
+  DO->retrieve('vc'  => $form->{vc},
+               'ids' => $form->{id});
 
   $payment_id  = $form->{payment_id}  if ($form->{payment_id});
   $language_id = $form->{language_id} if ($form->{language_id});
@@ -415,7 +416,7 @@ sub orders {
   $form->{rowcount} = scalar @{ $form->{DO} };
 
   my @columns = qw(
-    transdate
+    ids                     transdate
     id                      donumber
     ordnumber
     name                    employee
@@ -460,7 +461,8 @@ sub orders {
 
   $form->{"l_type"} = "Y";
   map { $column_defs{$_}->{visible} = $form->{"l_${_}"} ? 1 : 0 } @columns;
-  $column_defs{ids}->{visible} = $allow_multiple_orders ? 'HTML' : 0;
+
+  $column_defs{ids}->{visible} = 'HTML';
 
   $report->set_columns(%column_defs);
   $report->set_column_order(@columns);
@@ -508,10 +510,12 @@ sub orders {
     push @options, $locale->text('Not delivered');
   }
 
-  $report->set_options('top_info_text'       => join("\n", @options),
-                       'output_format'       => 'HTML',
-                       'title'               => $form->{title},
-                       'attachment_basename' => $attachment_basename . strftime('_%Y%m%d', localtime time),
+  $report->set_options('top_info_text'        => join("\n", @options),
+                       'raw_top_info_text'    => $form->parse_html_template('do/orders_top'),
+                       'raw_bottom_info_text' => $form->parse_html_template('do/orders_bottom'),
+                       'output_format'        => 'HTML',
+                       'title'                => $form->{title},
+                       'attachment_basename'  => $attachment_basename . strftime('_%Y%m%d', localtime time),
     );
   $report->set_options_from_form();
 
@@ -524,16 +528,27 @@ sub orders {
   my $edit_url       = build_std_url('action=edit', 'type', 'vc');
   my $edit_order_url = build_std_url('script=oe.pl', 'type=' . ($form->{type} eq 'sales_delivery_order' ? 'sales_order' : 'purchase_order'), 'action=edit');
 
+  my $idx            = 1;
+
   foreach $dord (@{ $form->{DO} }) {
     $dord->{open}      = $dord->{closed}    ? $locale->text('No')  : $locale->text('Yes');
     $dord->{delivered} = $dord->{delivered} ? $locale->text('Yes') : $locale->text('No');
 
     my $row = { map { $_ => { 'data' => $dord->{$_} } } @columns };
 
+    $row->{ids}  = {
+      'raw_data' =>   $cgi->hidden('-name' => "trans_id_${idx}", '-value' => $dord->{id})
+                    . $cgi->checkbox('-name' => "multi_id_${idx}", '-value' => 1, '-label' => ''),
+      'valign'   => 'center',
+      'align'    => 'center',
+    };
+
     $row->{donumber}->{link}  = $edit_url       . "&id=" . E($dord->{id})      . "&callback=${callback}";
     $row->{ordnumber}->{link} = $edit_order_url . "&id=" . E($dord->{oe_id})   . "&callback=${callback}";
 
     $report->add_data($row);
+
+    $idx++;
   }
 
   $report->generate_with_headers();
@@ -704,6 +719,69 @@ sub invoice {
   $lxdebug->leave_sub();
 }
 
+sub invoice_multi {
+  $lxdebug->enter_sub();
+
+  check_do_access();
+  $auth->assert($form->{type} eq 'sales_delivery_order' ? 'invoice_edit' : 'vendor_invoice_edit');
+
+  my @do_ids = map { $form->{"trans_id_$_"} } grep { $form->{"multi_id_$_"} } (1..$form->{rowcount});
+
+  if (!scalar @do_ids) {
+    $form->show_generic_error($locale->text('You have not selected any delivery order.'), 'back_button' => 1);
+  }
+
+  map { delete $form->{$_} } grep { m/^(?:trans|multi)_id_\d+/ } keys %{ $form };
+
+  if (!DO->retrieve('vc' => $form->{vc}, 'ids' => \@do_ids)) {
+    $form->show_generic_error($form->{vc} eq 'customer' ?
+                              $locale->text('You cannot create an invoice for delivery orders for different customers.') :
+                              $locale->text('You cannot create an invoice for delivery orders from different vendors.'),
+                              'back_button' => 1);
+  }
+
+  $form->{deliverydate}    = $form->{transdate};
+  $form->{transdate}       = $form->current_date(\%myconfig);
+  $form->{duedate}         = $form->current_date(\%myconfig, $form->{invdate}, $form->{terms} * 1);
+  $form->{type}            = "invoice";
+  $form->{closed}          = 0;
+  $form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
+
+  my $buysell;
+  if ($form->{type} eq 'purchase_delivery_order') {
+    $form->{title}  = $locale->text('Add Vendor Invoice');
+    $form->{script} = 'ir.pl';
+    $script         = "ir";
+    $buysell        = 'sell';
+
+  } else {
+    $form->{title}  = $locale->text('Add Sales Invoice');
+    $form->{script} = 'is.pl';
+    $script         = "is";
+    $buysell        = 'buy';
+  }
+
+  map { delete $form->{$_} } qw(id subject message cc bcc printed emailed queued);
+
+  $form->{rowcount} = 0;
+  foreach my $ref (@{ $form->{form_details} }) {
+    $form->{rowcount}++;
+    map { $form->{"${_}_$form->{rowcount}"} = $ref->{$_} } keys %{ $ref };
+    map { $form->{"${_}_$form->{rowcount}"} = $form->format_amount(\%myconfig, $ref->{$_}) } qw(qty sellprice discount lastcost);
+  }
+  delete $form->{form_details};
+
+  $locale = new Locale "$myconfig{countrycode}", "$script";
+
+  require "bin/mozilla/$form->{script}";
+
+  invoice_links();
+  prepare_invoice();
+  display_form();
+
+  $lxdebug->leave_sub();
+}
+
 sub save_as_new {
   $lxdebug->enter_sub();
 
index 584a85d..69f6b5b 100644 (file)
@@ -895,6 +895,7 @@ aktualisieren wollen?',
   'New assembly'                => 'Neues Erzeugnis',
   'New contact'                 => 'Neuer Ansprechpartner',
   'New customer'                => 'Neuer Kunde',
+  'New invoice'                 => 'Neue Rechnung',
   'New part'                    => 'Neue Ware',
   'New sales order'             => 'Neuer Auftrag',
   'New service'                 => 'Neue Dienstleistung',
@@ -1599,9 +1600,12 @@ aktualisieren wollen?',
   'You can use the following strings in the long description and all translations. They will be replaced by their actual values by Lx-Office before they\'re output.' => 'Sie k&ouml;nnen im Langtext und allen Übersetzungen die folgenden Variablen benutzen, die vor der Ausgabe von Lx-Office automatisch ersetzt werden:',
   'You cannot continue before all required modules are installed.' => 'Sie k&ouml;nnen nicht fortfahren, bevor alle ben&ouml;tigten Pakete installiert sind.',
   'You cannot continue until all unknown units have been mapped to known ones.' => 'Sie k&ouml;nnen nicht fortfahren, bis alle unbekannten Einheiten in neue Einheiten umgewandelt wurden.',
+  'You cannot create an invoice for delivery orders for different customers.' => 'Sie können keine Rechnung zu Lieferscheinen für verschiedene Kunden erstellen.',
+  'You cannot create an invoice for delivery orders from different vendors.' => 'Sie können keine Rechnung aus Lieferscheinen von verschiedenen Lieferanten erstellen.',
   'You did not enter a name!'   => 'Sie haben keinen Namen eingegeben!',
   'You do not have the permissions to access this function.' => 'Sie verf&uuml;gen nicht &uuml;ber die notwendigen Rechte, um auf diese Funktion zuzugreifen.',
   'You have entered or selected the following shipping address for this customer:' => 'Sie haben die folgende Lieferadresse eingegeben oder ausgew&auml;hlt:',
+  'You have not selected any delivery order.' => 'Sie haben keinen Lieferschein ausgewählt.',
   'You have to chose a dimension unit and a service unit which will then be assigned to those entries.' => 'Sie m&uuml;ssen eine Ma&szlig;- und eine Dienstleistungseinheit ausw&auml;hlen, die diesen Waren und Dienstleistungen, denen noch keine Einheit zugeordnet ist, zugeordnet wird.',
   'You have to chose which unit to save for each of them.' => 'Sie m&uuml;ssen f&uuml;r jeden Artikel die neue Einheit ausw&auml;hlen.',
   'You have to create at least one group, grant it access to Lx-Office\'s functions and assign users to it.' => 'Sie m&uuml;ssen mindestens eine Benutzergruppe anlegen, ihr Zugriff auf die verschiedenen Funktionsbereiche von Lx-Office gew&auml;hren und Benutzer dieser Gruppe zuordnen.',
index a8c0493..135b3ee 100644 (file)
@@ -5,7 +5,6 @@ $self->{texts} = {
   'AP'                          => 'Einkauf',
   'AR'                          => 'Verkauf',
   'Account'                     => 'Konto',
-  'Accrual'                     => 'Bilanzierung',
   'Advance turnover tax return' => 'Umsatzsteuervoranmeldung',
   'All reports'                 => 'Alle Berichte (Konten&uuml;bersicht, Summen- u. Saldenliste, GuV, BWA, Bilanz, Projektbuchungen)',
   'Apr'                         => 'Apr',
@@ -16,7 +15,6 @@ $self->{texts} = {
   'Bcc'                         => 'Bcc',
   'Bin List'                    => 'Lagerliste',
   'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Die Anmeldung am LDAP-Server als "#1" schlug fehl. Bitte &uuml;berpr&uuml;fen Sie die Angaben in config/authentication.pl.',
-  'Bis'                         => 'bis',
   'CANCELED'                    => 'Storniert',
   'CSV export -- options'       => 'CSV-Export -- Optionen',
   'Cc'                          => 'Cc',
@@ -41,7 +39,6 @@ $self->{texts} = {
   'Create and edit vendor invoices' => 'Eingangsrechnungen erfassen und bearbeiten',
   'Credit'                      => 'Haben',
   'Credit Note'                 => 'Gutschrift',
-  'Customized Report'           => 'Vorgewählte Zeiträume',
   'DATEV Export'                => 'DATEV-Export',
   'DELETED'                     => 'Gelöscht',
   'DUNNING STARTED'             => 'Mahnprozess gestartet',
@@ -50,22 +47,19 @@ $self->{texts} = {
   'Debit'                       => 'Soll',
   'Dec'                         => 'Dez',
   'December'                    => 'Dezember',
-  'Decimalplaces'               => 'Dezimalstellen',
   'Delivery Order'              => 'Lieferschein',
   'Department'                  => 'Abteilung',
   'Dependency loop detected:'   => 'Schleife in den Abh&auml;ngigkeiten entdeckt:',
   'Description'                 => 'Beschreibung',
   'Directory'                   => 'Verzeichnis',
   'ELSE'                        => 'Zusatz',
-  'EUR'                         => 'E/Ü-Rechnung',
   'Error in database control file \'%s\': %s' => 'Fehler in Datenbankupgradekontrolldatei \'%s\': %s',
-  'Falsches Datumsformat!'      => 'Falsches Datumsformat!',
   'Feb'                         => 'Feb',
   'February'                    => 'Februar',
   'File'                        => 'Datei',
-  'Free report period'          => 'Freier Zeitraum',
   'From'                        => 'Von',
   'General ledger and cash'     => 'Finanzbuchhaltung und Zahlungsverkehr',
+  'Include in Report'           => 'In Bericht aufnehmen',
   'Invoice'                     => 'Rechnung',
   'Jan'                         => 'Jan',
   'January'                     => 'Januar',
@@ -83,11 +77,9 @@ $self->{texts} = {
   'May '                        => 'Mai',
   'May set the BCC field when sending emails' => 'Beim Verschicken von Emails das Feld \'BCC\' setzen',
   'Message'                     => 'Nachricht',
-  'Method'                      => 'Verfahren',
   'Missing \'description\' field.' => 'Fehlendes Feld \'description\'.',
   'Missing \'tag\' field.'      => 'Fehlendes Feld \'tag\'.',
   'Missing parameter #1 in call to sub #2.' => 'Fehlernder Parameter \'#1\' in Funktionsaufruf \'#2\'.',
-  'Monthly'                     => 'monatlich',
   'More than one control file with the tag \'%s\' exist.' => 'Es gibt mehr als eine Kontrolldatei mit dem Tag \'%s\'.',
   'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'Es wurde kein oder ein unbekanntes Authentifizierungsmodul in "config/authentication.pl" angegeben.',
   'Nov'                         => 'Nov',
@@ -106,8 +98,6 @@ $self->{texts} = {
   'Proforma Invoice'            => 'Proformarechnung',
   'Project Number'              => 'Projektnummer',
   'Purchase Order'              => 'Lieferantenauftrag',
-  'Quarter'                     => 'Quartal',
-  'Quarterly'                   => 'quartalsweise',
   'Quotation'                   => 'Angebot',
   'RFQ'                         => 'Anfrage',
   'Receipt, payment, reconciliation' => 'Zahlungseingang, Zahlungsausgang, Kontenabgleich',
@@ -121,6 +111,7 @@ $self->{texts} = {
   'Storno Invoice'              => 'Stornorechnung',
   'Storno Packing List'         => 'Stornolieferschein',
   'Subject'                     => 'Betreff',
+  'Subtotal'                    => 'Zwischensumme',
   '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 LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'Der LDAP-Server "#1:#2" ist nicht erreichbar. Bitte &uuml;berpr&uuml;fen Sie die Angaben in config/authentication.pl.',
   'The config file "config/authentication.pl" contained invalid Perl code:' => 'Die Konfigurationsdatei "config/authentication.pl" enthielt ung&uuml;tigen Perl-Code:',
@@ -130,18 +121,15 @@ $self->{texts} = {
   'The connection to the template database failed:' => 'Die Verbindung zur Vorlagendatenbank schlug fehl:',
   'The creation of the authentication database failed:' => 'Das Anlegen der Authentifizierungsdatenbank schlug fehl:',
   'The list has been printed.'  => 'Die Liste wurde ausgedruckt.',
+  'To'                          => 'An',
   'To (email)'                  => 'An',
   'Transactions, AR transactions, AP transactions' => 'Dialogbuchen, Debitorenrechnungen, Kreditorenrechnungen',
   'Unknown dependency \'%s\'.'  => 'Unbekannte Abh&auml;ngigkeit \'%s\'.',
   'View warehouse content'      => 'Lagerbestand ansehen',
   'Warehouse management'        => 'Lagerverwaltung/Bestandsveränderung',
-  'YYYY'                        => 'JJJJ',
-  'Year'                        => 'Jahr',
-  'Yearly'                      => 'jährlich',
   'You do not have the permissions to access this function.' => 'Sie verf&uuml;gen nicht &uuml;ber die notwendigen Rechte, um auf diese Funktion zuzugreifen.',
   '[email]'                     => '[email]',
   'bin_list'                    => 'Lagerliste',
-  'button'                      => '?',
   'chart_of_accounts'           => 'kontenuebersicht',
   'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Das Schl&uuml;sselwort "DB_config" fehlt.',
   'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Der Schl&uuml;ssel "LDAP_config" fehlt.',
@@ -158,7 +146,6 @@ $self->{texts} = {
   'request_quotation'           => 'Angebotsanforderung',
   'sales_order'                 => 'Kundenauftrag',
   'sales_quotation'             => 'Verkaufsangebot',
-  'wrongformat'                 => 'Falsches Format',
 };
 
 $self->{subs} = {
index 135efef..9ba305e 100644 (file)
@@ -264,7 +264,10 @@ $self->{texts} = {
   'View warehouse content'      => 'Lagerbestand ansehen',
   'Warehouse management'        => 'Lagerverwaltung/Bestandsveränderung',
   'Yes'                         => 'Ja',
+  'You cannot create an invoice for delivery orders for different customers.' => 'Sie können keine Rechnung zu Lieferscheinen für verschiedene Kunden erstellen.',
+  'You cannot create an invoice for delivery orders from different vendors.' => 'Sie können keine Rechnung aus Lieferscheinen von verschiedenen Lieferanten erstellen.',
   'You do not have the permissions to access this function.' => 'Sie verf&uuml;gen nicht &uuml;ber die notwendigen Rechte, um auf diese Funktion zuzugreifen.',
+  'You have not selected any delivery order.' => 'Sie haben keinen Lieferschein ausgewählt.',
   'Zipcode'                     => 'PLZ',
   '[email]'                     => '[email]',
   'bin_list'                    => 'Lagerliste',
@@ -328,6 +331,7 @@ $self->{subs} = {
   'format_dates'                => 'format_dates',
   'get_basic_bin_wh_info'       => 'get_basic_bin_wh_info',
   'invoice'                     => 'invoice',
+  'invoice_multi'               => 'invoice_multi',
   'invoicetotal'                => 'invoicetotal',
   'item_selected'               => 'item_selected',
   'mark_as_paid_common'         => 'mark_as_paid_common',
index 18f320a..22b6c65 100644 (file)
@@ -339,8 +339,11 @@ $self->{texts} = {
   'Workflow sales_quotation'    => 'Workflow Angebot',
   'Yes'                         => 'Ja',
   'You are logged out!'         => 'Auf Wiedersehen!',
+  'You cannot create an invoice for delivery orders for different customers.' => 'Sie können keine Rechnung zu Lieferscheinen für verschiedene Kunden erstellen.',
+  'You cannot create an invoice for delivery orders from different vendors.' => 'Sie können keine Rechnung aus Lieferscheinen von verschiedenen Lieferanten erstellen.',
   'You did not enter a name!'   => 'Sie haben keinen Namen eingegeben!',
   'You do not have the permissions to access this function.' => 'Sie verf&uuml;gen nicht &uuml;ber die notwendigen Rechte, um auf diese Funktion zuzugreifen.',
+  'You have not selected any delivery order.' => 'Sie haben keinen Lieferschein ausgewählt.',
   'You must chose a user.'      => 'Sie m&uuml;ssen einen Benutzer ausw&auml;hlen.',
   'Zipcode'                     => 'PLZ',
   '[email]'                     => '[email]',
@@ -429,6 +432,7 @@ $self->{subs} = {
   'format_dates'                => 'format_dates',
   'get_basic_bin_wh_info'       => 'get_basic_bin_wh_info',
   'invoice'                     => 'invoice',
+  'invoice_multi'               => 'invoice_multi',
   'invoicetotal'                => 'invoicetotal',
   'item_selected'               => 'item_selected',
   'login'                       => 'login',
index 5529449..16450a3 100644 (file)
@@ -309,7 +309,10 @@ $self->{texts} = {
   'Workflow sales_order'        => 'Workflow Auftrag',
   'Workflow sales_quotation'    => 'Workflow Angebot',
   'Yes'                         => 'Ja',
+  'You cannot create an invoice for delivery orders for different customers.' => 'Sie können keine Rechnung zu Lieferscheinen für verschiedene Kunden erstellen.',
+  'You cannot create an invoice for delivery orders from different vendors.' => 'Sie können keine Rechnung aus Lieferscheinen von verschiedenen Lieferanten erstellen.',
   'You do not have the permissions to access this function.' => 'Sie verf&uuml;gen nicht &uuml;ber die notwendigen Rechte, um auf diese Funktion zuzugreifen.',
+  'You have not selected any delivery order.' => 'Sie haben keinen Lieferschein ausgewählt.',
   'Zipcode'                     => 'PLZ',
   '[email]'                     => '[email]',
   'bin_list'                    => 'Lagerliste',
@@ -390,6 +393,7 @@ $self->{subs} = {
   'format_dates'                => 'format_dates',
   'get_basic_bin_wh_info'       => 'get_basic_bin_wh_info',
   'invoice'                     => 'invoice',
+  'invoice_multi'               => 'invoice_multi',
   'invoicetotal'                => 'invoicetotal',
   'item_selected'               => 'item_selected',
   'mark_as_paid_common'         => 'mark_as_paid_common',
index f0b6ded..32bcc59 100644 (file)
@@ -333,7 +333,10 @@ $self->{texts} = {
   'Workflow sales_order'        => 'Workflow Auftrag',
   'Workflow sales_quotation'    => 'Workflow Angebot',
   'Yes'                         => 'Ja',
+  'You cannot create an invoice for delivery orders for different customers.' => 'Sie können keine Rechnung zu Lieferscheinen für verschiedene Kunden erstellen.',
+  'You cannot create an invoice for delivery orders from different vendors.' => 'Sie können keine Rechnung aus Lieferscheinen von verschiedenen Lieferanten erstellen.',
   'You do not have the permissions to access this function.' => 'Sie verf&uuml;gen nicht &uuml;ber die notwendigen Rechte, um auf diese Funktion zuzugreifen.',
+  'You have not selected any delivery order.' => 'Sie haben keinen Lieferschein ausgewählt.',
   'You must chose a user.'      => 'Sie m&uuml;ssen einen Benutzer ausw&auml;hlen.',
   'Zipcode'                     => 'PLZ',
   '[email]'                     => '[email]',
@@ -421,6 +424,7 @@ $self->{subs} = {
   'format_dates'                => 'format_dates',
   'get_basic_bin_wh_info'       => 'get_basic_bin_wh_info',
   'invoice'                     => 'invoice',
+  'invoice_multi'               => 'invoice_multi',
   'invoicetotal'                => 'invoicetotal',
   'item_selected'               => 'item_selected',
   'mark_as_paid_common'         => 'mark_as_paid_common',
diff --git a/templates/webpages/do/orders_bottom_de.html b/templates/webpages/do/orders_bottom_de.html
new file mode 100644 (file)
index 0000000..8026e42
--- /dev/null
@@ -0,0 +1,9 @@
+[% USE HTML %]
+ Neue Rechnung<br>
+ <input class="submit" type="submit" name="action" value="Weiter">
+ <input type="hidden" name="nextsub" value="invoice_multi">
+ <input type="hidden" name="type" value="[% HTML.escape(type) %]">
+ <input type="hidden" name="vc" value="[% HTML.escape(vc) %]">
+ <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+ <input type="hidden" name="rowcount" value="[% HTML.escape(rowcount) %]">
+</form>
diff --git a/templates/webpages/do/orders_bottom_master.html b/templates/webpages/do/orders_bottom_master.html
new file mode 100644 (file)
index 0000000..24988d7
--- /dev/null
@@ -0,0 +1,9 @@
+[% USE HTML %]
+ <translate>New invoice</translate><br>
+ <input class="submit" type="submit" name="action" value="<translate>Continue</translate>">
+ <input type="hidden" name="nextsub" value="invoice_multi">
+ <input type="hidden" name="type" value="[% HTML.escape(type) %]">
+ <input type="hidden" name="vc" value="[% HTML.escape(vc) %]">
+ <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+ <input type="hidden" name="rowcount" value="[% HTML.escape(rowcount) %]">
+</form>
diff --git a/templates/webpages/do/orders_top_de.html b/templates/webpages/do/orders_top_de.html
new file mode 100644 (file)
index 0000000..bd402c4
--- /dev/null
@@ -0,0 +1 @@
+<form method="post" action="do.pl">
diff --git a/templates/webpages/do/orders_top_master.html b/templates/webpages/do/orders_top_master.html
new file mode 100644 (file)
index 0000000..bd402c4
--- /dev/null
@@ -0,0 +1 @@
+<form method="post" action="do.pl">