Merge branch 'master' of github.com:kivitendo/kivitendo-erp
[kivitendo-erp.git] / SL / Form.pm
index 79ff703..e115f97 100644 (file)
@@ -465,13 +465,14 @@ sub header {
   # this should gradually move to the layouts that need it
   $layout->use_stylesheet("$_.css") for qw(
     main menu list_accounts jquery.autocomplete
-    jquery.multiselect2side frame_header/header
+    jquery.multiselect2side
     ui-lightness/jquery-ui
-    jquery-ui.custom jqModal
+    jquery-ui.custom
   );
 
   $layout->use_javascript("$_.js") for (qw(
-    jquery jquery-ui jquery.cookie jqModal jquery.checkall jquery.download
+    jquery jquery-ui jquery.cookie jquery.checkall jquery.download
+    jquery/jquery.form client_js
     common part_selection switchmenuframe autocomplete_part
   ), "jquery/ui/i18n/jquery.ui.datepicker-$::myconfig{countrycode}");
 
@@ -1031,6 +1032,12 @@ sub parse_template {
   $self->{"myconfig_${_}"} = $myconfig->{$_} for grep { $_ ne 'dbpasswd' } keys %{ $myconfig };
   $self->{$_}              = $defaults->$_   for qw(co_ustid);
   $self->{"myconfig_${_}"} = $defaults->$_   for qw(address businessnumber co_ustid company duns sepa_creditor_id taxnumber);
+  $self->{AUTH}            = $::auth;
+  $self->{INSTANCE_CONF}   = $::instance_conf;
+  $self->{LOCALE}          = $::locale;
+  $self->{LXCONFIG}        = $::lx_office_conf;
+  $self->{LXDEBUG}         = $::lxdebug;
+  $self->{MYCONFIG}        = \%::myconfig;
 
   $self->{copies} = 1 if (($self->{copies} *= 1) <= 0);
 
@@ -1074,7 +1081,7 @@ sub parse_template {
 
   close OUT if $self->{OUT};
 
-  my $copy_to_webdav = $::instance_conf->get_webdav && $::instance_conf->get_webdav_documents && !$self->{preview};
+  my $copy_to_webdav = $::instance_conf->get_webdav && $::instance_conf->get_webdav_documents && !$self->{preview} && $self->{tmpdir} && $self->{tmpfile} && $self->{type};
 
   if ($self->{media} eq 'file') {
     copy(join('/', $self->{cwd}, $userspath, $self->{tmpfile}), $out =~ m|^/| ? $out : join('/', $self->{cwd}, $out)) if $template->uses_temp_file;
@@ -1155,16 +1162,22 @@ sub parse_template {
         seek  IN, 0, 0;
 
       } else {
-        $self->{attachment_filename} = ($self->{attachment_filename})
-                                     ? $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}"
-Content-Length: $numbytes
+        my %headers = ('-type'       => $template->get_mime_type,
+                       '-connection' => 'close',
+                       '-charset'    => 'UTF-8');
+
+        $self->{attachment_filename} ||= $self->generate_attachment_filename;
+
+        if ($self->{attachment_filename}) {
+          %headers = (
+            %headers,
+            '-attachment'     => $self->{attachment_filename},
+            '-content-length' => $numbytes,
+            '-charset'        => '',
+          );
+        }
 
-|;
+        print $::request->cgi->header(%headers);
 
         $::locale->with_raw_io(\*STDOUT, sub { print while <IN> });
       }
@@ -1403,11 +1416,19 @@ sub get_standard_dbh {
   return $standard_dbh;
 }
 
+sub set_standard_dbh {
+  my ($self, $dbh) = @_;
+  my $old_dbh      = $standard_dbh;
+  $standard_dbh    = $dbh;
+
+  return $old_dbh;
+}
+
 sub date_closed {
   $main::lxdebug->enter_sub();
 
   my ($self, $date, $myconfig) = @_;
-  my $dbh = $self->dbconnect($myconfig);
+  my $dbh = $self->get_standard_dbh;
 
   my $query = "SELECT 1 FROM defaults WHERE ? < closedto";
   my $sth = prepare_execute_query($self, $dbh, $query, conv_date($date));
@@ -1440,7 +1461,7 @@ sub date_max_future {
   $main::lxdebug->enter_sub();
 
   my ($self, $date, $myconfig) = @_;
-  my $dbh = $self->dbconnect($myconfig);
+  my $dbh = $self->get_standard_dbh;
 
   my $query = "SELECT 1 FROM defaults WHERE ? - current_date > max_future_booking_interval";
   my $sth = prepare_execute_query($self, $dbh, $query, conv_date($date));
@@ -1929,7 +1950,7 @@ sub get_duedate {
               : $self->{vendor_id}   ? SL::DB::Vendor     ->new(id => $self->{vendor_id})  ->load->payment
               :                        croak("Missing field in \$::form: payment_id, customer_id or vendor_id");
 
-  my $duedate = $terms->calc_date(reference_date => $reference_date)->to_kivitendo;
+  my $duedate = $terms ? $terms->calc_date(reference_date => $reference_date)->to_kivitendo : undef;
 
   $main::lxdebug->leave_sub();
 
@@ -2080,10 +2101,10 @@ sub _get_taxcharts {
   if (ref $params eq 'HASH') {
     $key = $params->{key} if ($params->{key});
     if ($params->{module} eq 'AR') {
-      push @where, 'taxkey NOT IN (8, 9, 18, 19)';
+      push @where, 'chart_categories ~ \'[ACILQ]\'';
 
     } elsif ($params->{module} eq 'AP') {
-      push @where, 'taxkey NOT IN (1, 2, 3, 12, 13)';
+      push @where, 'chart_categories ~ \'[ACELQ]\'';
     }
 
   } elsif ($params) {
@@ -2116,10 +2137,22 @@ sub _get_taxzones {
 sub _get_employees {
   $main::lxdebug->enter_sub();
 
-  my ($self, $dbh, $default_key, $key) = @_;
+  my ($self, $dbh, $params) = @_;
+
+  my $deleted = 0;
+
+  my $key;
+  if (ref $params eq 'HASH') {
+    $key     = $params->{key};
+    $deleted = $params->{deleted};
+
+  } else {
+    $key = $params;
+  }
 
-  $key = $default_key unless ($key);
-  $self->{$key} = selectall_hashref_query($self, $dbh, qq|SELECT * FROM employee ORDER BY lower(name)|);
+  $key     ||= "all_employees";
+  my $filter = $deleted ? '' : 'WHERE NOT COALESCE(deleted, FALSE)';
+  $self->{$key} = selectall_hashref_query($self, $dbh, qq|SELECT * FROM employee $filter ORDER BY lower(name)|);
 
   $main::lxdebug->leave_sub();
 }
@@ -2359,7 +2392,7 @@ sub get_lists {
   }
 
   if ($params{"employees"}) {
-    $self->_get_employees($dbh, "all_employees", $params{"employees"});
+    $self->_get_employees($dbh, $params{"employees"});
   }
 
   if ($params{"salesmen"}) {
@@ -2754,14 +2787,7 @@ sub create_links {
          FROM acc_trans a
          LEFT JOIN chart c ON (c.id = a.chart_id)
          LEFT JOIN project p ON (p.id = a.project_id)
-         LEFT JOIN tax t ON (t.id= (SELECT tk.tax_id FROM taxkeys tk
-                                    WHERE (tk.taxkey_id=a.taxkey) AND
-                                      ((CASE WHEN a.chart_id IN (SELECT chart_id FROM taxkeys WHERE taxkey_id = a.taxkey)
-                                        THEN tk.chart_id = a.chart_id
-                                        ELSE 1 = 1
-                                        END)
-                                       OR (c.link='%tax%')) AND
-                                      (startdate <= a.transdate) ORDER BY startdate DESC LIMIT 1))
+         LEFT JOIN tax t ON (t.id= a.tax_id)
          WHERE a.trans_id = ?
          AND a.fx_transaction = '0'
          ORDER BY a.acc_trans_id, a.transdate|;
@@ -3414,7 +3440,7 @@ sub prepare_for_printing {
   }
 
   my $printer_code    = $self->{printer_code} ? '_' . $self->{printer_code} : '';
-  my $email_extension = -f ($defaults->templates . "/$self->{formname}_email${language}.${extension}") ? '_email' : '';
+  my $email_extension = $self->{media} eq 'email' && -f ($defaults->templates . "/$self->{formname}_email${language}.${extension}") ? '_email' : '';
   $self->{IN}         = "$self->{formname}${email_extension}${language}${printer_code}.${extension}";
 
   # Format dates.