Bug 528 solved. Better Taxbird export for USTVA.
[kivitendo-erp.git] / SL / Form.pm
index 85634ca..df17c4b 100644 (file)
@@ -42,6 +42,7 @@ use Cwd;
 use HTML::Template;
 use SL::Template;
 use CGI::Ajax;
+use SL::DBUtils;
 use SL::Menu;
 use CGI;
 
@@ -576,31 +577,19 @@ sub write_trigger {
 
   # set dateform for jsscript
   # default
-  $ifFormat = "%d.%m.%Y";
-  if ($myconfig->{dateformat} eq "dd.mm.yy") {
-    $ifFormat = "%d.%m.%Y";
-  } else {
-    if ($myconfig->{dateformat} eq "dd-mm-yy") {
-      $ifFormat = "%d-%m-%Y";
-    } else {
-      if ($myconfig->{dateformat} eq "dd/mm/yy") {
-        $ifFormat = "%d/%m/%Y";
-      } else {
-        if ($myconfig->{dateformat} eq "mm/dd/yy") {
-          $ifFormat = "%m/%d/%Y";
-        } else {
-          if ($myconfig->{dateformat} eq "mm-dd-yy") {
-            $ifFormat = "%m-%d-%Y";
-          } else {
-            if ($myconfig->{dateformat} eq "yyyy-mm-dd") {
-              $ifFormat = "%Y-%m-%d";
-            }
-          }
-        }
-      }
-    }
-  }
+  my %dateformats = (
+    "dd.mm.yy" => "%d.%m.%Y",
+    "dd-mm-yy" => "%d-%m-%Y",
+    "dd/mm/yy" => "%d/%m/%Y",
+    "mm/dd/yy" => "%m/%d/%Y",
+    "mm-dd-yy" => "%m-%d-%Y",
+    "yyyy-mm-dd" => "%Y-%m-%d",
+    );
+
+  my $ifFormat = defined($dateformats{$myconfig{"dateformat"}}) ?
+    $dateformats{$myconfig{"dateformat"}} : "%d.%m.%Y";
 
+  my @triggers;
   while ($#_ >= 2) {
     push @triggers, qq|
        Calendar.setup(
@@ -690,18 +679,6 @@ sub parse_amount {
 
   my ($self, $myconfig, $amount) = @_;
 
-  if ($myconfig->{in_numberformat} == 1) {
-    # Extra input number format 1000.00 or 1000,00
-    $amount =~ s/,/\./g;
-    $amount = scalar reverse $amount;
-    $amount =~ s/\./DOT/;
-    $amount =~ s/\.//g;
-    $amount =~ s/DOT/\./;
-    $amount = scalar reverse $amount;
-    $main::lxdebug->leave_sub(2);
-    return ($amount * 1);
-  }
-
   if (   ($myconfig->{numberformat} eq '1.000,00')
       || ($myconfig->{numberformat} eq '1000,00')) {
     $amount =~ s/\.//g;
@@ -1134,13 +1111,15 @@ sub set_payment_options {
 
     my $dbh = $self->dbconnect($myconfig);
 
+    my $query =
+      qq|SELECT p.terms_netto, p.terms_skonto, p.percent_skonto, | .
+      qq|p.description_long | .
+      qq|FROM payment_terms p | .
+      qq|WHERE p.id = ?|;
 
-    my $query = qq|SELECT p.terms_netto, p.terms_skonto, p.percent_skonto, p.description_long FROM payment_terms p
-                  WHERE p.id = $self->{payment_id}|;
-    my $sth = $dbh->prepare($query);
-    $sth->execute || $self->dberror($query);
-  
-    ($self->{terms_netto}, $self->{terms_skonto}, $self->{percent_skonto}, $self->{payment_terms}) = $sth->fetchrow_array;
+    ($self->{terms_netto}, $self->{terms_skonto}, $self->{percent_skonto},
+     $self->{payment_terms}) =
+       selectrow_query($self, $dbh, $query, $self->{payment_id});
 
     if ($transdate eq "") {
       if ($self->{invdate}) {
@@ -1150,17 +1129,52 @@ sub set_payment_options {
       }
     }
 
-    $sth->finish;
-    my $query = qq|SELECT date '$transdate' + $self->{terms_netto} AS netto_date,date '$transdate' + $self->{terms_skonto} AS skonto_date  FROM payment_terms
-                  LIMIT 1|;
-    my $sth = $dbh->prepare($query);
-    $sth->execute || $self->dberror($query);    
-    ($self->{netto_date}, $self->{skonto_date}) = $sth->fetchrow_array;
-    $sth->finish;
+    $query =
+      qq|SELECT date '$transdate' + $self->{terms_netto} AS netto_date, | .
+      qq|date '$transdate' + $self->{terms_skonto} AS skonto_date | .
+      qq|FROM payment_terms LIMIT 1|;
+    ($self->{netto_date}, $self->{skonto_date}) =
+      selectrow_query($self, $dbh, $query);
 
     my $total = ($self->{invtotal}) ? $self->{invtotal} : $self->{ordtotal};
+    my $skonto_amount = $self->parse_amount($myconfig, $total) *
+      $self->{percent_skonto};
+
+    $self->{skonto_amount} =
+      $self->format_amount($myconfig, $skonto_amount, 2);
+
+    if ($self->{"language_id"}) {
+      $query =
+        qq|SELECT t.description_long, | .
+        qq|l.output_numberformat, l.output_dateformat, l.output_longdates | .
+        qq|FROM translation_payment_terms t | .
+        qq|LEFT JOIN language l ON t.language_id = l.id | .
+        qq|WHERE (t.language_id = ?) AND (t.payment_terms_id = ?)|;
+      my ($description_long, $output_numberformat, $output_dateformat,
+        $output_longdates) =
+        selectrow_query($self, $dbh, $query,
+                        $self->{"language_id"}, $self->{"payment_id"});
+
+      $self->{payment_terms} = $description_long if ($description_long);
+
+      if ($output_dateformat) {
+        foreach my $key (qw(netto_date skonto_date)) {
+          $self->{$key} =
+            $main::locale->reformat_date($myconfig, $self->{$key},
+                                         $output_dateformat,
+                                         $output_longdates);
+        }
+      }
 
-    $self->{skonto_amount} = $self->format_amount($myconfig, ($self->parse_amount($myconfig, $total) * $self->{percent_skonto}), 2);
+      if ($output_numberformat &&
+          ($output_numberformat ne $myconfig->{"numberformat"})) {
+        my $saved_numberformat = $myconfig->{"numberformat"};
+        $myconfig->{"numberformat"} = $output_numberformat;
+        $self->{skonto_amount} =
+          $self->format_amount($myconfig, $skonto_amount, 2);
+        $myconfig->{"numberformat"} = $saved_numberformat;
+      }
+    }
 
     $self->{payment_terms} =~ s/<%netto_date%>/$self->{netto_date}/g;
     $self->{payment_terms} =~ s/<%skonto_date%>/$self->{skonto_date}/g;
@@ -1574,7 +1588,7 @@ sub all_vc {
   # get payment terms
   $query = qq|SELECT id, description
               FROM payment_terms
-             ORDER BY 1|;
+              ORDER BY sortkey|;
   $sth = $dbh->prepare($query);
   $sth->execute || $self->dberror($query);
 
@@ -1624,7 +1638,7 @@ sub language_payment {
   # get payment terms
   $query = qq|SELECT id, description
               FROM payment_terms
-             ORDER BY 1|;
+              ORDER BY sortkey|;
   $sth = $dbh->prepare($query);
   $sth->execute || $self->dberror($query);