Mandantennamen in allen MenĂ¼-Headern anzeigen
[kivitendo-erp.git] / SL / AM.pm
index 5645c4d..1805dac 100644 (file)
--- a/SL/AM.pm
+++ b/SL/AM.pm
@@ -40,7 +40,10 @@ package AM;
 use Carp;
 use Data::Dumper;
 use Encode;
+use List::MoreUtils qw(any);
 use SL::DBUtils;
+use SL::DB::AuthUser;
+use SL::DB::Employee;
 
 use strict;
 
@@ -207,17 +210,15 @@ sub save_account {
   # connect to database, turn off AutoCommit
   my $dbh = $form->dbconnect_noauto($myconfig);
 
-  # 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);
+  for (qw(AR_include_in_dropdown AP_include_in_dropdown summary_account)) {
+    $form->{$form->{$_}} = $form->{$_} if $form->{$_};
   }
 
-  if ($form->{AR_include_in_dropdown}) {
-    $form->{$form->{AR_include_in_dropdown}} = $form->{AR_include_in_dropdown};
-  }
-  if ($form->{AP_include_in_dropdown}) {
-    $form->{$form->{AP_include_in_dropdown}} = $form->{AP_include_in_dropdown};
+  # sanity check, can't have AR with AR_...
+  if ($form->{AR} || $form->{AP} || $form->{IC}) {
+    if (any { $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)) {
+      $form->error($::locale->text('It is not allowed that a summary account occurs in a drop-down menu!'));
+    }
   }
 
   $form->{link} = "";
@@ -265,8 +266,8 @@ sub save_account {
   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"}, '');
   }
 
   @values = ();
@@ -475,11 +476,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
@@ -1065,10 +1064,6 @@ sub save_defaults {
   my %accnos;
   map { ($accnos{$_}) = split(m/--/, $form->{$_}) } qw(inventory_accno income_accno expense_accno fxgain_accno fxloss_accno ar_paid_accno);
 
-  $form->{curr}  =~ s/ //g;
-  my @currencies =  grep { $_ ne '' } split m/:/, $form->{curr};
-  my $currency   =  join ':', @currencies;
-
   # these defaults are database wide
 
   my $query =
@@ -1089,9 +1084,9 @@ sub save_defaults {
         vendornumber       = ?,
         articlenumber      = ?,
         servicenumber      = ?,
+        assemblynumber     = ?,
         sdonumber          = ?,
         pdonumber          = ?,
-        curr               = ?,
         businessnumber     = ?,
         weightunit         = ?,
         language_id        = ?|;
@@ -1102,52 +1097,49 @@ 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},
                 conv_i($form->{language_id}));
   do_query($form, $dbh, $query, @values);
 
+  $main::lxdebug->message(0, "es gibt rowcount: " . $form->{rowcount});
+
+  for my $i (1..$form->{rowcount}) {
+    if ($form->{"curr_$i"} ne $form->{"old_curr_$i"}) {
+      $query = qq|UPDATE currencies SET name = ? WHERE name = ?|;
+      do_query($form, $dbh, $query, $form->{"curr_$i"}, $form->{"old_curr_$i"});
+    }
+  }
+
+  if (length($form->{new_curr}) > 0) {
+    $query = qq|INSERT INTO currencies (name) VALUES (?)|;
+    do_query($form, $dbh, $query, $form->{new_curr});
+  }
+
   $dbh->commit();
 
   $main::lxdebug->leave_sub();
 }
 
-
 sub save_preferences {
   $main::lxdebug->enter_sub();
 
-  my ($self, $myconfig, $form) = @_;
-
-  my $dbh = $form->get_standard_dbh($myconfig);
-
-  my ($currency, $businessnumber) = selectrow_query($form, $dbh, qq|SELECT curr, businessnumber FROM defaults|);
-
-  # update name
-  my $query = qq|UPDATE employee SET name = ? WHERE login = ?|;
-  do_query($form, $dbh, $query, $form->{name}, $form->{login});
-
-  my $rc = $dbh->commit();
-
-  # save first currency in myconfig
-  $currency               =~ s/:.*//;
-  $form->{currency}       =  $currency;
-
-  $form->{businessnumber} =  $businessnumber;
+  my ($self, $form) = @_;
 
-  $myconfig = User->new(login => $form->{login});
+  my $employee = SL::DB::Manager::Employee->find_by(login => $form->{login});
+  $employee->update_attributes(name => $form->{name});
 
-  foreach my $item (keys %$form) {
-    $myconfig->{$item} = $form->{$item};
-  }
-
-  $myconfig->save_member;
-
-  my $auth = $main::auth;
+  my $user = SL::DB::Manager::AuthUser->find_by(login => $form->{login});
+  $user->update_attributes(
+    config_values => {
+      map({ ($_ => $form->{$_})                                   } SL::DB::AuthUser::CONFIG_VARS()),
+      map({ ($_ => do { my $v = $form->{$_}; $v =~ s/\r//g; $v }) } qw(address signature)),
+    });
 
   $main::lxdebug->leave_sub();
 
-  return $rc;
+  return 1;
 }
 
 sub get_defaults {
@@ -1289,6 +1281,15 @@ sub defaultaccounts {
   }
 
   $sth->finish;
+
+  #Get currencies:
+  $query              = qq|SELECT name AS curr FROM currencies ORDER BY id|;
+  $form->{CURRENCIES} = selectall_hashref_query($form, $dbh, $query);
+
+  #Which of them is the default currency?
+  $query = qq|SELECT name AS defaultcurrency FROM currencies WHERE id = (SELECT currency_id FROM defaults LIMIT 1);|;
+  ($form->{defaultcurrency}) = selectrow_query($form, $dbh, $query);
+
   $dbh->disconnect;
 
   $main::lxdebug->leave_sub();
@@ -1301,11 +1302,11 @@ sub closedto {
 
   my $dbh = $form->dbconnect($myconfig);
 
-  my $query = qq|SELECT closedto, revtrans FROM defaults|;
+  my $query = qq|SELECT closedto, max_future_booking_interval, revtrans FROM defaults|;
   my $sth   = $dbh->prepare($query);
   $sth->execute || $form->dberror($query);
 
-  ($form->{closedto}, $form->{revtrans}) = $sth->fetchrow_array;
+  ($form->{closedto}, $form->{max_future_booking_interval}, $form->{revtrans}) = $sth->fetchrow_array;
 
   $sth->finish;
 
@@ -1327,8 +1328,8 @@ sub closebooks {
     $query = qq|UPDATE defaults SET closedto = NULL, revtrans = '1'|;
 
   } elsif ($form->{closedto}) {
-    $query = qq|UPDATE defaults SET closedto = ?, revtrans = '0'|;
-    @values = (conv_date($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'|;
@@ -1720,7 +1721,7 @@ sub taxes {
                    (SELECT accno FROM chart WHERE id = chart_id) AS taxnumber,
                    (SELECT description FROM chart WHERE id = chart_id) AS account_description
                  FROM tax t
-                 ORDER BY taxkey|;
+                 ORDER BY taxkey, rate|;
 
   my $sth = $dbh->prepare($query);
   $sth->execute || $form->dberror($query);
@@ -1779,8 +1780,9 @@ sub get_tax {
                    taxkey,
                    taxdescription,
                    round(rate * 100, 2) AS rate,
-                   chart_id, 
-                   (id IN (SELECT tax_id 
+                   chart_id,
+                   chart_categories,
+                   (id IN (SELECT tax_id
                            FROM acc_trans)) AS tax_already_used
                  FROM tax
                  WHERE id = ? |;
@@ -1837,14 +1839,23 @@ sub save_tax {
 
   $form->{rate} = $form->{rate} / 100;
 
-  my @values = ($form->{taxkey}, $form->{taxdescription}, $form->{rate}, $form->{chart_id}, $form->{chart_id} );
+  my $chart_categories = '';
+  $chart_categories .= 'A' if $form->{asset};
+  $chart_categories .= 'L' if $form->{liability};
+  $chart_categories .= 'Q' if $form->{equity};
+  $chart_categories .= 'I' if $form->{revenue};
+  $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);
   if ($form->{id} ne "") {
     $query = qq|UPDATE tax SET
                   taxkey         = ?,
                   taxdescription = ?,
                   rate           = ?,
                   chart_id       = ?,
-                  taxnumber      = (SELECT accno FROM chart WHERE id= ? )
+                  taxnumber      = (SELECT accno FROM chart WHERE id= ? ),
+                  chart_categories = ?
                 WHERE id = ?|;
     push(@values, $form->{id});
 
@@ -1855,9 +1866,10 @@ sub save_tax {
                   taxdescription,
                   rate,
                   chart_id,
-                  taxnumber
+                  taxnumber,
+                  chart_categories
                 )
-                VALUES (?, ?, ?, ?, (SELECT accno FROM chart WHERE id = ?) )|;
+                VALUES (?, ?, ?, ?, (SELECT accno FROM chart WHERE id = ?), ? )|;
   }
   do_query($form, $dbh, $query, @values);
 
@@ -2093,9 +2105,10 @@ sub get_warehouse {
   map { $form->{$_} = $ref->{$_} } keys %{ $ref };
 
   $query = qq|SELECT b.*, EXISTS
-                (SELECT i.warehouse_id
-                 FROM inventory i
+                (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