Unbekannte config values beim Speichern d. Benutzereinstellungen nicht löschen
[kivitendo-erp.git] / SL / AM.pm
index e2ea0be..30b1d93 100644 (file)
--- a/SL/AM.pm
+++ b/SL/AM.pm
@@ -45,6 +45,7 @@ use SL::DBUtils;
 use SL::DB::AuthUser;
 use SL::DB::Default;
 use SL::DB::Employee;
+use SL::GenericTranslations;
 
 use strict;
 
@@ -481,16 +482,18 @@ sub delete_account {
               WHERE chart_id = ?|;
   do_query($form, $dbh, $query, $form->{id});
 
-  # delete chart of account record
-  $query = qq|DELETE FROM chart
-              WHERE id = ?|;
-  do_query($form, $dbh, $query, $form->{id});
-
   # delete account taxkeys
   $query = qq|DELETE FROM taxkeys
               WHERE chart_id = ?|;
   do_query($form, $dbh, $query, $form->{id});
 
+  # delete chart of account record
+  # last step delete chart, because we have a constraint
+  # to taxkeys
+  $query = qq|DELETE FROM chart
+              WHERE id = ?|;
+  do_query($form, $dbh, $query, $form->{id});
+
   # commit and redirect
   my $rc = $dbh->commit;
   $dbh->disconnect;
@@ -1021,7 +1024,7 @@ sub load_template {
     close(TEMPLATE);
   }
 
-  $content = Encode::decode('utf-8-strict', $content) if $::locale->is_utf8;
+  $content = Encode::decode('utf-8-strict', $content);
 
   $main::lxdebug->leave_sub();
 
@@ -1038,7 +1041,7 @@ sub save_template {
   my $error = "";
 
   if (open(TEMPLATE, ">", $filename)) {
-    $content = Encode::encode('utf-8-strict', $content) if $::locale->is_utf8;
+    $content = Encode::encode('utf-8-strict', $content);
     $content =~ s/\r\n/\n/g;
     print(TEMPLATE $content);
     close(TEMPLATE);
@@ -1062,6 +1065,7 @@ sub save_preferences {
   my $user = SL::DB::Manager::AuthUser->find_by(login => $form->{login});
   $user->update_attributes(
     config_values => {
+      %{ $user->config_values },
       map { ($_ => $form->{$_}) } SL::DB::AuthUser::CONFIG_VARS(),
     });
 
@@ -1119,16 +1123,14 @@ sub closebooks {
 
   my ($query, @values);
 
-  if ($form->{revtrans}) {
-    $query = qq|UPDATE defaults SET closedto = NULL, revtrans = '1'|;
+  # is currently NEVER trueish (no more hidden revtrans in $form)
+  # if ($form->{revtrans}) {
+  #   $query = qq|UPDATE defaults SET closedto = NULL, revtrans = '1'|;
+  # -> therefore you can only set this to false (which is already the default)
+  # and this flag is currently only checked in gl.pl. TOOD Can probably be removed
 
-  } elsif ($form->{closedto}) {
     $query = qq|UPDATE defaults SET closedto = ?, max_future_booking_interval = ?, revtrans = '0'|;
-    @values = (conv_date($form->{closedto}), conv_date($form->{max_future_booking_interval}));
-
-  } else {
-    $query = qq|UPDATE defaults SET closedto = NULL, revtrans = '0'|;
-  }
+    @values = (conv_date($form->{closedto}), conv_i($form->{max_future_booking_interval}));
 
   # set close in defaults
   do_query($form, $dbh, $query, @values);
@@ -1642,7 +1644,7 @@ sub save_tax {
   $chart_categories .= 'E' if $form->{expense};
   $chart_categories .= 'C' if $form->{costs};
 
-  my @values = ($form->{taxkey}, $form->{taxdescription}, $form->{rate}, $form->{chart_id}, $form->{chart_id}, $chart_categories);
+  my @values = ($form->{taxkey}, $form->{taxdescription}, $form->{rate}, conv_i($form->{chart_id}), conv_i($form->{chart_id}), $chart_categories);
   if ($form->{id} ne "") {
     $query = qq|UPDATE tax SET
                   taxkey         = ?,
@@ -1652,22 +1654,32 @@ sub save_tax {
                   taxnumber      = (SELECT accno FROM chart WHERE id= ? ),
                   chart_categories = ?
                 WHERE id = ?|;
-    push(@values, $form->{id});
 
   } else {
     #ok
+    ($form->{id}) = selectfirst_array_query($form, $dbh, qq|SELECT nextval('id')|);
     $query = qq|INSERT INTO tax (
                   taxkey,
                   taxdescription,
                   rate,
                   chart_id,
                   taxnumber,
-                  chart_categories
+                  chart_categories,
+                  id
                 )
-                VALUES (?, ?, ?, ?, (SELECT accno FROM chart WHERE id = ?), ? )|;
+                VALUES (?, ?, ?, ?, (SELECT accno FROM chart WHERE id = ?), ?, ?)|;
   }
+  push(@values, $form->{id});
   do_query($form, $dbh, $query, @values);
 
+  foreach my $language_id (keys %{ $form->{translations} }) {
+    GenericTranslations->save('dbh'              => $dbh,
+                              'translation_type' => 'SL::DB::Tax/taxdescription',
+                              'translation_id'   => $form->{id},
+                              'language_id'      => $language_id,
+                              'translation'      => $form->{translations}->{$language_id});
+  }
+
   $dbh->commit();
 
   $main::lxdebug->leave_sub();
@@ -1785,11 +1797,12 @@ sub save_warehouse {
            $form->{description}, $form->{invalid} ? 't' : 'f', conv_i($form->{id}));
 
   if (0 < $form->{number_of_new_bins}) {
+    my ($num_existing_bins) = selectfirst_array_query($form, $dbh, qq|SELECT COUNT(*) FROM bin WHERE warehouse_id = ?|, $form->{id});
     $query = qq|INSERT INTO bin (warehouse_id, description) VALUES (?, ?)|;
     $sth   = prepare_query($form, $dbh, $query);
 
     foreach my $i (1..$form->{number_of_new_bins}) {
-      do_statement($form, $sth, $query, conv_i($form->{id}), "$form->{prefix}${i}");
+      do_statement($form, $sth, $query, conv_i($form->{id}), "$form->{prefix}" . ($i + $num_existing_bins));
     }
 
     $sth->finish();
@@ -1899,15 +1912,14 @@ sub get_warehouse {
 
   map { $form->{$_} = $ref->{$_} } keys %{ $ref };
 
-  $query = qq|SELECT b.*, EXISTS
-                (SELECT i.warehouse_id, p.warehouse_id
-                 FROM inventory i, parts p
-                 WHERE i.bin_id = b.id
-                 OR    p.bin_id = b.id
-                 LIMIT 1)
-                AS in_use
-              FROM bin b
-              WHERE b.warehouse_id = ?|;
+  $query = <<SQL;
+    SELECT b.*,
+      (   EXISTS(SELECT i.bin_id FROM inventory i WHERE i.bin_id = b.id LIMIT 1)
+       OR EXISTS(SELECT p.bin_id FROM parts     p WHERE p.bin_id = b.id LIMIT 1))
+      AS in_use
+    FROM bin b
+    WHERE b.warehouse_id = ?
+SQL
 
   $form->{BINS} = selectall_hashref_query($form, $dbh, $query, conv_i($form->{id}));