Merge branch 'von-opendynamic'
[kivitendo-erp.git] / SL / Form.pm
index 2e4f5a9..875b726 100644 (file)
@@ -673,6 +673,7 @@ sub init_template {
      'COMPILE_EXT'  => '.tcc',
      'COMPILE_DIR'  => $::lx_office_conf{paths}->{userspath} . '/templates-cache',
      'ERROR'        => 'templates/webpages/generic/exception.html',
+     'ENCODING'     => 'utf8',
   })) || die;
 }
 
@@ -1080,8 +1081,9 @@ sub parse_template {
   }
 
   close OUT if $self->{OUT};
-
-  my $copy_to_webdav = $::instance_conf->get_webdav && $::instance_conf->get_webdav_documents && !$self->{preview} && $self->{tmpdir} && $self->{tmpfile} && $self->{type};
+  # check only one flag (webdav_documents)
+  # therefore copy to webdav, even if we do not have the webdav feature enabled (just archive)
+  my $copy_to_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;
@@ -1105,15 +1107,16 @@ sub parse_template {
     $mail->{to} = $self->{EMAIL_RECIPIENT} ? $self->{EMAIL_RECIPIENT} : $self->{email};
     $mail->{from}   = qq|"$myconfig->{name}" <$myconfig->{email}>|;
     $mail->{fileid} = time() . '.' . $$ . '.';
-    $myconfig->{signature} =~ s/\r//g;
+    my $full_signature     =  $self->create_email_signature();
+    $full_signature        =~ s/\r//g;
 
     # if we send html or plain text inline
     if (($self->{format} eq 'html') && ($self->{sendmode} eq 'inline')) {
       $mail->{contenttype}    =  "text/html";
       $mail->{message}        =~ s/\r//g;
       $mail->{message}        =~ s/\n/<br>\n/g;
-      $myconfig->{signature}  =~ s/\n/<br>\n/g;
-      $mail->{message}       .=  "<br>\n-- <br>\n$myconfig->{signature}\n<br>";
+      $full_signature         =~ s/\n/<br>\n/g;
+      $mail->{message}       .=  $full_signature;
 
       open(IN, "<", $self->{tmpfile})
         or $self->error($self->cleanup . "$self->{tmpfile} : $!");
@@ -1129,9 +1132,7 @@ sub parse_template {
                                    "name"     => $attachment_name }];
       }
 
-      $mail->{message}  =~ s/\r//g;
-      $mail->{message} .=  "\n-- \n$myconfig->{signature}";
-
+      $mail->{message} .= $full_signature;
     }
 
     my $err = $mail->send();
@@ -1926,17 +1927,24 @@ sub get_employee_data {
   my $myconfig = \%main::myconfig;
   my $dbh      = $params{dbh} || $self->get_standard_dbh($myconfig);
 
-  my ($login)  = selectrow_query($self, $dbh, qq|SELECT login FROM employee WHERE id = ?|, conv_i($params{id}));
+  my ($login, $deleted)  = selectrow_query($self, $dbh, qq|SELECT login,deleted FROM employee WHERE id = ?|, conv_i($params{id}));
 
   if ($login) {
-    my $user = User->new(login => $login);
-    $self->{$params{prefix} . "_${_}"}    = $user->{$_}   for qw(email fax name signature tel);
-    $self->{$params{prefix} . "_${_}"}    = $defaults->$_ for qw(address businessnumber co_ustid company duns taxnumber);
-
+    # login already fetched and still the same client (mandant) | same for both cases (delete|!delete)
     $self->{$params{prefix} . '_login'}   = $login;
-    $self->{$params{prefix} . '_name'}  ||= $login;
-  }
+    $self->{$params{prefix} . "_${_}"}    = $defaults->$_ for qw(address businessnumber co_ustid company duns taxnumber);
 
+    if (!$deleted) {
+      # get employee data from auth.user_config
+      my $user = User->new(login => $login);
+      $self->{$params{prefix} . "_${_}"} = $user->{$_} for qw(email fax name signature tel);
+    } else {
+      # get saved employee data from employee
+      my $employee = SL::DB::Manager::Employee->find_by(id => conv_i($params{id}));
+      $self->{$params{prefix} . "_${_}"} = $employee->{"deleted_$_"} for qw(email fax signature tel);
+      $self->{$params{prefix} . "_name"} = $employee->name;
+    }
+ }
   $main::lxdebug->leave_sub();
 }
 
