subs für den customer und employee select angepasst; sowie get_lists
[kivitendo-erp.git] / SL / Form.pm
index 1a6fa4b..9ba3f43 100644 (file)
@@ -132,6 +132,11 @@ sub new {
 
   my $self = {};
 
+  if ($LXDebug::watch_form) {
+    require SL::Watchdog;
+    tie %{ $self }, 'SL::Watchdog';
+  }
+
   read(STDIN, $_, $ENV{CONTENT_LENGTH});
 
   if ($ENV{QUERY_STRING}) {
@@ -375,13 +380,8 @@ sub header {
                         \@page { size:landscape; }
                         </style>|;
     }
-    if ($self->{fokus}) {
-      $fokus = qq|<script type="text/javascript">
-<!--
-function fokus(){document.$self->{fokus}.focus();}
-//-->
-</script>|;
-    }
+
+    my $fokus = qq|  document.$self->{fokus}.focus();| if ($self->{"fokus"});
 
     #Set Calendar
     my $jsscript = "";
@@ -415,7 +415,15 @@ function fokus(){document.$self->{fokus}.focus();}
   $charset
   $jsscript
   $ajax
-  $fokus
+
+  <script type="text/javascript">
+  <!--
+    function fokus() {
+      $fokus
+    }
+  //-->
+  </script>
+
   <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" />
@@ -458,7 +466,7 @@ sub parse_html_template {
         (-f "templates/webpages/${file}_master.html") &&
         ((stat("templates/webpages/${file}_master.html"))[9] >
          (stat("templates/webpages/${file}_${language}.html"))[9])) {
-      my $info = "Developper information: templates/webpages/${file}_master.html is newer than the localized version.\n" .
+      my $info = "Developer information: templates/webpages/${file}_master.html is newer than the localized version.\n" .
         "Please re-run 'locales.pl' in 'locale/${language}'.";
       print(qq|<pre>$info</pre>|);
       die($info);
@@ -1469,7 +1477,7 @@ sub _get_printers {
 
   $key = "all_printers" unless ($key);
 
-  my $query = qq|SELECT id, printer_description, printer_command FROM printers|;
+  my $query = qq|SELECT id, printer_description, printer_command, template_code FROM printers|;
 
   $self->{$key} = selectall_hashref_query($self, $dbh, $query);
 
@@ -1514,6 +1522,20 @@ sub _get_taxcharts {
   $main::lxdebug->leave_sub();
 }
 
+sub _get_taxzones {
+  $main::lxdebug->enter_sub();
+
+  my ($self, $dbh, $key) = @_;
+
+  $key = "all_taxzones" unless ($key);
+
+  my $query = qq|SELECT * FROM tax_zones ORDER BY id|;
+
+  $self->{$key} = selectall_hashref_query($self, $dbh, $query);
+
+  $main::lxdebug->leave_sub();
+}
+
 sub _get_employees {
   $main::lxdebug->enter_sub();
 
@@ -1538,6 +1560,62 @@ sub _get_business_types {
   $main::lxdebug->leave_sub();
 }
 
+sub _get_languages {
+  $main::lxdebug->enter_sub();
+
+  my ($self, $dbh, $key) = @_;
+
+  $key = "all_languages" unless ($key);
+
+  my $query = qq|SELECT * FROM language ORDER BY id|;
+
+  $self->{$key} = selectall_hashref_query($self, $dbh, $query);
+
+  $main::lxdebug->leave_sub();
+}
+
+sub _get_dunning_configs {
+  $main::lxdebug->enter_sub();
+
+  my ($self, $dbh, $key) = @_;
+
+  $key = "all_dunning_configs" unless ($key);
+
+  my $query = qq|SELECT * FROM dunning_config ORDER BY dunning_level|;
+
+  $self->{$key} = selectall_hashref_query($self, $dbh, $query);
+
+  $main::lxdebug->leave_sub();
+}
+
+sub _get_currencies {
+$main::lxdebug->enter_sub();
+
+  my ($self, $dbh, $key) = @_;
+
+  $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();
+}
+
+sub _get_customers {
+  $main::lxdebug->enter_sub();
+
+  my ($self, $dbh, $key) = @_;
+
+  $key = "all_customers" unless ($key);
+
+  my $query = qq|SELECT * FROM customer LIMIT $main::myconfig{vclimit}|;
+
+  $self->{$key} = selectall_hashref_query($self, $dbh, $query);
+
+  $main::lxdebug->leave_sub();
+}
+
 sub get_lists {
   $main::lxdebug->enter_sub();
 
@@ -1568,6 +1646,10 @@ sub get_lists {
     $self->_get_printers($dbh, $params{"printers"});
   }
 
+  if ($params{"languages"}) {
+    $self->_get_languages($dbh, $params{"languages"});
+  }
+
   if ($params{"charts"}) {
     $self->_get_charts($dbh, $params{"charts"});
   }
@@ -1576,6 +1658,10 @@ sub get_lists {
     $self->_get_taxcharts($dbh, $params{"taxcharts"});
   }
 
+  if ($params{"taxzones"}) {
+    $self->_get_taxzones($dbh, $params{"taxzones"});
+  }
+
   if ($params{"employees"}) {
     $self->_get_employees($dbh, $params{"employees"});
   }
@@ -1584,6 +1670,18 @@ sub get_lists {
     $self->_get_business_types($dbh, $params{"business_types"});
   }
 
+  if ($params{"dunning_configs"}) {
+    $self->_get_dunning_configs($dbh, $params{"dunning_configs"});
+  }
+  
+  if($params{"currencies"}) {
+    $self->_get_currencies($dbh, $params{"currencies"});
+  }
+  
+  if($params{"customers"}) {
+    $self->_get_customers($dbh, $params{"customers"});
+  }
+
   $dbh->disconnect();
 
   $main::lxdebug->leave_sub();
@@ -1849,10 +1947,6 @@ sub create_links {
   $query = qq|SELECT id, taxkey, taxdescription FROM tax|;
   $self->{TAXKEY} = selectall_hashref_query($self, $dbh, $query);
 
-  # get tax zones
-  $query = qq|SELECT id, description FROM tax_zones|;
-  $self->{TAXZONE} = selectall_hashref_query($self, $dbh, $query);
-
   if (($module eq "AP") || ($module eq "AR")) {
     # get tax rates and description
     $query = qq|SELECT * FROM tax|;
@@ -1886,17 +1980,16 @@ sub create_links {
     }
 
     # now get the account numbers
-    $query = qq|
-      SELECT
-        c.accno, c.description, c.link, c.taxkey_id,
-        tk.tax_id
-      FROM chart c
-      LEFT JOIN taxkeys tk ON (tk.chart_id = c.id)
-      WHERE (c.link LIKE ?) AND (tk.chart_id = c.id) AND NOT (c.link LIKE '%_tax%')
-      ORDER BY c.accno|;
+    $query = qq|SELECT c.accno, c.description, c.link, c.taxkey_id, tk.tax_id
+                FROM chart c
+                LEFT JOIN taxkeys tk ON (tk.chart_id = c.id)
+                WHERE c.link LIKE ?
+                  AND (tk.id = (SELECT id FROM taxkeys WHERE taxkeys.chart_id = c.id AND startdate <= $transdate ORDER BY startdate DESC LIMIT 1)
+                    OR c.link LIKE '%_tax%')
+                ORDER BY c.accno|;
 
     $sth = $dbh->prepare($query);
-    do_statement($self, $sth, $query, "%" . $module . "%");
+    do_statement($self, $sth, $query, "%$module%");
 
     $self->{accounts} = "";
     while ($ref = $sth->fetchrow_hashref(NAME_lc)) {
@@ -2240,6 +2333,7 @@ sub save_status {
 # $main::locale->text('PRINTED')
 # $main::locale->text('MAILED')
 # $main::locale->text('SCREENED')
+# $main::locale->text('CANCELED')
 # $main::locale->text('invoice')
 # $main::locale->text('proforma')
 # $main::locale->text('sales_order')
@@ -2261,10 +2355,10 @@ sub save_history {
   }
 
   my $query =
-    qq|INSERT INTO history_erp (trans_id, employee_id, addition, what_done) | .
-    qq|VALUES (?, ?, ?, ?)|;
+    qq|INSERT INTO history_erp (trans_id, employee_id, addition, what_done, snumbers) | .
+    qq|VALUES (?, ?, ?, ?, ?)|;
   my @values = (conv_i($self->{id}), conv_i($self->{employee_id}),
-                $self->{addition}, $self->{what_done});
+                $self->{addition}, $self->{what_done}, "$self->{snumbers}");
   do_query($self, $dbh, $query, @values);
 
   $main::lxdebug->leave_sub();
@@ -2281,7 +2375,7 @@ sub get_history {
   my $i = 0;
   if ($trans_id ne "") {
     my $query =
-      qq|SELECT h.employee_id, h.itime::timestamp(0) AS itime, h.addition, h.what_done, emp.name | .
+      qq|SELECT h.employee_id, h.itime::timestamp(0) AS itime, h.addition, h.what_done, emp.name, h.snumbers, h.trans_id AS id | .
       qq|FROM history_erp h | .
       qq|LEFT JOIN employee emp ON (emp.id = h.employee_id) | .
       qq|WHERE trans_id = ? |
@@ -2294,9 +2388,10 @@ sub get_history {
     while(my $hash_ref = $sth->fetchrow_hashref()) {
       $hash_ref->{addition} = $main::locale->text($hash_ref->{addition});
       $hash_ref->{what_done} = $main::locale->text($hash_ref->{what_done});
+      $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();
@@ -2321,11 +2416,8 @@ sub update_defaults {
   my ($var) = $sth->fetchrow_array;
   $sth->finish;
 
-  if ($var =~ /^(.*?)(\d+)$/) {
-    $var = "$1" . ($2 + 1);
-  } else {
-    $var++;
-  }
+  $var =~ s/\d+$/ sprintf '%0*d', length($&), $&+1 /e;
+  $var ||= 1;
 
   $query = qq|UPDATE defaults SET $fld = ?|;
   do_query($self, $dbh, $query, $var);
@@ -2356,13 +2448,8 @@ sub update_business {
        WHERE id = ? FOR UPDATE|;
   my ($var) = selectrow_query($self, $dbh, $query, $business_id);
 
-  if ($var ne "") {
-    if ($var =~ /^(.*?)(\d+)$/) {
-      $var = "$1" . ($2 + 1);
-    } else {
-      $var++;
-    }
-  }
+  $var =~ s/\d+$/ sprintf '%0*d', length($&), $&+1 /e;
+  
   $query = qq|UPDATE business
               SET customernumberinit = ?
               WHERE id = ?|;