Kein Automatikkonto auswählen wieder möglich
[kivitendo-erp.git] / SL / CT.pm
index f820acf..8ceab3a 100644 (file)
--- a/SL/CT.pm
+++ b/SL/CT.pm
@@ -42,6 +42,7 @@ use Data::Dumper;
 use SL::Common;
 use SL::CVar;
 use SL::DBUtils;
+use SL::DB::Default;
 use SL::FU;
 use SL::Notes;
 use SL::TransNumber;
@@ -68,11 +69,12 @@ sub get_tuple {
   my $ref = $sth->fetchrow_hashref("NAME_lc");
 
   map { $form->{$_} = $ref->{$_} } keys %$ref;
+  $sth->finish;
 
-  # remove any trailing whitespace
-  $form->{curr} =~ s/\s*$//;
+  #get name of currency instead of id:
+  $query = qq|SELECT name AS curr FROM currencies WHERE id=?|;
+  ($form->{curr}) = selectrow_query($form, $dbh, $query, conv_i($form->{currency_id}));
 
-  $sth->finish;
   if ( $form->{salesman_id} ) {
     my $query =
       qq|SELECT ct.name AS salesman | .
@@ -275,7 +277,7 @@ sub save_customer {
     $query = qq|SELECT nextval('id')|;
     ($form->{id}) = selectrow_query($form, $dbh, $query);
 
-    $query = qq|INSERT INTO customer (id, name) VALUES (?, '')|;
+    $query = qq|INSERT INTO customer (id, name, currency_id) VALUES (?, '', (SELECT currency_id FROM defaults))|;
     do_query($form, $dbh, $query, $form->{id});
   }
 
@@ -319,8 +321,9 @@ sub save_customer {
     qq|user_password = ?, | .
     qq|c_vendor_id = ?, | .
     qq|klass = ?, | .
-    qq|curr = ?, | .
-    qq|taxincluded_checked = ? | .
+    qq|currency_id = (SELECT id FROM currencies WHERE name = ?), | .
+    qq|taxincluded_checked = ?, | .
+    qq|delivery_term_id = ? | .
     qq|WHERE id = ?|;
   my @values = (
     $form->{customernumber},
@@ -362,8 +365,9 @@ sub save_customer {
     $form->{user_password},
     $form->{c_vendor_id},
     conv_i($form->{klass}),
-    substr($form->{currency}, 0, 3),
+    $form->{currency},
     $form->{taxincluded_checked} ne '' ? $form->{taxincluded_checked} : undef,
+    conv_i($form->{delivery_term_id}),
     $form->{id}
     );
   do_query( $form, $dbh, $query, @values );
@@ -422,7 +426,7 @@ sub save_vendor {
     $query = qq|SELECT nextval('id')|;
     ($form->{id}) = selectrow_query($form, $dbh, $query);
 
-    $query = qq|INSERT INTO vendor (id, name) VALUES (?, '')|;
+    $query = qq|INSERT INTO vendor (id, name, currency_id) VALUES (?, '', (SELECT currency_id FROM defaults))|;
     do_query($form, $dbh, $query, $form->{id});
 
     my $vendornumber      = SL::TransNumber->new(type   => 'vendor',
@@ -471,7 +475,8 @@ sub save_vendor {
     qq|  username = ?, | .
     qq|  user_password = ?, | .
     qq|  v_customer_id = ?, | .
-    qq|  curr = ? | .
+    qq|  currency_id = (SELECT id FROM currencies WHERE name = ?), | .
+    qq|  delivery_term_id = ? | .
     qq|WHERE id = ?|;
   my @values = (
     $form->{vendornumber},
@@ -511,7 +516,8 @@ sub save_vendor {
     $form->{username},
     $form->{user_password},
     $form->{v_customer_id},
-    substr($form->{currency}, 0, 3),
+    $form->{currency},
+    conv_i($form->{delivery_term_id}),
     $form->{id}
     );
   do_query($form, $dbh, $query, @values);
@@ -615,39 +621,40 @@ sub search {
   my @values;
 
   my %allowed_sort_columns = (
-      "id" => "id",
-      "customernumber" => "customernumber",
-      "vendornumber" => "vendornumber",
-      "name" => "ct.name",
-      "contact" => "contact",
-      "phone" => "phone",
-      "fax" => "fax",
-      "email" => "email",
-      "street" => "street",
-      "taxnumber" => "taxnumber",
-      "business" => "business",
-      "invnumber" => "invnumber",
-      "ordnumber" => "ordnumber",
-      "quonumber" => "quonumber",
-      "zipcode" => "zipcode",
-      "city" => "city",
-      "country" => "country",
-      "salesman" => "e.name"
+      "id"                 => "ct.id",
+      "customernumber"     => "ct.customernumber",
+      "vendornumber"       => "ct.vendornumber",
+      "name"               => "ct.name",
+      "contact"            => "ct.contact",
+      "phone"              => "ct.phone",
+      "fax"                => "ct.fax",
+      "email"              => "ct.email",
+      "street"             => "ct.street",
+      "taxnumber"          => "ct.taxnumber",
+      "business"           => "ct.business",
+      "invnumber"          => "ct.invnumber",
+      "ordnumber"          => "ct.ordnumber",
+      "quonumber"          => "ct.quonumber",
+      "zipcode"            => "ct.zipcode",
+      "city"               => "ct.city",
+      "country"            => "ct.country",
+      "discount"           => "ct.discount",
+      "salesman"           => "e.name"
     );
 
   $form->{sort} ||= "name";
   my $sortorder;
   if ( $join_records ) {
     # in UNION case order by hash key, e.g. salesman
-    # the UNION created an implicit select around the result 
+    # the UNION created an implicit select around the result
     $sortorder = $allowed_sort_columns{$form->{sort}} ? $form->{sort} : "name";
   } else {
     # in not UNION case order by hash value, e.g. e.name
     $sortorder = $allowed_sort_columns{$form->{sort}} ?  $allowed_sort_columns{$form->{sort}} : "ct.name";
-  };
+  }
   my $sortdir   = !defined $form->{sortdir} ? 'ASC' : $form->{sortdir} ? 'ASC' : 'DESC';
 
-  if ($sortorder !~ /(business|id)/ && !$join_records) {
+  if ($sortorder !~ /(business|id|discount)/ && !$join_records) {
     $sortorder  = "lower($sortorder) ${sortdir}";
   } else {
     $sortorder .= " ${sortdir}";
@@ -674,10 +681,10 @@ sub search {
     $where .= " AND ((lower(ct.city) LIKE lower(?))
                      OR
                      (ct.id IN (
-                        SELECT trans_id
-                        FROM shipto
-                        WHERE (module = 'CT')
-                          AND (lower(shiptocity) LIKE lower(?))
+                        SELECT sc.trans_id
+                        FROM shipto sc
+                        WHERE (sc.module = 'CT')
+                          AND (lower(sc.shiptocity) LIKE lower(?))
                       ))
                      )";
     push @values, ('%' . $form->{addr_city} . '%') x 2;
@@ -687,10 +694,10 @@ sub search {
     $where .= " AND ((lower(ct.country) LIKE lower(?))
                      OR
                      (ct.id IN (
-                        SELECT trans_id
-                        FROM shipto
-                        WHERE (module = 'CT')
-                          AND (lower(shiptocountry) LIKE lower(?))
+                        SELECT so.trans_id
+                        FROM shipto so
+                        WHERE (so.module = 'CT')
+                          AND (lower(so.shiptocountry) LIKE lower(?))
                       ))
                      )";
     push @values, ('%' . $form->{addr_country} . '%') x 2;
@@ -713,23 +720,23 @@ sub search {
         qq|  WHERE cv.id = a.vendor_id)|;
     }
     $form->{l_invnumber} = $form->{l_ordnumber} = $form->{l_quonumber} = "";
-  };
+  }
 
   if ($form->{obsolete} eq "Y") {
-    $where .= qq| AND obsolete|;
+    $where .= qq| AND ct.obsolete|;
   } elsif ($form->{obsolete} eq "N") {
-    $where .= qq| AND NOT obsolete|;
+    $where .= qq| AND NOT ct.obsolete|;
   }
 
   if ($form->{business_id}) {
-    $where .= qq| AND (business_id = ?)|;
+    $where .= qq| AND (ct.business_id = ?)|;
     push(@values, conv_i($form->{business_id}));
   }
 
   # Nur Kunden finden, bei denen ich selber der Verkäufer bin
   # Gilt nicht für Lieferanten
   if ($cv eq 'customer' &&   !$main::auth->assert('customer_vendor_all_edit', 1)) {
-    $where .= qq| AND ct.salesman_id = (select id from employee where login= ?)|;
+    $where .= qq| AND ct.salesman_id = (select em.id from employee em where em.login = ?)|;
     push(@values, $form->{login});
   }
 
@@ -743,12 +750,12 @@ sub search {
   }
 
   if ($form->{addr_street}) {
-    $where .= qq| AND (street ILIKE ?)|;
+    $where .= qq| AND (ct.street ILIKE ?)|;
     push @values, '%' . $form->{addr_street} . '%';
   }
 
   if ($form->{addr_zipcode}) {
-    $where .= qq| AND (zipcode ILIKE ?)|;
+    $where .= qq| AND (ct.zipcode ILIKE ?)|;
     push @values, $form->{addr_zipcode} . '%';
   }
 
@@ -812,7 +819,7 @@ sub search {
   }
 
   $query .= qq| ORDER BY $sortorder|;
-  
+
   $form->{CT} = selectall_hashref_query($form, $dbh, $query, @values);
 
   $main::lxdebug->leave_sub();
@@ -1079,6 +1086,10 @@ sub parse_excel_file {
   my ($self, $myconfig, $form) = @_;
   my $locale = $main::locale;
 
+  my $defaults = SL::DB::Default->get;
+  $form->error($::locale->text('No print templates have been created for this client yet. Please do so in the client configuration.')) if !$defaults->templates;
+  $form->{templates} = $defaults->templates;
+
   $form->{formname}   = 'sales_quotation';
   $form->{type}   = 'sales_quotation';
   $form->{format} = 'excel';
@@ -1121,8 +1132,6 @@ sub parse_excel_file {
 
   $form->{notes} =~ s/^\s+//g;
 
-  $form->{templates} = $myconfig->{templates};
-
   delete $form->{printer_command};
 
   $form->get_employee_info($myconfig);
@@ -1156,7 +1165,6 @@ sub search_contacts {
   my %params    = @_;
 
   my $dbh       = $params{dbh} || $::form->get_standard_dbh;
-  my $vc        = $params{db} eq 'customer' ? 'customer' : 'vendor';
 
   my %sortspecs = (
     'cp_name'   => 'cp_name, cp_givenname',