Probleme mit mehreren Währungen und Wechselkursen behoben.
authorMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 8 Jun 2007 14:19:06 +0000 (14:19 +0000)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 8 Jun 2007 14:19:06 +0000 (14:19 +0000)
SL/AP.pm
SL/AR.pm
SL/Form.pm
SL/IR.pm
SL/IS.pm
SL/RP.pm
bin/mozilla/ap.pl
bin/mozilla/ar.pl
bin/mozilla/is.pl
bin/mozilla/oe.pl

index 0f2e8ee..3bd658c 100644 (file)
--- a/SL/AP.pm
+++ b/SL/AP.pm
@@ -48,6 +48,8 @@ sub post_transaction {
   my ($null, $taxrate, $amount);
   my $exchangerate = 0;
 
+  $form->{defaultcurrency} = $form->get_default_currency($myconfig);
+
   ($null, $form->{department_id}) = split(/--/, $form->{department});
   $form->{department_id} *= 1;
 
index 410ac99..b6c04f7 100644 (file)
--- a/SL/AR.pm
+++ b/SL/AR.pm
@@ -50,6 +50,7 @@ sub post_transaction {
   my @values;
 
   my $dbh = $provided_dbh ? $provided_dbh : $form->dbconnect_noauto($myconfig);
+  $form->{defaultcurrency} = $form->get_default_currency($myconfig);
 
   # set exchangerate
   $form->{exchangerate} = ($form->{currency} eq $form->{defaultcurrency}) ? 1 :
@@ -147,7 +148,7 @@ sub post_transaction {
 
   # update exchangerate
   $form->update_exchangerate($dbh, $form->{currency}, $form->{transdate}, $form->{exchangerate}, 0)
-    if ($form->{currency} ne $form->{defaultcurrency}) && $form->check_exchangerate($myconfig, $form->{currency}, $form->{transdate}, 'buy');
+    if ($form->{currency} ne $form->{defaultcurrency}) && !$form->check_exchangerate($myconfig, $form->{currency}, $form->{transdate}, 'buy');
 
   if (!$payments_only) {
     $query =
index f5305e0..172da36 100644 (file)
@@ -1127,6 +1127,16 @@ sub update_exchangerate {
   if ($curr eq '') {
     $main::lxdebug->leave_sub();
     return;
+  }  
+  my $query = qq|SELECT curr FROM defaults|;
+
+  my ($currency) = selectrow_query($self, $dbh, $query);
+  my ($defaultcurrency) = split m/:/, $currency;
+
+
+  if ($curr eq $defaultcurrency) {
+    $main::lxdebug->leave_sub();
+    return;
   }
 
   my $query = qq|SELECT e.curr FROM exchangerate e
@@ -1134,6 +1144,16 @@ sub update_exchangerate {
                  FOR UPDATE|;
   my $sth = prepare_execute_query($self, $dbh, $query, $curr, $transdate);
 
+  if ($buy == 0) {
+    $buy = "";
+  }
+  if ($sell == 0) {
+    $sell = "";
+  }
+
+  $buy = conv_i($buy, "NULL");
+  $sell = conv_i($sell, "NULL");
+
   my $set;
   if ($buy != 0 && $sell != 0) {
     $set = "buy = $buy, sell = $sell";
@@ -1148,6 +1168,7 @@ sub update_exchangerate {
                 SET $set
                 WHERE curr = ?
                 AND transdate = ?|;
+    
   } else {
     $query = qq|INSERT INTO exchangerate (curr, buy, sell, transdate)
                 VALUES (?, $buy, $sell, ?)|;
@@ -1165,12 +1186,15 @@ sub save_exchangerate {
 
   my $dbh = $self->dbconnect($myconfig);
 
-  my ($buy, $sell) = (0, 0);
+  my ($buy, $sell);
+
   $buy  = $rate if $fld eq 'buy';
   $sell = $rate if $fld eq 'sell';
 
+
   $self->update_exchangerate($dbh, $currency, $transdate, $buy, $sell);
 
+
   $dbh->disconnect;
 
   $main::lxdebug->leave_sub();
@@ -1186,13 +1210,21 @@ sub get_exchangerate {
     return 1;
   }
 
+  my $query = qq|SELECT curr FROM defaults|;
+
+  my ($currency) = selectrow_query($self, $dbh, $query);
+  my ($defaultcurrency) = split m/:/, $currency;
+
+  if ($currency eq $defaultcurrency) {
+    $main::lxdebug->leave_sub();
+    return 1;
+  }
+
   my $query = qq|SELECT e.$fld FROM exchangerate e
                  WHERE e.curr = ? AND e.transdate = ?|;
   my ($exchangerate) = selectrow_query($self, $dbh, $query, $curr, $transdate);
 
-  if (!$exchangerate) {
-    $exchangerate = 1;
-  }
+
 
   $main::lxdebug->leave_sub();
 
@@ -1209,14 +1241,19 @@ sub check_exchangerate {
     return "";
   }
 
-  my $dbh = $self->dbconnect($myconfig);
+  my ($defaultcurrency) = $self->get_default_currency($myconfig);
+
+  if ($currency eq $defaultcurrency) {
+    $main::lxdebug->leave_sub();
+    return 1;
+  }
 
+  my $dbh   = $self->get_standard_dbh($myconfig);
   my $query = qq|SELECT e.$fld FROM exchangerate e
                  WHERE e.curr = ? AND e.transdate = ?|;
+
   my ($exchangerate) = selectrow_query($self, $dbh, $query, $currency, $transdate);
-  $dbh->disconnect();
 
-  $exchangerate = 1 if ($exchangerate == 0);
   $exchangerate = 1 if ($exchangerate eq "");
 
   $main::lxdebug->leave_sub();
@@ -1224,6 +1261,23 @@ sub check_exchangerate {
   return $exchangerate;
 }
 
+sub get_default_currency {
+  $main::lxdebug->enter_sub();
+
+  my ($self, $myconfig) = @_;
+  my $dbh = $self->get_standard_dbh($myconfig);
+
+  my $query = qq|SELECT curr FROM defaults|;
+
+  my ($curr)            = selectrow_query($self, $dbh, $query);
+  my ($defaultcurrency) = split m/:/, $curr;
+
+  $main::lxdebug->leave_sub();
+
+  return $defaultcurrency;
+}
+
+
 sub set_payment_options {
   $main::lxdebug->enter_sub();
 
index 98a5353..177a287 100644 (file)
--- a/SL/IR.pm
+++ b/SL/IR.pm
@@ -46,6 +46,7 @@ sub post_invoice {
 
   # connect to database, turn off autocommit
   my $dbh = $provided_dbh ? $provided_dbh : $form->dbconnect_noauto($myconfig);
+  $form->{defaultcurrency} = $form->get_default_currency($myconfig);
 
   my ($query, $sth, @values, $project_id);
   my ($allocated, $taxrate, $taxamount, $taxdiff, $item);
index 78c0652..84baa08 100644 (file)
--- a/SL/IS.pm
+++ b/SL/IS.pm
@@ -492,6 +492,8 @@ sub post_invoice {
   if (!$form->{employee_id}) {
     $form->get_employee($dbh);
   }
+  
+  $form->{defaultcurrency} = $form->get_default_currency($myconfig);
 
   ($null, $form->{department_id}) = split(/--/, $form->{department});
 
index 21b199e..68c6c75 100644 (file)
--- a/SL/RP.pm
+++ b/SL/RP.pm
@@ -980,6 +980,7 @@ sub trial_balance {
             $project
           AND ac.amount > 0
           AND c.accno = ?) AS credit |;
+
   $drcr = prepare_query($form, $dbh, $q_drcr);
 
   if ($form->{project_id}) {
index 4b2b4e1..6f86e90 100644 (file)
@@ -213,10 +213,21 @@ sub form_header {
     ($form->current_date(\%myconfig) eq $form->{gldate}) ? 1 : 0;
   $readonly                 = ($form->{radier}) ? "" : $readonly;
 
+  $form->{exchangerate} = $exchangerate
+    if (
+        $form->{forex} = (
+                     $exchangerate =
+                       $form->check_exchangerate(
+                       \%myconfig, $form->{currency}, $form->{transdate}, 'sell'
+                       )));
+
+
   # format amounts
   $form->{exchangerate} =
     $form->format_amount(\%myconfig, $form->{exchangerate});
-
+  if ($form->{exchangerate} == 0) {
+    $form->{exchangerate} = "";
+  }
   $form->{creditlimit} =
     $form->format_amount(\%myconfig, $form->{creditlimit}, 0, "0");
   $form->{creditremaining} =
@@ -647,6 +658,9 @@ $jsscript
     }
     $form->{"exchangerate_$i"} =
       $form->format_amount(\%myconfig, $form->{"exchangerate_$i"});
+    if ($form->{"exchangerate_$i"} == 0) {
+      $form->{"exchangerate_$i"} = "";
+    }
 
     $exchangerate = qq|&nbsp;|;
     if ($form->{currency} ne $form->{defaultcurrency}) {
index ba98a8e..c653382 100644 (file)
@@ -232,10 +232,22 @@ sub form_header {
       s/option>\Q$form->{$item}\E/option selected>$form->{$item}/;
   }
 
+  $form->{exchangerate} = $exchangerate
+    if (
+        $form->{forex} = (
+                     $exchangerate =
+                       $form->check_exchangerate(
+                       \%myconfig, $form->{currency}, $form->{transdate}, 'buy'
+                       )));
+
   # format amounts
   $form->{exchangerate} =
     $form->format_amount(\%myconfig, $form->{exchangerate});
 
+  if ($form->{exchangerate} == 0) {
+    $form->{exchangerate} = "";
+  }
+
   $form->{creditlimit} =
     $form->format_amount(\%myconfig, $form->{creditlimit}, 0, "0");
   $form->{creditremaining} =
@@ -678,6 +690,10 @@ $jsscript
     $form->{"exchangerate_$i"} =
       $form->format_amount(\%myconfig, $form->{"exchangerate_$i"});
 
+    if ($form->{"exchangerate_$i"} == 0) {
+      $form->{"exchangerate_$i"} = "";
+    }
+
     $exchangerate = qq|&nbsp;|;
     if ($form->{currency} ne $form->{defaultcurrency}) {
       if ($form->{"forex_$i"}) {
index cd20dda..feb43ac 100644 (file)
@@ -302,7 +302,7 @@ sub form_header {
       }
     }
   }
-
+  $form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
   $form->{radier} =
     ($form->current_date(\%myconfig) eq $form->{gldate}) ? 1 : 0;
 
@@ -1031,6 +1031,9 @@ if ($form->{type} eq "credit_note") {
     $form->{"exchangerate_$i"} =
       $form->format_amount(\%myconfig, $form->{"exchangerate_$i"});
 
+    if ($form->{"exchangerate_$i"} == 0) {
+      $form->{"exchangerate_$i"} = "";
+    }
     $exchangerate = qq|&nbsp;|;
     if ($form->{currency} ne $form->{defaultcurrency}) {
       if ($form->{"forex_$i"}) {
@@ -1379,6 +1382,8 @@ sub update {
 
 sub post_payment {
   $lxdebug->enter_sub();
+
+  $form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
   for $i (1 .. $form->{paidaccounts}) {
     if ($form->{"paid_$i"}) {
       $datepaid = $form->datetonum($form->{"datepaid_$i"}, \%myconfig);
@@ -1410,6 +1415,8 @@ sub post_payment {
 
 sub post {
   $lxdebug->enter_sub();
+
+  $form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
   $form->isblank("invdate",  $locale->text('Invoice Date missing!'));
   $form->isblank("customer", $locale->text('Customer missing!'));
 
index 6ee8520..c1f0616 100644 (file)
@@ -331,6 +331,8 @@ sub form_header {
     $form->{salesman_id} = $form->{old_salesman_id};
   }
 
+  $form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
+
   map { $form->{$_} =~ s/\"/&quot;/g }
     qw(ordnumber quonumber shippingpoint shipvia notes intnotes shiptoname
        shiptostreet shiptozipcode shiptocity shiptocountry shiptocontact
@@ -570,6 +572,10 @@ sub form_header {
   $form->{exchangerate} =
     $form->format_amount(\%myconfig, $form->{exchangerate});
 
+  if (!$form->{exchangerate}) {
+    $form->{exchangerate} = "";
+  }
+
   if (($form->{creditlimit} != 0) && ($form->{creditremaining} < 0) && !$form->{update}) {
     $creditwarning = 1;
   } else {
@@ -1924,6 +1930,9 @@ sub subtotal {
 sub save_and_close {
   $lxdebug->enter_sub();
 
+  $form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
+
+
   if ($form->{type} =~ /_order$/) {
     $form->isblank("transdate", $locale->text('Order Date missing!'));
   } else {
@@ -2019,6 +2028,9 @@ sub save_and_close {
 sub save {
   $lxdebug->enter_sub();
 
+  $form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
+
+
   if ($form->{type} =~ /_order$/) {
     $form->isblank("transdate", $locale->text('Order Date missing!'));
   } else {
@@ -2270,6 +2282,8 @@ sub invoice {
   $form->{rowcount}--;
   $form->{shipto} = 1;
 
+  $form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
+
   if ($form->{type} =~ /_order$/) {
     $form->{exchangerate} = $exchangerate;
     &create_backorder;