Merge branch 'erzeugnisnummern'
[kivitendo-erp.git] / SL / AM.pm
index 33f8e66..502ebd9 100644 (file)
--- a/SL/AM.pm
+++ b/SL/AM.pm
@@ -210,7 +210,11 @@ sub save_account {
   # sanity check, can't have AR with AR_...
   if ($form->{AR} || $form->{AP} || $form->{IC}) {
     map { delete $form->{$_} }
-      qw(AR_amount AR_tax AR_paid AP_amount AP_tax AP_paid IC_sale IC_cogs IC_taxpart IC_income IC_expense IC_taxservice CT_tax);
+      qw(AR_amount AR_tax AR_paid AP_amount AP_tax AP_paid IC_sale IC_cogs IC_taxpart IC_income IC_expense IC_taxservice);
+  }
+
+  for (qw(AR_include_in_dropdown AP_include_in_dropdown)) {
+    $form->{$form->{$_}} = $form->{$_} if $form->{$_};
   }
 
   $form->{link} = "";
@@ -221,7 +225,7 @@ sub save_account {
                     $form->{IC},            $form->{IC_sale},
                     $form->{IC_cogs},       $form->{IC_taxpart},
                     $form->{IC_income},     $form->{IC_expense},
-                    $form->{IC_taxservice}, $form->{CT_tax}
+                    $form->{IC_taxservice}
     ) {
     $form->{link} .= "${item}:" if ($item);
   }
@@ -236,14 +240,33 @@ sub save_account {
     $form->{id} = "";
   }
 
+  $query = '
+    SELECT accno
+    FROM chart
+    WHERE accno = ?';
+
+  my @values = ($form->{accno});
+
+  if ( $form->{id} ) {
+    $query .= ' AND NOT id = ?';
+    push(@values, $form->{id});
+  }
+
+  my ($accno) = selectrow_query($form, $dbh, $query, @values);
+
+  if ($accno) {
+    $form->error($::locale->text('Account number not unique!'));
+  }
+
+
   if (!$form->{id} || $form->{id} eq "") {
     $query = qq|SELECT nextval('id')|;
     ($form->{"id"}) = selectrow_query($form, $dbh, $query);
-    $query = qq|INSERT INTO chart (id, accno) VALUES (?, ?)|;
-    do_query($form, $dbh, $query, $form->{"id"}, $form->{"accno"});
+    $query = qq|INSERT INTO chart (id, accno, link) VALUES (?, ?, ?)|;
+    do_query($form, $dbh, $query, $form->{"id"}, $form->{"accno"}, '');
   }
 
-  my @values;
+  @values = ();
 
 
   if ($form->{id}) {
@@ -449,11 +472,9 @@ sub delete_account {
     do_query($form, $dbh, $query, $form->{id});
   }
 
-  foreach my $table (qw(partstax customertax vendortax tax)) {
-    $query = qq|DELETE FROM $table
-                WHERE chart_id = ?|;
-    do_query($form, $dbh, $query, $form->{id});
-  }
+  $query = qq|DELETE FROM tax
+              WHERE chart_id = ?|;
+  do_query($form, $dbh, $query, $form->{id});
 
   # delete chart of account record
   $query = qq|DELETE FROM chart
@@ -540,7 +561,7 @@ sub save_lead {
     $query = qq|UPDATE leads SET
                 lead = ?
                 WHERE id = ?|;
-    puhs(@values, $form->{id});
+    push(@values, $form->{id});
   } else {
     $query = qq|INSERT INTO leads
                 (lead)
@@ -965,7 +986,9 @@ sub prepare_template_filename {
     }
 
     $filename .= "." . ($form->{format} eq "html" ? "html" : "tex");
-    $filename =~ s|.*/||;
+    if ($form->{"formname"} =~ m|\.\.| || $form->{"formname"} =~ m|^/|) {
+      $filename =~ s|.*/||;
+    }
     $display_filename = $filename;
     $filename = "$myconfig->{templates}/$filename";
   }
@@ -1009,7 +1032,7 @@ sub save_template {
 
   my $error = "";
 
-  if (open(TEMPLATE, ">$filename")) {
+  if (open(TEMPLATE, ">", $filename)) {
     $content = Encode::encode('utf-8-strict', $content) if $::locale->is_utf8;
     $content =~ s/\r\n/\n/g;
     print(TEMPLATE $content);
@@ -1061,6 +1084,7 @@ sub save_defaults {
         vendornumber       = ?,
         articlenumber      = ?,
         servicenumber      = ?,
+        assemblynumber     = ?,
         sdonumber          = ?,
         pdonumber          = ?,
         curr               = ?,
@@ -1074,6 +1098,7 @@ sub save_defaults {
                 $form->{sqnumber},        $form->{rfqnumber},
                 $form->{customernumber},  $form->{vendornumber},
                 $form->{articlenumber},   $form->{servicenumber},
+                $form->{assemblynumber},
                 $form->{sdonumber},       $form->{pdonumber},
                 $currency,
                 $form->{businessnumber},  $form->{weightunit},
@@ -1107,7 +1132,7 @@ sub save_preferences {
 
   $form->{businessnumber} =  $businessnumber;
 
-  $myconfig = new User($form->{login});
+  $myconfig = User->new(login => $form->{login});
 
   foreach my $item (keys %$form) {
     $myconfig->{$item} = $form->{$item};
@@ -1333,6 +1358,7 @@ sub retrieve_units {
   $main::lxdebug->enter_sub();
 
   my ($self, $myconfig, $form, $prefix) = @_;
+  $prefix ||= '';
 
   my $dbh = $form->get_standard_dbh;
 
@@ -1386,13 +1412,13 @@ sub retrieve_all_units {
 
   my $self = shift;
 
-  if (!$main::all_units) {
-    $main::all_units = $self->retrieve_units(\%main::myconfig, $main::form);
+  if (!$::request->{cache}{all_units}) {
+    $::request->{cache}{all_units} = $self->retrieve_units(\%main::myconfig, $main::form);
   }
 
   $main::lxdebug->leave_sub();
 
-  return $main::all_units;
+  return $::request->{cache}{all_units};
 }
 
 
@@ -1499,6 +1525,10 @@ sub convert_unit {
   $main::lxdebug->enter_sub(2);
   my ($this, $a, $b, $all_units) = @_;
 
+  if (!$all_units) {
+    $all_units = $this->retrieve_all_units;
+  }
+
   $main::lxdebug->leave_sub(2) and return 0 unless $a && $b;
   $main::lxdebug->leave_sub(2) and return 0 unless $all_units->{$a} && $all_units->{$b};
   $main::lxdebug->leave_sub(2) and return 0 unless $all_units->{$a}{base_unit} eq $all_units->{$b}{base_unit};
@@ -1746,7 +1776,9 @@ sub get_tax {
                    taxkey,
                    taxdescription,
                    round(rate * 100, 2) AS rate,
-                   chart_id
+                   chart_id,
+                   (id IN (SELECT tax_id
+                           FROM acc_trans)) AS tax_already_used
                  FROM tax
                  WHERE id = ? |;