Beim Speichern einfach in allen Einheiten nach der ausgewählten Einheit suchen.
[kivitendo-erp.git] / SL / Form.pm
index caace43..e3ff9cc 100644 (file)
@@ -45,6 +45,7 @@ use CGI::Ajax;
 use SL::DBUtils;
 use SL::Menu;
 use SL::User;
+use SL::Common;
 use CGI;
 
 sub _input_to_hash {
@@ -257,6 +258,8 @@ sub hide_form {
 sub error {
   $main::lxdebug->enter_sub();
 
+  $main::lxdebug->show_backtrace();
+
   my ($self, $msg) = @_;
   if ($ENV{HTTP_USER_AGENT}) {
     $msg =~ s/\n/<br>/g;
@@ -352,7 +355,7 @@ sub header {
     return;
   }
 
-  my ($stylesheet, $favicon, $charset);
+  my ($stylesheet, $favicon);
 
   if ($ENV{HTTP_USER_AGENT}) {
 
@@ -370,11 +373,8 @@ sub header {
   |;
     }
 
-    if ($self->{charset}) {
-      $charset =
-        qq|<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=$self->{charset}">
-  |;
-    }
+    my $db_charset = $main::dbcharset ? $main::dbcharset : Common::DEFAULT_CHARSET;
+
     if ($self->{landscape}) {
       $pagelayout = qq|<style type="text/css">
                         \@page { size:landscape; }
@@ -404,7 +404,7 @@ sub header {
     foreach $item (@ { $self->{AJAX} }) {
       $ajax .= $item->show_javascript();
     }
-    print qq|Content-Type: text/html
+    print qq|Content-Type: text/html; charset=${db_charset};
 
 <html>
 <head>
@@ -412,7 +412,7 @@ sub header {
   $stylesheet
   $pagelayout
   $favicon
-  $charset
+  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=${db_charset}">
   $jsscript
   $ajax
 
@@ -774,7 +774,7 @@ sub parse_template {
   # OUT is used for the media, screen, printer, email
   # for postscript we store a copy in a temporary file
   my $fileid = time;
-  $self->{tmpfile} = "$userspath/${fileid}.$self->{IN}" if ( $self->{tmpfile} eq '' );
+  $self->{tmpfile} ||= "$userspath/${fileid}.$self->{IN}";
   if ($template->uses_temp_file() || $self->{media} eq 'email') {
     $out = $self->{OUT};
     $self->{OUT} = ">$self->{tmpfile}";
@@ -803,7 +803,8 @@ sub parse_template {
       my $mail = new Mailer;
 
       map { $mail->{$_} = $self->{$_} }
-        qw(cc bcc subject message version format charset);
+        qw(cc bcc subject message version format);
+      $mail->{charset} = $main::dbcharset ? $main::dbcharset : Common::DEFAULT_CHARSET;
       $mail->{to} = $self->{EMAIL_RECIPIENT} ? $self->{EMAIL_RECIPIENT} : $self->{email};
       $mail->{from}   = qq|"$myconfig->{name}" <$myconfig->{email}>|;
       $mail->{fileid} = "$fileid.";
@@ -861,7 +862,8 @@ sub parse_template {
           open(OUT, $self->{OUT})
             or $self->error($self->cleanup . "$self->{OUT} : $!");
         } else {
-          $self->{attachment_filename} = $self->{tmpfile} if ($self->{attachment_filename} eq '');
+          $self->{attachment_filename} = $self->generate_attachment_filename();
+
           # launch application
           print qq|Content-Type: | . $template->get_mime_type() . qq|
 Content-Disposition: attachment; filename="$self->{attachment_filename}"
@@ -893,6 +895,48 @@ Content-Length: $numbytes
   $main::lxdebug->leave_sub();
 }
 
+sub generate_attachment_filename {
+  my ($self) = @_;
+
+  my %formname_translations = (
+     bin_list            => $main::locale->text('Bin List'),
+     credit_note         => $main::locale->text('Credit Note'),
+     invoice             => $main::locale->text('Invoice'),
+     packing_list        => $main::locale->text('Packing List'),
+     pick_list           => $main::locale->text('Pick List'),
+     proforma            => $main::locale->text('Proforma Invoice'),
+     purchase_order      => $main::locale->text('Purchase Order'),
+     request_quotation   => $main::locale->text('RFQ'),
+     sales_order         => $main::locale->text('Confirmation'),
+     sales_quotation     => $main::locale->text('Quotation'),
+     storno_invoice      => $main::locale->text('Storno Invoice'),
+     storno_packing_list => $main::locale->text('Storno Packing List'),
+  );
+
+  my $attachment_filename = $formname_translations{$self->{"formname"}};
+  my $prefix = 
+      (grep { $self->{"type"} eq $_ } qw(invoice credit_note)) ? "inv"
+    : ($self->{"type"} =~ /_quotation$/)                       ? "quo"
+    :                                                            "ord";
+
+  if ($attachment_filename && $self->{"${prefix}number"}) {
+    $attachment_filename .= "_" . $self->{"${prefix}number"}
+                            . (  $self->{format} =~ /pdf/i          ? ".pdf"
+                               : $self->{format} =~ /postscript/i   ? ".ps"
+                               : $self->{format} =~ /opendocument/i ? ".odt"
+                               : $self->{format} =~ /html/i         ? ".html"
+                               :                                      "");
+    $attachment_filename =~ s/ /_/g;
+    my %umlaute = ( "ä" => "ae", "ö" => "oe", "ü" => "ue", 
+                    "Ä" => "Ae", "Ö" => "Oe", "Ü" => "Ue", "ß" => "ss");
+    map { $attachment_filename =~ s/$_/$umlaute{$_}/g } keys %umlaute;
+  } else {
+    $attachment_filename = "";
+  }
+
+  return $attachment_filename;
+}
+
 sub cleanup {
   $main::lxdebug->enter_sub();
 
@@ -1602,6 +1646,48 @@ $main::lxdebug->enter_sub();
   $main::lxdebug->leave_sub();
 }
 
+sub _get_payments {
+$main::lxdebug->enter_sub();
+
+  my ($self, $dbh, $key) = @_;
+
+  $key = "all_payments" unless ($key);
+
+  my $query = qq|SELECT * FROM payment_terms ORDER BY id|;
+  $self->{$key} = selectall_hashref_query($self, $dbh, $query);
+
+  $main::lxdebug->leave_sub();
+}
+
+sub _get_customers {
+  $main::lxdebug->enter_sub();
+
+  my ($self, $dbh, $key) = @_;
+
+  $key = "all_customers" unless ($key);
+
+  my $query = qq|SELECT * FROM customer|;
+
+  $self->{$key} = selectall_hashref_query($self, $dbh, $query);
+
+  $main::lxdebug->leave_sub();
+}
+
+sub _get_vendors {
+  $main::lxdebug->enter_sub();
+
+  my ($self, $dbh, $key) = @_;
+
+  $key = "all_vendors" unless ($key);
+
+  my $query = qq|SELECT * FROM vendor|;
+
+  $self->{$key} = selectall_hashref_query($self, $dbh, $query);
+
+  $main::lxdebug->leave_sub();
+}
+
 sub get_lists {
   $main::lxdebug->enter_sub();
 
@@ -1663,6 +1749,18 @@ sub get_lists {
   if($params{"currencies"}) {
     $self->_get_currencies($dbh, $params{"currencies"});
   }
+  
+  if($params{"customers"}) {
+    $self->_get_customers($dbh, $params{"customers"});
+  }
+  
+  if($params{"vendors"}) {
+    $self->_get_vendors($dbh, $params{"vendors"});
+  }
+  
+  if($params{"payments"}) {
+    $self->_get_payments($dbh, $params{"payments"});
+  }
 
   $dbh->disconnect();