Merge branch 'master' of vc.linet-services.de:public/lx-office-erp
[kivitendo-erp.git] / SL / CT.pm
index 1b9d915..467fb08 100644 (file)
--- a/SL/CT.pm
+++ b/SL/CT.pm
@@ -44,6 +44,7 @@ use SL::CVar;
 use SL::DBUtils;
 use SL::FU;
 use SL::Notes;
+use SL::TransNumber;
 
 use strict;
 
@@ -235,7 +236,7 @@ sub save_customer {
   $form->{klass} = 0 unless ($form->{klass});
 
   # connect to database
-  my $dbh = $form->dbconnect_noauto($myconfig);
+  my $dbh = $form->get_standard_dbh;
 
   map( {
     $form->{"cp_${_}"} = $form->{"selected_cp_${_}"}
@@ -261,21 +262,12 @@ sub save_customer {
     }
 
   } else {
-    if (!$form->{customernumber} && $form->{business}) {
-      $form->{customernumber} =
-        $form->update_business($myconfig, $form->{business}, $dbh);
-    }
-    if (!$form->{customernumber}) {
-      $form->{customernumber} =
-        $form->update_defaults($myconfig, "customernumber", $dbh);
-    }
-
-    $query  = qq|SELECT c.id FROM customer c WHERE c.customernumber = ?|;
-    ($f_id) = selectrow_query($form, $dbh, $query, $form->{customernumber});
-    if ($f_id ne "") {
-      $main::lxdebug->leave_sub();
-      return 3;
-    }
+    my $customernumber      = SL::TransNumber->new(type        => 'customer',
+                                                   dbh         => $dbh,
+                                                   number      => $form->{customernumber},
+                                                   business_id => $form->{business},
+                                                   save        => 1);
+    $form->{customernumber} = $customernumber->create_unique unless $customernumber->is_unique;
 
     $query = qq|SELECT nextval('id')|;
     ($form->{id}) = selectrow_query($form, $dbh, $query);
@@ -453,7 +445,6 @@ sub save_customer {
                               'always_valid' => 1);
 
   my $rc = $dbh->commit();
-  $dbh->disconnect();
 
   $main::lxdebug->leave_sub();
   return $rc;
@@ -466,7 +457,7 @@ sub save_vendor {
 
   $form->{taxzone_id} *= 1;
   # connect to database
-  my $dbh = $form->dbconnect_noauto($myconfig);
+  my $dbh = $form->get_standard_dbh;
 
   map( {
     $form->{"cp_${_}"} = $form->{"selected_cp_${_}"}
@@ -488,9 +479,11 @@ sub save_vendor {
     $query = qq|INSERT INTO vendor (id, name) VALUES (?, '')|;
     do_query($form, $dbh, $query, $form->{id});
 
-    if ( !$form->{vendornumber} ) {
-      $form->{vendornumber} = $form->update_defaults( $myconfig, "vendornumber", $dbh );
-    }
+    my $vendornumber      = SL::TransNumber->new(type   => 'vendor',
+                                                 dbh    => $dbh,
+                                                 number => $form->{vendornumber},
+                                                 save   => 1);
+    $form->{vendornumber} = $vendornumber->create_unique unless $vendornumber->is_unique;
   }
 
   $query =
@@ -659,7 +652,6 @@ sub save_vendor {
                               'always_valid' => 1);
 
   my $rc = $dbh->commit();
-  $dbh->disconnect();
 
   $main::lxdebug->leave_sub();
   return $rc;
@@ -696,8 +688,10 @@ sub search {
   my @values;
 
   my %allowed_sort_columns =
-    map({ $_, 1 } qw(id customernumber vendornumber name contact phone fax email
-                     taxnumber business invnumber ordnumber quonumber));
+    map { $_, 1 } qw(
+      id customernumber vendornumber name contact phone fax email street
+      taxnumber business invnumber ordnumber quonumber zipcode city
+    );
   my $sortorder    = $form->{sort} && $allowed_sort_columns{$form->{sort}} ? $form->{sort} : "name";
   $form->{sort} = $sortorder;
   my $sortdir   = !defined $form->{sortdir} ? 'ASC' : $form->{sortdir} ? 'ASC' : 'DESC';
@@ -941,7 +935,7 @@ sub get_delivery {
     qq|SELECT s.shiptoname, i.qty $qty_sign, | .
     qq|  ${arap}.id, ${arap}.transdate, ${arap}.invnumber, ${arap}.ordnumber, | .
     qq|  i.description, i.unit, i.sellprice, | .
-    qq|  oe.id AS oe_id | .
+    qq|  oe.id AS oe_id, invoice | .
     qq|FROM $arap | .
     qq|LEFT JOIN shipto s ON | .
     ($arap eq "ar"
@@ -1049,7 +1043,24 @@ sub delete_shipto {
   my %myconfig  = %main::myconfig;
   my $dbh       = $form->get_standard_dbh(\%myconfig);
 
-  do_query($form, $dbh, qq|UPDATE contacts SET cp_cv_id = NULL WHERE cp_id = ?|, $shipto_id);
+  do_query($form, $dbh, qq|UPDATE shipto SET trans_id = NULL WHERE shipto_id = ?|, $shipto_id);
+
+  $dbh->commit();
+
+  $main::lxdebug->leave_sub();
+}
+
+sub delete_contact {
+  $main::lxdebug->enter_sub();
+
+  my $self      = shift;
+  my $cp_id     = shift;
+
+  my $form      = $main::form;
+  my %myconfig  = %main::myconfig;
+  my $dbh       = $form->get_standard_dbh(\%myconfig);
+
+  do_query($form, $dbh, qq|UPDATE contacts SET cp_cv_id = NULL WHERE cp_id = ?|, $cp_id);
 
   $dbh->commit();
 
@@ -1089,4 +1100,80 @@ sub get_bank_info {
   return $result;
 }
 
+sub parse_excel_file {
+  $main::lxdebug->enter_sub();
+
+  my ($self, $myconfig, $form) = @_;
+  my $locale = $main::locale;
+
+  $form->{formname}   = 'sales_quotation';
+  $form->{type}   = 'sales_quotation';
+  $form->{format} = 'excel';
+  $form->{media}  = 'screen';
+  $form->{quonumber} = 1;
+
+
+  # $form->{"notes"} will be overridden by the customer's/vendor's "notes" field. So save it here.
+  $form->{ $form->{"formname"} . "notes" } = $form->{"notes"};
+
+  my $inv                  = "quo";
+  my $due                  = "req";
+  $form->{"${inv}date"} = $form->{transdate};
+  $form->{label}        = $locale->text('Quotation');
+  my $numberfld            = "sqnumber";
+  my $order                = 1;
+
+  # assign number
+  $form->{what_done} = $form->{formname};
+
+  map({ delete($form->{$_}); } grep(/^cp_/, keys(%{ $form })));
+
+  my $output_dateformat = $myconfig->{"dateformat"};
+  my $output_numberformat = $myconfig->{"numberformat"};
+  my $output_longdates = 1;
+
+  # map login user variables
+  map { $form->{"login_$_"} = $myconfig->{$_} } ("name", "email", "fax", "tel", "company");
+
+  # format item dates
+  for my $field (qw(transdate_oe deliverydate_oe)) {
+    map {
+      $form->{$field}[$_] = $locale->date($myconfig, $form->{$field}[$_], 1);
+    } 0 .. $#{ $form->{$field} };
+  }
+
+  if ($form->{shipto_id}) {
+    $form->get_shipto($myconfig);
+  }
+
+  $form->{notes} =~ s/^\s+//g;
+
+  $form->{templates} = $myconfig->{templates};
+
+  delete $form->{printer_command};
+
+  $form->get_employee_info($myconfig);
+
+  my ($cvar_date_fields, $cvar_number_fields) = CVar->get_field_format_list('module' => 'CT', 'prefix' => 'vc_');
+
+  if (scalar @{ $cvar_date_fields }) {
+    format_dates($output_dateformat, $output_longdates, @{ $cvar_date_fields });
+  }
+
+  while (my ($precision, $field_list) = each %{ $cvar_number_fields }) {
+    reformat_numbers($output_numberformat, $precision, @{ $field_list });
+  }
+
+  $form->{excel} = 1;
+  my $extension            = 'xls';
+
+  $form->{IN}         = "$form->{formname}.${extension}";
+
+  delete $form->{OUT};
+
+  $form->parse_template($myconfig);
+
+  $main::lxdebug->leave_sub();
+}
+
 1;