@@ -1948,8 +1956,8 @@ sub get_duedate {
   my $terms   = $self->{payment_id}  ? SL::DB::PaymentTerm->new(id => $self->{payment_id}) ->load
               : $self->{customer_id} ? SL::DB::Customer   ->new(id => $self->{customer_id})->load->payment
               : $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");
-
+              : $self->{invdate}     ? undef # no payment terms, therefore invdate == duedate
+              :                        croak("Missing field in \$::form: payment_id, customer_id, vendor_id or invdate");
   my $duedate = $terms ? $terms->calc_date(reference_date => $reference_date)->to_kivitendo : undef;
 
   $main::lxdebug->leave_sub();
@@ -3173,81 +3181,6 @@ sub get_history {
   return 0;
 }
 
-sub update_defaults {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $fld, $provided_dbh) = @_;
-
-  my $dbh;
-  if ($provided_dbh) {
-    $dbh = $provided_dbh;
-  } else {
-    $dbh = $self->dbconnect_noauto($myconfig);
-  }
-  my $query = qq|SELECT $fld FROM defaults FOR UPDATE|;
-  my $sth   = $dbh->prepare($query);
-
-  $sth->execute || $self->dberror($query);
-  my ($var) = $sth->fetchrow_array;
-  $sth->finish;
-
-  $var   = 0 if !defined($var) || ($var eq '');
-  $var   = SL::PrefixedNumber->new(number => $var)->get_next;
-  $query = qq|UPDATE defaults SET $fld = ?|;
-  do_query($self, $dbh, $query, $var);
-
-  if (!$provided_dbh) {
-    $dbh->commit;
-    $dbh->disconnect;
-  }
-
-  $main::lxdebug->leave_sub();
-
-  return $var;
-}
-
-sub update_business {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $business_id, $provided_dbh) = @_;
-
-  my $dbh;
-  if ($provided_dbh) {
-    $dbh = $provided_dbh;
-  } else {
-    $dbh = $self->dbconnect_noauto($myconfig);
-  }
-  my $query =
-    qq|SELECT customernumberinit FROM business
-       WHERE id = ? FOR UPDATE|;
-  my ($var) = selectrow_query($self, $dbh, $query, $business_id);
-
-  return undef unless $var;
-
-  if ($var =~ m/\d+$/) {
-    my $new_var  = (substr $var, $-[0]) * 1 + 1;
-    my $len_diff = length($var) - $-[0] - length($new_var);
-    $var         = substr($var, 0, $-[0]) . ($len_diff > 0 ? '0' x $len_diff : '') . $new_var;
-
-  } else {
-    $var = $var . '1';
-  }
-
-  $query = qq|UPDATE business
-              SET customernumberinit = ?
-              WHERE id = ?|;
-  do_query($self, $dbh, $query, $var, $business_id);
-
-  if (!$provided_dbh) {
-    $dbh->commit;
-    $dbh->disconnect;
-  }
-
-  $main::lxdebug->leave_sub();
-
-  return $var;
-}
-
 sub get_partsgroup {
   $main::lxdebug->enter_sub();
 
@@ -3394,6 +3327,13 @@ sub prepare_for_printing {
   # compatibility.
   $self->{$_} = $defaults->$_ for qw(company address taxnumber co_ustid duns sepa_creditor_id);
 
+  $self->{"myconfig_${_}"} = $::myconfig{$_} for grep { $_ ne 'dbpasswd' } keys %::myconfig;
+
+  if (!$self->{employee_id}) {
+    $self->{"employee_${_}"} = $::myconfig{$_} for qw(email tel fax name signature);
+    $self->{"employee_${_}"} = $defaults->$_   for qw(address businessnumber co_ustid company duns sepa_creditor_id taxnumber);
+  }
+
   # set shipto from billto unless set
   my $has_shipto = any { $self->{"shipto$_"} } qw(name street zipcode city country contact);
   if (!$has_shipto && ($self->{type} =~ m/^(?:purchase_order|request_quotation)$/)) {
@@ -3412,6 +3352,10 @@ sub prepare_for_printing {
     $output_longdates    = 1;
   }
 
+  $self->{myconfig_output_dateformat}   = $output_dateformat;
+  $self->{myconfig_output_longdates}    = $output_longdates;
+  $self->{myconfig_output_numberformat} = $output_numberformat;
+
   # Retrieve accounts for tax calculation.
   IC->retrieve_accounts(\%::myconfig, $self, map { $_ => $self->{"id_$_"} } 1 .. $self->{rowcount});
 
@@ -3552,6 +3496,21 @@ sub reformat_numbers {
   $::myconfig{numberformat} = $saved_numberformat;
 }
 
+sub create_email_signature {
+
+  my $client_signature = $::instance_conf->get_signature;
+  my $user_signature   = $::myconfig{signature};
+
+  my $signature = '';
+  if ( $client_signature or $user_signature ) {
+    $signature  = "\n\n-- \n";
+    $signature .= $user_signature   . "\n" if $user_signature;
+    $signature .= $client_signature . "\n" if $client_signature;
+  };
+  return $signature;
+
+};
+
 sub layout {
   my ($self) = @_;
   $::lxdebug->enter_sub;
@@ -3594,18 +3553,6 @@ Points of interest for a beginner are:
 
 =head1 SPECIAL FUNCTIONS
 
-=head2 C<update_business> PARAMS
-
-PARAMS (not named):
- \%config,     - config hashref
- $business_id, - business id
- $dbh          - optional database handle
-
-handles business (thats customer/vendor types) sequences.
-
-special behaviour for empty strings in customerinitnumber field:
-will in this case not increase the value, and return undef.
-
 =head2 C<redirect_header> $url
 
 Generates a HTTP redirection header for the new C<$url>. Constructs an