User Attribut "role" entfernt.
[kivitendo-erp.git] / SL / AM.pm
index bf5c97d..70f56f9 100644 (file)
--- a/SL/AM.pm
+++ b/SL/AM.pm
@@ -199,6 +199,9 @@ sub get_account {
 sub save_account {
   $main::lxdebug->enter_sub();
 
+  # TODO: it should be forbidden to change an account to a heading if there
+  # have been bookings to this account in the past
+
   my ($self, $myconfig, $form) = @_;
 
   # connect to database, turn off AutoCommit
@@ -242,7 +245,23 @@ sub save_account {
 
   my @values;
 
+
   if ($form->{id}) {
+
+    # if charttype is heading make sure certain values are empty
+    # specifically, if charttype is changed from an existing account, empty the
+    # fields unnecessary for headings, so that e.g. heading doesn't appear in
+    # drop-down menues due to still having a valid "link" entry
+
+    if ( $form->{charttype} eq 'H' ) {
+      $form->{link} = '';
+      $form->{pos_bwa} = '';
+      $form->{pos_bilanz} = '';
+      $form->{pos_eur} = '';
+      $form->{new_chart_id} = '';
+      $form->{valid_from} = '';
+    };
+
     $query = qq|UPDATE chart SET
                   accno = ?,
                   description = ?,
@@ -272,6 +291,7 @@ sub save_account {
                 $form->{id},
     );
 
+
   }
 
   do_query($form, $dbh, $query, @values);
@@ -378,6 +398,21 @@ sub save_account {
 
   }
 
+  # Update chart.taxkey_id to the latest from taxkeys for this chart.
+  $query = <<SQL;
+    UPDATE chart
+    SET taxkey_id = (
+      SELECT taxkey_id
+      FROM taxkeys
+      WHERE taxkeys.chart_id = chart.id
+      ORDER BY startdate DESC
+      LIMIT 1
+    )
+    WHERE id = ?
+SQL
+
+  do_query($form, $dbh, $query, $form->{id});
+
   # commit
   my $rc = $dbh->commit;
   $dbh->disconnect;
@@ -439,110 +474,6 @@ sub delete_account {
   return $rc;
 }
 
-sub departments {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $form) = @_;
-
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
-
-  my $query = qq|SELECT d.id, d.description, d.role
-                 FROM department d
-                 ORDER BY 2|;
-
-  my $sth = $dbh->prepare($query);
-  $sth->execute || $form->dberror($query);
-
-  $form->{ALL} = [];
-  while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
-    push @{ $form->{ALL} }, $ref;
-  }
-
-  $sth->finish;
-  $dbh->disconnect;
-
-  $main::lxdebug->leave_sub();
-}
-
-sub get_department {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $form) = @_;
-
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
-
-  my $query = qq|SELECT d.description, d.role
-                 FROM department d
-                 WHERE d.id = ?|;
-  my $sth = $dbh->prepare($query);
-  $sth->execute($form->{id}) || $form->dberror($query . " ($form->{id})");
-
-  my $ref = $sth->fetchrow_hashref("NAME_lc");
-
-  map { $form->{$_} = $ref->{$_} } keys %$ref;
-
-  $sth->finish;
-
-  # see if it is in use
-  $query = qq|SELECT count(*) FROM dpt_trans d
-              WHERE d.department_id = ?|;
-  ($form->{orphaned}) = selectrow_query($form, $dbh, $query, $form->{id});
-
-  $form->{orphaned} = !$form->{orphaned};
-  $sth->finish;
-
-  $dbh->disconnect;
-
-  $main::lxdebug->leave_sub();
-}
-
-sub save_department {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $form) = @_;
-  my ($query);
-
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
-
-  my @values = ($form->{description}, $form->{role});
-  if ($form->{id}) {
-    $query = qq|UPDATE department SET
-                description = ?, role = ?
-                WHERE id = ?|;
-    push(@values, $form->{id});
-  } else {
-    $query = qq|INSERT INTO department
-                (description, role)
-                VALUES (?, ?)|;
-  }
-  do_query($form, $dbh, $query, @values);
-
-  $dbh->disconnect;
-
-  $main::lxdebug->leave_sub();
-}
-
-sub delete_department {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $form) = @_;
-  my ($query);
-
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
-
-  $query = qq|DELETE FROM department
-              WHERE id = ?|;
-  do_query($form, $dbh, $query, $form->{id});
-
-  $dbh->disconnect;
-
-  $main::lxdebug->leave_sub();
-}
-
 sub lead {
   $main::lxdebug->enter_sub();
 
@@ -640,106 +571,6 @@ sub delete_lead {
   $main::lxdebug->leave_sub();
 }
 
-sub business {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $form) = @_;
-
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
-
-  my $query = qq|SELECT id, description, discount, customernumberinit, salesman
-                 FROM business
-                 ORDER BY 2|;
-
-  my $sth = $dbh->prepare($query);
-  $sth->execute || $form->dberror($query);
-
-  while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
-    push @{ $form->{ALL} }, $ref;
-  }
-
-  $sth->finish;
-  $dbh->disconnect;
-
-  $main::lxdebug->leave_sub();
-}
-
-sub get_business {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $form) = @_;
-
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
-
-  my $query =
-    qq|SELECT b.description, b.discount, b.customernumberinit, b.salesman
-       FROM business b
-       WHERE b.id = ?|;
-  my $sth = $dbh->prepare($query);
-  $sth->execute($form->{id}) || $form->dberror($query . " ($form->{id})");
-
-  my $ref = $sth->fetchrow_hashref("NAME_lc");
-
-  map { $form->{$_} = $ref->{$_} } keys %$ref;
-
-  $sth->finish;
-
-  $dbh->disconnect;
-
-  $main::lxdebug->leave_sub();
-}
-
-sub save_business {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $form) = @_;
-  my ($query);
-
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
-
-  my @values = ($form->{description}, $form->{discount}, $form->{customernumberinit}, $form->{salesman} ? 't' : 'f');
-  # id is the old record
-  if ($form->{id}) {
-    $query = qq|UPDATE business SET
-                description = ?,
-                discount = ?,
-                customernumberinit = ?,
-                salesman = ?
-                WHERE id = ?|;
-    push(@values, $form->{id});
-  } else {
-    $query = qq|INSERT INTO business
-                (description, discount, customernumberinit, salesman)
-                VALUES (?, ?, ?, ?)|;
-  }
-  do_query($form, $dbh, $query, @values);
-
-  $dbh->disconnect;
-
-  $main::lxdebug->leave_sub();
-}
-
-sub delete_business {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $form) = @_;
-
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
-
-  my $query = qq|DELETE FROM business
-              WHERE id = ?|;
-  do_query($form, $dbh, $query, $form->{id});
-
-  $dbh->disconnect;
-
-  $main::lxdebug->leave_sub();
-}
-
-
 sub language {
   $main::lxdebug->enter_sub();
 
@@ -865,7 +696,7 @@ sub delete_language {
   # connect to database
   my $dbh = $form->dbconnect_noauto($myconfig);
 
-  foreach my $table (qw(translation_payment_terms units_language)) {
+  foreach my $table (qw(generic_translations units_language)) {
     $query = qq|DELETE FROM $table WHERE language_id = ?|;
     do_query($form, $dbh, $query, $form->{"id"});
   }
@@ -1109,160 +940,6 @@ sub swap_sortkeys {
   $main::lxdebug->leave_sub();
 }
 
-sub payment {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $form) = @_;
-
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
-
-  my $query = qq|SELECT * FROM payment_terms ORDER BY sortkey|;
-
-  my $sth = $dbh->prepare($query);
-  $sth->execute || $form->dberror($query);
-
-  $form->{ALL} = [];
-  while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
-    push @{ $form->{ALL} }, $ref;
-  }
-
-  $sth->finish;
-  $dbh->disconnect;
-
-  $main::lxdebug->leave_sub();
-}
-
-sub get_payment {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $form) = @_;
-
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
-
-  my $query = qq|SELECT * FROM payment_terms WHERE id = ?|;
-  my $sth = $dbh->prepare($query);
-  $sth->execute($form->{"id"}) || $form->dberror($query . " ($form->{id})");
-
-  my $ref = $sth->fetchrow_hashref("NAME_lc");
-  map { $form->{$_} = $ref->{$_} } keys %$ref;
-  $sth->finish();
-
-  $query =
-    qq|SELECT t.language_id, t.description_long, l.description AS language | .
-    qq|FROM translation_payment_terms t | .
-    qq|LEFT JOIN language l ON t.language_id = l.id | .
-    qq|WHERE t.payment_terms_id = ? | .
-    qq|UNION | .
-    qq|SELECT l.id AS language_id, NULL AS description_long, | .
-    qq|  l.description AS language | .
-    qq|FROM language l|;
-  $sth = $dbh->prepare($query);
-  $sth->execute($form->{"id"}) || $form->dberror($query . " ($form->{id})");
-
-  my %mapping;
-  while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
-    $mapping{ $ref->{"language_id"} } = $ref
-      unless (defined($mapping{ $ref->{"language_id"} }));
-  }
-  $sth->finish;
-
-  $form->{"TRANSLATION"} = [sort({ $a->{"language"} cmp $b->{"language"} }
-                                 values(%mapping))];
-
-  $dbh->disconnect;
-
-  $main::lxdebug->leave_sub();
-}
-
-sub save_payment {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $form) = @_;
-
-  # connect to database
-  my $dbh = $form->dbconnect_noauto($myconfig);
-
-  my $query;
-
-  if (!$form->{id}) {
-    $query = qq|SELECT nextval('id'), COALESCE(MAX(sortkey) + 1, 1) | .
-      qq|FROM payment_terms|;
-    my $sortkey;
-    ($form->{id}, $sortkey) = selectrow_query($form, $dbh, $query);
-
-    $query = qq|INSERT INTO payment_terms (id, sortkey) VALUES (?, ?)|;
-    do_query($form, $dbh, $query, $form->{id}, $sortkey);
-
-  } else {
-    $query =
-      qq|DELETE FROM translation_payment_terms | .
-      qq|WHERE payment_terms_id = ?|;
-    do_query($form, $dbh, $query, $form->{"id"});
-  }
-
-  $query = qq|UPDATE payment_terms SET
-              description = ?, description_long = ?,
-              terms_netto = ?, terms_skonto = ?,
-              percent_skonto = ?
-              WHERE id = ?|;
-  my @values = ($form->{description}, $form->{description_long},
-                $form->{terms_netto} * 1, $form->{terms_skonto} * 1,
-                $form->{percent_skonto} * 1,
-                $form->{id});
-  do_query($form, $dbh, $query, @values);
-
-  $query = qq|SELECT id FROM language|;
-  my @language_ids;
-  my $sth = $dbh->prepare($query);
-  $sth->execute() || $form->dberror($query);
-
-  while (my ($id) = $sth->fetchrow_array()) {
-    push(@language_ids, $id);
-  }
-  $sth->finish();
-
-  $query =
-    qq|INSERT INTO translation_payment_terms | .
-    qq|(language_id, payment_terms_id, description_long) | .
-    qq|VALUES (?, ?, ?)|;
-  $sth = $dbh->prepare($query);
-
-  foreach my $language_id (@language_ids) {
-    do_statement($form, $sth, $query, $language_id, $form->{"id"},
-                 $form->{"description_long_${language_id}"});
-  }
-  $sth->finish();
-
-  $dbh->commit();
-  $dbh->disconnect;
-
-  $main::lxdebug->leave_sub();
-}
-
-sub delete_payment {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $form) = @_;
-
-  # connect to database
-  my $dbh = $form->dbconnect_noauto($myconfig);
-
-  my $query =
-    qq|DELETE FROM translation_payment_terms WHERE payment_terms_id = ?|;
-  do_query($form, $dbh, $query, $form->{"id"});
-
-  $query = qq|DELETE FROM payment_terms WHERE id = ?|;
-  do_query($form, $dbh, $query, $form->{"id"});
-
-  $dbh->commit();
-  $dbh->disconnect;
-
-  $main::lxdebug->leave_sub();
-}
-
-
 sub prepare_template_filename {
   $main::lxdebug->enter_sub();
 
@@ -1332,7 +1009,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);
@@ -1388,7 +1065,8 @@ sub save_defaults {
         pdonumber          = ?,
         curr               = ?,
         businessnumber     = ?,
-        weightunit         = ?|;
+        weightunit         = ?,
+        language_id        = ?|;
   my @values = ($accnos{inventory_accno}, $accnos{income_accno}, $accnos{expense_accno},
                 $accnos{fxgain_accno},    $accnos{fxloss_accno}, $accnos{ar_paid_accno},
                 $form->{invnumber},       $form->{cnnumber},
@@ -1398,7 +1076,8 @@ sub save_defaults {
                 $form->{articlenumber},   $form->{servicenumber},
                 $form->{sdonumber},       $form->{pdonumber},
                 $currency,
-                $form->{businessnumber},  $form->{weightunit});
+                $form->{businessnumber},  $form->{weightunit},
+                conv_i($form->{language_id}));
   do_query($form, $dbh, $query, @values);
 
   $dbh->commit();
@@ -1654,6 +1333,7 @@ sub retrieve_units {
   $main::lxdebug->enter_sub();
 
   my ($self, $myconfig, $form, $prefix) = @_;
+  $prefix ||= '';
 
   my $dbh = $form->get_standard_dbh;
 
@@ -1707,13 +1387,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};
 }
 
 
