Whitespace Purge
[kivitendo-erp.git] / SL / Form.pm
index 5fcd09e..d68bc71 100644 (file)
@@ -36,6 +36,9 @@
 #======================================================================
 
 package Form;
+
+#use strict;
+
 use Data::Dumper;
 
 use CGI;
@@ -57,7 +60,7 @@ use List::Util qw(first max min sum);
 
 my $standard_dbh;
 
-sub DESTROY {
+END {
   if ($standard_dbh) {
     $standard_dbh->disconnect();
     undef $standard_dbh;
@@ -222,7 +225,7 @@ sub new {
   $self->{action}  =  lc $self->{action};
   $self->{action}  =~ s/( |-|,|\#)/_/g;
 
-  $self->{version} =  "2.4.3";
+  $self->{version} =  "2.6.0 beta 1";
 
   $main::lxdebug->leave_sub();
 
@@ -533,7 +536,7 @@ sub header {
     return;
   }
 
-  my ($stylesheet, $favicon);
+  my ($stylesheet, $favicon, $pagelayout);
 
   if ($ENV{HTTP_USER_AGENT}) {
     my $doctype;
@@ -591,7 +594,7 @@ sub header {
       ? "$self->{title} - $self->{titlebar}"
       : $self->{titlebar};
     my $ajax = "";
-    foreach $item (@ { $self->{AJAX} }) {
+    foreach my $item (@ { $self->{AJAX} }) {
       $ajax .= $item->show_javascript();
     }
 
@@ -609,7 +612,7 @@ sub header {
 
   <script type="text/javascript">
   <!--
-    function fokus() {
+    function focus() {
       $fokus
     }
   //-->
@@ -617,15 +620,15 @@ sub header {
 
   <meta name="robots" content="noindex,nofollow" />
   <script type="text/javascript" src="js/highlight_input.js"></script>
-  <link rel="stylesheet" type="text/css" href="css/tabcontent.css" />
 
+  <link rel="stylesheet" type="text/css" href="css/tabcontent.css" />
   <script type="text/javascript" src="js/tabcontent.js">
 
   /***********************************************
-  * Tab Content script- Dynamic Drive DHTML code library (www.dynamicdrive.com)
-  * This notice MUST stay intact for legal use
-  * Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
-  ***********************************************/
+   * Tab Content script v2.2- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
+   * This notice MUST stay intact for legal use
+   * Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
+   ***********************************************/
 
   </script>
 
@@ -771,6 +774,8 @@ sub parse_html_template {
 }
 
 sub show_generic_error {
+  $main::lxdebug->enter_sub();
+
   my ($self, $error, %params) = @_;
 
   my $add_params = {
@@ -792,15 +797,19 @@ sub show_generic_error {
     $add_params->{SHOW_BACK_BUTTON} = 1;
   }
 
-  $self->{title} = $title if ($title);
+  $self->{title} = $params{title} if $params{title};
 
   $self->header();
   print $self->parse_html_template("generic/error", $add_params);
 
+  $main::lxdebug->leave_sub();
+
   die("Error: $error\n");
 }
 
 sub show_generic_information {
+  $main::lxdebug->enter_sub();
+
   my ($self, $text, $title) = @_;
 
   my $add_params = {
@@ -813,7 +822,9 @@ sub show_generic_information {
   $self->header();
   print $self->parse_html_template("generic/information", $add_params);
 
-  die("Information: $error\n");
+  $main::lxdebug->leave_sub();
+
+  die("Information: $text\n");
 }
 
 # write Trigger JavaScript-Code ($qty = quantity of Triggers)
@@ -836,8 +847,8 @@ sub write_trigger {
     "yyyy-mm-dd" => "%Y-%m-%d",
     );
 
-  my $ifFormat = defined($dateformats{$myconfig{"dateformat"}}) ?
-    $dateformats{$myconfig{"dateformat"}} : "%d.%m.%Y";
+  my $ifFormat = defined($dateformats{$myconfig->{"dateformat"}}) ?
+    $dateformats{$myconfig->{"dateformat"}} : "%d.%m.%Y";
 
   my @triggers;
   while ($#_ >= 2) {
@@ -870,7 +881,7 @@ sub redirect {
 
   if ($self->{callback}) {
 
-    ($script, $argv) = split(/\?/, $self->{callback}, 2);
+    my ($script, $argv) = split(/\?/, $self->{callback}, 2);
     $script =~ s|.*/||;
     $script =~ s|[^a-zA-Z0-9_\.]||g;
     exec("perl", "$script", $argv);
@@ -903,12 +914,12 @@ sub format_amount {
   if ($amount eq "") {
     $amount = 0;
   }
-  
+
   # Hey watch out! The amount can be an exponential term like 1.13686837721616e-13
-  
+
   my $neg = ($amount =~ s/^-//);
   my $exp = ($amount =~ m/[e]/) ? 1 : 0;
-  
+
   if (defined($places) && ($places ne '')) {
     if (not $exp) {
       if ($places < 0) {
@@ -980,6 +991,7 @@ sub format_amount_units {
   $amount       *= $conv_unit->{factor};
 
   my @values;
+  my $num;
 
   foreach my $unit (@$conv_units) {
     my $last = $unit->{name} eq $part_unit->{name};
@@ -1107,13 +1119,11 @@ sub parse_template {
   # Copy the notes from the invoice/sales order etc. back to the variable "notes" because that is where most templates expect it to be.
   $self->{"notes"} = $self->{ $self->{"formname"} . "notes" };
 
-  map({ $self->{"employee_${_}"} = $myconfig->{$_}; }
-      qw(email tel fax name signature company address businessnumber
-         co_ustid taxnumber duns));
+  if (!$self->{employee_id}) {
+    map { $self->{"employee_${_}"} = $myconfig->{$_}; } qw(email tel fax name signature company address businessnumber co_ustid taxnumber duns);
+  }
 
-  map({ $self->{"${_}"} = $myconfig->{$_}; }
-      qw(co_ustid));
-              
+  map { $self->{"${_}"} = $myconfig->{$_}; } qw(co_ustid);
 
   $self->{copies} = 1 if (($self->{copies} *= 1) <= 0);
 
@@ -1218,7 +1228,7 @@ sub parse_template {
           open(OUT, $self->{OUT})
             or $self->error($self->cleanup . "$self->{OUT} : $!");
         } else {
-          $self->{attachment_filename} = ($self->{attachment_filename}) 
+          $self->{attachment_filename} = ($self->{attachment_filename})
                                        ? $self->{attachment_filename}
                                        : $self->generate_attachment_filename();
 
@@ -1308,14 +1318,19 @@ sub generate_attachment_filename {
   my $attachment_filename = $main::locale->unquote_special_chars('HTML', $self->get_formname_translation());
   my $prefix              = $self->get_number_prefix_for_type();
 
-  if ($attachment_filename && $self->{"${prefix}number"}) {
+  if ($self->{preview} && (first { $self->{type} eq $_ } qw(invoice credit_note))) {
+    $attachment_filename .= ' (' . $main::locale->text('Preview') . ')' . $self->get_extension_for_format();
+
+  } elsif ($attachment_filename && $self->{"${prefix}number"}) {
     $attachment_filename .=  "_" . $self->{"${prefix}number"} . $self->get_extension_for_format();
-    $attachment_filename  =  $main::locale->quote_special_chars('filenames', $attachment_filename);
-    $attachment_filename  =~ s|[\s/\\]+|_|g;
+
   } else {
     $attachment_filename = "";
   }
 
+  $attachment_filename =  $main::locale->quote_special_chars('filenames', $attachment_filename);
+  $attachment_filename =~ s|[\s/\\]+|_|g;
+
   return $attachment_filename;
 }
 
@@ -1365,6 +1380,7 @@ sub datetonum {
   $main::lxdebug->enter_sub();
 
   my ($self, $date, $myconfig) = @_;
+  my ($yy, $mm, $dd);
 
   if ($date && $date =~ /\D/) {
 
@@ -1421,9 +1437,9 @@ sub dbconnect_noauto {
   $main::lxdebug->enter_sub();
 
   my ($self, $myconfig) = @_;
-  
+
   # connect to database
-  $dbh =
+  my $dbh =
     DBI->connect($myconfig->{dbconnect}, $myconfig->{dbuser},
                  $myconfig->{dbpasswd}, { AutoCommit => 0 })
     or $self->dberror;
@@ -1502,7 +1518,7 @@ sub update_exchangerate {
   if ($curr eq '') {
     $main::lxdebug->leave_sub();
     return;
-  }  
+  }
   $query = qq|SELECT curr FROM defaults|;
 
   my ($currency) = selectrow_query($self, $dbh, $query);
@@ -1543,7 +1559,7 @@ sub update_exchangerate {
                 SET $set
                 WHERE curr = ?
                 AND transdate = ?|;
-    
+
   } else {
     $query = qq|INSERT INTO exchangerate (curr, buy, sell, transdate)
                 VALUES (?, $buy, $sell, ?)|;
@@ -1854,7 +1870,7 @@ sub add_shipto {
                        shiptophone = ? AND
                        shiptofax = ? AND
                        shiptoemail = ? AND
-                       module = ? AND 
+                       module = ? AND
                        trans_id = ?|;
       my $insert_check = selectfirst_hashref_query($self, $dbh, $query, @values, $module, $id);
       if(!$insert_check){
@@ -1883,28 +1899,31 @@ sub get_employee {
   $main::lxdebug->leave_sub();
 }
 
-sub get_salesman {
+sub get_employee_data {
   $main::lxdebug->enter_sub();
 
-  my ($self, $myconfig, $salesman_id) = @_;
+  my $self     = shift;
+  my %params   = @_;
 
-  $main::lxdebug->leave_sub() and return unless $salesman_id;
+  Common::check_params(\%params, qw(prefix));
+  Common::check_params_x(\%params, qw(id));
 
-  my $dbh = $self->get_standard_dbh($myconfig);
+  if (!$params{id}) {
+    $main::lxdebug->leave_sub();
+    return;
+  }
 
-  my ($login) =
-    selectrow_query($self, $dbh, qq|SELECT login FROM employee WHERE id = ?|,
-                    $salesman_id);
+  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}));
 
   if ($login) {
-    my $user = new User($main::memberfile, $login);
-    map({ $self->{"salesman_$_"} = $user->{$_}; }
-        qw(address businessnumber co_ustid company duns email fax name
-           taxnumber tel));
-    $self->{salesman_login} = $login;
+    my $user = User->new($login);
+    map { $self->{$params{prefix} . "_${_}"} = $user->{$_}; } qw(address businessnumber co_ustid company duns email fax name signature taxnumber tel);
 
-    $self->{salesman_name} = $login
-      if ($self->{salesman_name} eq "");
+    $self->{$params{prefix} . '_login'}   = $login;
+    $self->{$params{prefix} . '_name'}  ||= $login;
   }
 
   $main::lxdebug->leave_sub();
@@ -2034,6 +2053,7 @@ sub _get_charts {
   $main::lxdebug->enter_sub();
 
   my ($self, $dbh, $params) = @_;
+  my ($key);
 
   $key = $params->{key};
   $key = "all_charts" unless ($key);
@@ -2057,11 +2077,27 @@ sub _get_charts {
 sub _get_taxcharts {
   $main::lxdebug->enter_sub();
 
-  my ($self, $dbh, $key) = @_;
+  my ($self, $dbh, $params) = @_;
+
+  my $key = "all_taxcharts";
+  my @where;
+
+  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)';
+
+    } elsif ($params->{module} eq 'AP') {
+      push @where, 'taxkey NOT IN (1, 2, 3, 12, 13)';
+    }
+
+  } elsif ($params) {
+    $key = $params;
+  }
 
-  $key = "all_taxcharts" unless ($key);
+  my $where = ' WHERE ' . join(' AND ', map { "($_)" } @where) if (@where);
 
-  my $query = qq|SELECT * FROM tax ORDER BY taxkey|;
+  my $query = qq|SELECT * FROM tax $where ORDER BY taxkey|;
 
   $self->{$key} = selectall_hashref_query($self, $dbh, $query);
 
@@ -2141,7 +2177,7 @@ $main::lxdebug->enter_sub();
   $key = "all_currencies" unless ($key);
 
   my $query = qq|SELECT curr AS currency FROM defaults|;
+
   $self->{$key} = [split(/\:/ , selectfirst_hashref_query($self, $dbh, $query)->{currency})];
 
   $main::lxdebug->leave_sub();
@@ -2155,7 +2191,7 @@ $main::lxdebug->enter_sub();
   $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();
@@ -2167,7 +2203,7 @@ sub _get_customers {
   my ($self, $dbh, $key, $limit) = @_;
 
   $key = "all_customers" unless ($key);
-  $limit_clause = "LIMIT $limit" if $limit;
+  my $limit_clause = "LIMIT $limit" if $limit;
 
   my $query = qq|SELECT * FROM customer WHERE NOT obsolete ORDER BY name $limit_clause|;
 
@@ -2257,19 +2293,19 @@ sub _get_simple {
   $main::lxdebug->leave_sub();
 }
 
-sub _get_groups {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $dbh, $key) = @_;
-
-  $key ||= "all_groups";
-
-  my $groups = $main::auth->read_groups();
-
-  $self->{$key} = selectall_hashref_query($self, $dbh, $query);
-
-  $main::lxdebug->leave_sub();
-}
+#sub _get_groups {
+#  $main::lxdebug->enter_sub();
+#
+#  my ($self, $dbh, $key) = @_;
+#
+#  $key ||= "all_groups";
+#
+#  my $groups = $main::auth->read_groups();
+#
+#  $self->{$key} = selectall_hashref_query($self, $dbh, $query);
+#
+#  $main::lxdebug->leave_sub();
+#}
 
 sub get_lists {
   $main::lxdebug->enter_sub();
@@ -2320,7 +2356,7 @@ sub get_lists {
   if ($params{"employees"}) {
     $self->_get_employees($dbh, "all_employees", $params{"employees"});
   }
-  
+
   if ($params{"salesmen"}) {
     $self->_get_employees($dbh, "all_salesmen", $params{"salesmen"});
   }
@@ -2332,11 +2368,11 @@ sub get_lists {
   if ($params{"dunning_configs"}) {
     $self->_get_dunning_configs($dbh, $params{"dunning_configs"});
   }
-  
+
   if($params{"currencies"}) {
     $self->_get_currencies($dbh, $params{"currencies"});
   }
-  
+
   if($params{"customers"}) {
     if (ref $params{"customers"} eq 'HASH') {
       $self->_get_customers($dbh, $params{"customers"}{key}, $params{"customers"}{limit});
@@ -2344,7 +2380,7 @@ sub get_lists {
       $self->_get_customers($dbh, $params{"customers"});
     }
   }
-  
+
   if($params{"vendors"}) {
     if (ref $params{"vendors"} eq 'HASH') {
       $self->_get_vendors($dbh, $params{"vendors"}{key}, $params{"vendors"}{limit});
@@ -2352,7 +2388,7 @@ sub get_lists {
       $self->_get_vendors($dbh, $params{"vendors"});
     }
   }
-  
+
   if($params{"payments"}) {
     $self->_get_payments($dbh, $params{"payments"});
   }
@@ -2369,9 +2405,10 @@ sub get_lists {
     $self->_get_warehouses($dbh, $params{warehouses});
   }
 
-  if ($params{groups}) {
-    $self->_get_groups($dbh, $params{groups});
-  }
+#  if ($params{groups}) {
+#    $self->_get_groups($dbh, $params{groups});
+#  }
+
   if ($params{partsgroup}) {
     $self->get_partsgroup(\%main::myconfig, { all => 1, target => $params{partsgroup} });
   }
@@ -2610,7 +2647,7 @@ sub create_links {
     do_statement($self, $sth, $query, '%' . $module . '%');
 
     $self->{accounts} = "";
-    while ($ref = $sth->fetchrow_hashref(NAME_lc)) {
+    while ($ref = $sth->fetchrow_hashref("NAME_lc")) {
 
       foreach my $key (split(/:/, $ref->{link})) {
         if ($key =~ /\Q$module\E/) {
@@ -2657,7 +2694,7 @@ sub create_links {
          WHERE a.id = ?|;
     $ref = selectfirst_hashref_query($self, $dbh, $query, $self->{id});
 
-    foreach $key (keys %$ref) {
+    foreach my $key (keys %$ref) {
       $self->{$key} = $ref->{$key};
     }
 
@@ -2679,7 +2716,7 @@ sub create_links {
     do_statement($self, $sth, $query, "%$module%");
 
     $self->{accounts} = "";
-    while ($ref = $sth->fetchrow_hashref(NAME_lc)) {
+    while ($ref = $sth->fetchrow_hashref("NAME_lc")) {
 
       foreach my $key (split(/:/, $ref->{link})) {
         if ($key =~ /\Q$module\E/) {
@@ -2729,7 +2766,7 @@ sub create_links {
     my $index = 0;
 
     # store amounts in {acc_trans}{$key} for multiple accounts
-    while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+    while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
       $ref->{exchangerate} =
         $self->get_exchangerate($dbh, $self->{currency}, $ref->{transdate}, $fld);
       if (!($xkeyref{ $ref->{accno} } =~ /tax/)) {
@@ -2895,7 +2932,7 @@ sub redo_rows {
   # fill rows
   foreach my $item (sort { $a->{num} <=> $b->{num} } @ndx) {
     $i++;
-    $j = $item->{ndx} - 1;
+    my $j = $item->{ndx} - 1;
     map { $self->{"${_}_$i"} = $new->[$j]->{$_} } @{$flds};
   }
 
@@ -3078,7 +3115,7 @@ sub get_history {
       qq|WHERE trans_id = | . $trans_id
       . $restriction . qq| |
       . $order;
-      
+
     my $sth = $dbh->prepare($query) || $self->dberror($query);
 
     $sth->execute() || $self->dberror("$query");
@@ -3089,7 +3126,7 @@ sub get_history {
       $hash_ref->{snumbers} =~ s/^.+_(.*)$/$1/g;
       $tempArray[$i++] = $hash_ref;
     }
-    $main::lxdebug->leave_sub() and return \@tempArray 
+    $main::lxdebug->leave_sub() and return \@tempArray
       if ($i > 0 && $tempArray[0] ne "");
   }
   $main::lxdebug->leave_sub();