Merge branch 'master' into dev
[kivitendo-erp.git] / SL / AM.pm
index 1a085b8..591f580 100644 (file)
--- a/SL/AM.pm
+++ b/SL/AM.pm
@@ -243,6 +243,25 @@ 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);
@@ -250,7 +269,7 @@ sub save_account {
     do_query($form, $dbh, $query, $form->{"id"}, $form->{"accno"});
   }
 
-  my @values;
+  @values = ();
 
 
   if ($form->{id}) {
@@ -269,17 +288,6 @@ sub save_account {
       $form->{valid_from} = '';
     };
 
-    $query = '
-      SELECT
-        accno
-      FROM chart
-      WHERE accno = ?';
-    my ($accno) = selectrow_query($form, $dbh, $query, $form->{accno});
-
-    if ($accno) {
-      $form->error($::locale->text('Account number not unique!'));
-    }
-
     $query = qq|UPDATE chart SET
                   accno = ?,
                   description = ?,
@@ -467,11 +475,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
@@ -1771,7 +1777,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 = ? |;