@@ -1992,43 +1672,6 @@ sub save_units {
   $main::lxdebug->leave_sub();
 }
 
-sub swap_units {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $form, $dir, $name_1) = @_;
-
-  my $dbh = $form->dbconnect_noauto($myconfig);
-
-  my $query;
-
-  $query = qq|SELECT sortkey FROM units WHERE name = ?|;
-  my ($sortkey_1) = selectrow_query($form, $dbh, $query, $name_1);
-
-  $query =
-    qq|SELECT sortkey FROM units | .
-    qq|WHERE sortkey | . ($dir eq "down" ? ">" : "<") . qq| ? | .
-    qq|ORDER BY sortkey | . ($dir eq "down" ? "ASC" : "DESC") . qq| LIMIT 1|;
-  my ($sortkey_2) = selectrow_query($form, $dbh, $query, $sortkey_1);
-
-  if (defined($sortkey_1)) {
-    $query = qq|SELECT name FROM units WHERE sortkey = ${sortkey_2}|;
-    my ($name_2) = selectrow_query($form, $dbh, $query);
-
-    if (defined($name_2)) {
-      $query = qq|UPDATE units SET sortkey = ? WHERE name = ?|;
-      my $sth = $dbh->prepare($query);
-
-      do_statement($form, $sth, $query, $sortkey_1, $name_2);
-      do_statement($form, $sth, $query, $sortkey_2, $name_1);
-    }
-  }
-
-  $dbh->commit();
-  $dbh->disconnect();
-
-  $main::lxdebug->leave_sub();
-}
-
 sub taxes {
   $main::lxdebug->enter_sub();