Anpassung der Routinen von Kreditoren und Debitorenbuchungen auf das neue Steuersystem
authorPhilip Reetz <p.reetz@linet-services.de>
Mon, 11 Dec 2006 15:37:41 +0000 (15:37 +0000)
committerPhilip Reetz <p.reetz@linet-services.de>
Mon, 11 Dec 2006 15:37:41 +0000 (15:37 +0000)
SL/AP.pm
SL/AR.pm
SL/Form.pm
bin/mozilla/ap.pl
bin/mozilla/ar.pl
sql/Pg-upgrade/Pg-upgrade-2.2.0.34-2.2.0.35.sql [new file with mode: 0644]

index 0d13229..b0e0440 100644 (file)
--- a/SL/AP.pm
+++ b/SL/AP.pm
@@ -88,13 +88,15 @@ sub post_transaction {
   $form->{taxincluded} = 0 if ($form->{amount} == 0);
 
   for $i (1 .. $form->{rowcount}) {
-    ($form->{"taxkey_$i"}, $NULL) = split /--/, $form->{"taxchart_$i"};
+   ($form->{"tax_id_$i"}, $NULL) = split /--/, $form->{"taxchart_$i"};
 
-    $query =
-      qq| SELECT c.accno, t.rate FROM chart c, tax t where c.id=t.chart_id AND t.taxkey=$form->{"taxkey_$i"}|;
+    $query = qq|SELECT c.accno, t.taxkey, t.rate
+            FROM tax t LEFT JOIN chart c on (c.id=t.chart_id)
+            WHERE t.id=$form->{"tax_id_$i"}
+            ORDER BY c.accno|;
     $sth = $dbh->prepare($query);
     $sth->execute || $form->dberror($query);
-    ($form->{AP_amounts}{"tax_$i"}, $form->{"taxrate_$i"}) =
+    ($form->{AP_amounts}{"tax_$i"}, $form->{"taxkey_$i"}, $form->{"taxrate_$i"}) =
       $sth->fetchrow_array;
     $form->{AP_amounts}{"tax_$i"}{taxkey}    = $form->{"taxkey_$i"};
     $form->{AP_amounts}{"amount_$i"}{taxkey} = $form->{"taxkey_$i"};
index fe687ee..b4c0ae1 100644 (file)
--- a/SL/AR.pm
+++ b/SL/AR.pm
@@ -91,13 +91,16 @@ sub post_transaction {
 
   $form->{taxincluded} = 0 if ($form->{amount} == 0);
   for $i (1 .. $form->{rowcount}) {
-    ($form->{"taxkey_$i"}, $NULL) = split /--/, $form->{"taxchart_$i"};
+    ($form->{"tax_id_$i"}, $NULL) = split /--/, $form->{"taxchart_$i"};
+
+    $query = qq|SELECT c.accno, t.taxkey, t.rate
+            FROM tax t LEFT JOIN chart c on (c.id=t.chart_id)
+            WHERE t.id=$form->{"tax_id_$i"}
+            ORDER BY c.accno|;
 
-    $query =
-      qq| SELECT c.accno, t.rate FROM chart c, tax t where c.id=t.chart_id AND t.taxkey=$form->{"taxkey_$i"}|;
     $sth = $dbh->prepare($query);
     $sth->execute || $form->dberror($query);
-    ($form->{AR_amounts}{"tax_$i"}, $form->{"taxrate_$i"}) =
+    ($form->{AR_amounts}{"tax_$i"}, $form->{"taxkey_$i"}, $form->{"taxrate_$i"}) =
       $sth->fetchrow_array;
     $form->{AR_amounts}{"tax_$i"}{taxkey}    = $form->{"taxkey_$i"};
     $form->{AR_amounts}{"amount_$i"}{taxkey} = $form->{"taxkey_$i"};
index cbfc81f..381d815 100644 (file)
@@ -1634,40 +1634,47 @@ sub create_links {
   my ($query, $sth);
 
   my $dbh = $self->dbconnect($myconfig);
-
   my %xkeyref = ();
 
-  # now get the account numbers
-  $query = qq|SELECT c.accno, c.description, c.link, c.taxkey_id
-              FROM chart c
-             WHERE c.link LIKE '%$module%'
-             ORDER BY c.accno|;
-
-  $sth = $dbh->prepare($query);
-  $sth->execute || $self->dberror($query);
-
-  $self->{accounts} = "";
-  while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+  if (!$self->{id}) {
 
-    foreach my $key (split /:/, $ref->{link}) {
-      if ($key =~ /$module/) {
-
-        # cross reference for keys
-        $xkeyref{ $ref->{accno} } = $key;
-
-        push @{ $self->{"${module}_links"}{$key} },
-          { accno       => $ref->{accno},
-            description => $ref->{description},
-            taxkey      => $ref->{taxkey_id} };
-
-        $self->{accounts} .= "$ref->{accno} " unless $key =~ /tax/;
+    my $transdate = "current_date";
+    if ($self->{transdate}) {
+      $transdate = qq|'$self->{transdate}'|;
+    }
+  
+    # now get the account numbers
+    $query = qq|SELECT c.accno, c.description, c.link, c.taxkey_id, tk.tax_id
+                FROM chart c, taxkeys tk
+                WHERE c.link LIKE '%$module%' AND c.id=tk.chart_id AND tk.id = (SELECT id from taxkeys where taxkeys.chart_id =c.id AND startdate<=$transdate ORDER BY startdate desc LIMIT 1)
+                ORDER BY c.accno|;
+  
+    $sth = $dbh->prepare($query);
+    $sth->execute || $self->dberror($query);
+  
+    $self->{accounts} = "";
+    while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+  
+      foreach my $key (split /:/, $ref->{link}) {
+        if ($key =~ /$module/) {
+  
+          # cross reference for keys
+          $xkeyref{ $ref->{accno} } = $key;
+  
+          push @{ $self->{"${module}_links"}{$key} },
+            { accno       => $ref->{accno},
+              description => $ref->{description},
+              taxkey      => $ref->{taxkey_id},
+              tax_id      => $ref->{tax_id} };
+  
+          $self->{accounts} .= "$ref->{accno} " unless $key =~ /tax/;
+        }
       }
     }
   }
-  $sth->finish;
 
   # get taxkeys and description
-  $query = qq|SELECT taxkey, taxdescription
+  $query = qq|SELECT id, taxkey, taxdescription
               FROM tax|;
   $sth = $dbh->prepare($query);
   $sth->execute || $self->dberror($query);
@@ -1729,14 +1736,50 @@ sub create_links {
     }
     $sth->finish;
 
+
+    my $transdate = "current_date";
+    if ($self->{transdate}) {
+      $transdate = qq|'$self->{transdate}'|;
+    }
+  
+    # now get the account numbers
+    $query = qq|SELECT c.accno, c.description, c.link, c.taxkey_id, tk.tax_id
+                FROM chart c, taxkeys tk
+                WHERE c.link LIKE '%$module%' AND (((tk.chart_id=c.id) AND NOT(c.link like '%_tax%')) OR (NOT(tk.chart_id=c.id) AND (c.link like '%_tax%'))) AND (((tk.id = (SELECT id from taxkeys where taxkeys.chart_id =c.id AND startdate<=$transdate ORDER BY startdate desc LIMIT 1)) AND NOT(c.link like '%_tax%')) OR (c.link like '%_tax%'))
+                ORDER BY c.accno|;
+  
+    $sth = $dbh->prepare($query);
+    $sth->execute || $self->dberror($query);
+  
+    $self->{accounts} = "";
+    while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+  
+      foreach my $key (split /:/, $ref->{link}) {
+        if ($key =~ /$module/) {
+  
+          # cross reference for keys
+          $xkeyref{ $ref->{accno} } = $key;
+  
+          push @{ $self->{"${module}_links"}{$key} },
+            { accno       => $ref->{accno},
+              description => $ref->{description},
+              taxkey      => $ref->{taxkey_id},
+              tax_id      => $ref->{tax_id} };
+  
+          $self->{accounts} .= "$ref->{accno} " unless $key =~ /tax/;
+        }
+      }
+    }
+
+
     # get amounts from individual entries
     $query = qq|SELECT c.accno, c.description, a.source, a.amount, a.memo,
-                a.transdate, a.cleared, a.project_id, p.projectnumber, a.taxkey, t.rate
+                a.transdate, a.cleared, a.project_id, p.projectnumber, a.taxkey, t.rate, t.id
                FROM acc_trans a
                JOIN chart c ON (c.id = a.chart_id)
                LEFT JOIN project p ON (p.id = a.project_id)
-               LEFT Join tax t ON (a.taxkey = t.taxkey)
-               WHERE a.trans_id = $self->{id}
+                LEFT JOIN tax t ON (t.id=(SELECT tk.tax_id from taxkeys tk WHERE (tk.taxkey_id=a.taxkey) AND ((CASE WHEN a.chart_id IN (SELECT chart_id FROM taxkeys WHERE taxkey_id=a.taxkey) THEN tk.chart_id=a.chart_id ELSE 1=1 END) OR (c.link='%tax%')) AND startdate <=a.transdate ORDER BY startdate DESC LIMIT 1)) 
+                WHERE a.trans_id = $self->{id}
                AND a.fx_transaction = '0'
                ORDER BY a.oid,a.transdate|;
     $sth = $dbh->prepare($query);
@@ -1765,8 +1808,8 @@ sub create_links {
 
       push @{ $self->{acc_trans}{ $xkeyref{ $ref->{accno} } } }, $ref;
     }
-    $sth->finish;
 
+    $sth->finish;
     $query = qq|SELECT d.curr AS currencies, d.closedto, d.revtrans,
                   (SELECT c.accno FROM chart c
                   WHERE d.fxgain_accno_id = c.id) AS fxgain_accno,
@@ -1817,6 +1860,8 @@ sub create_links {
 
   }
 
+  $sth->finish;
+
   $dbh->disconnect;
 
   $main::lxdebug->leave_sub();
index 442531a..b0678ae 100644 (file)
@@ -112,7 +112,7 @@ sub create_links {
   $duedate     = $form->{duedate};
 
   IR->get_vendor(\%myconfig, \%$form);
-
+  $form->{taxincluded} = $taxincluded;
   $form->{duedate}   = $duedate if $duedate;
   $form->{oldvendor} = "$form->{vendor}--$form->{vendor_id}";
   $form->{rowcount}  = 1;
@@ -122,7 +122,7 @@ sub create_links {
 
   map {
     $tax .=
-      qq|<option value=\"$_->{taxkey}--$_->{rate}\">$_->{taxdescription}  |
+      qq|<option value=\"$_->{id}--$_->{rate}\">$_->{taxdescription}  |
       . ($_->{rate} * 100) . qq| %|
   } @{ $form->{TAX} };
   $form->{taxchart}       = $tax;
@@ -166,7 +166,7 @@ sub create_links {
           "<option value=\"$ref->{accno}\">$ref->{accno}--$ref->{description}</option>\n";
       } else {
         $form->{"select$key"} .=
-          "<option value=\"$ref->{accno}--$ref->{taxkey}\">$ref->{accno}--$ref->{description}</option>\n";
+          "<option value=\"$ref->{accno}--$ref->{tax_id}\">$ref->{accno}--$ref->{description}</option>\n";
       }
     }
 
@@ -246,7 +246,7 @@ sub create_links {
           if ($akey eq 'amount') {
             $form->{"taxchart_$k"} = $form->{taxchart};
             $form->{"taxchart_$k"} =~
-              /<option value=\"($form->{acc_trans}{$key}->[$i-1]->{taxkey}--[^\"]*)/;
+              /<option value=\"($form->{acc_trans}{$key}->[$i-1]->{id}--[^\"]*)/;
             $form->{"taxchart_$k"} = $1;
           }
         }
@@ -645,8 +645,10 @@ $jsscript
       s/option value=\"$form->{"AP_paid_$i"}\">/option value=\"$form->{"AP_paid_$i"}\" selected>/;
 
     # format amounts
-    $form->{"paid_$i"} =
+    if ($form->{"paid_$i"}) {
+      $form->{"paid_$i"} =
       $form->format_amount(\%myconfig, $form->{"paid_$i"}, 2);
+    }
     $form->{"exchangerate_$i"} =
       $form->format_amount(\%myconfig, $form->{"exchangerate_$i"});
 
index 4e494cd..2bc8d0a 100644 (file)
@@ -111,8 +111,10 @@ sub create_links {
   $duedate = $form->{duedate};
 
   $taxincluded = $form->{taxincluded};
-
+  my $id = $form->{id};
   IS->get_customer(\%myconfig, \%$form);
+  $form->{taxincluded} = $taxincluded;
+  $form->{id} = $id;
 
   $form->{duedate}     = $duedate if $duedate;
   $form->{oldcustomer} = "$form->{customer}--$form->{customer_id}";
@@ -157,7 +159,7 @@ sub create_links {
 
   map {
     $tax .=
-      qq|<option value=\"$_->{taxkey}--$_->{rate}\">$_->{taxdescription}  |
+      qq|<option value=\"$_->{id}--$_->{rate}\">$_->{taxdescription}  |
       . ($_->{rate} * 100) . qq| %|
   } @{ $form->{TAX} };
   $form->{taxchart}       = $tax;
@@ -174,7 +176,7 @@ sub create_links {
           "<option value=\"$ref->{accno}\">$ref->{accno}--$ref->{description}</option>\n";
       } else {
         $form->{"select$key"} .=
-          "<option value=\"$ref->{accno}--$ref->{taxkey}\">$ref->{accno}--$ref->{description}</option>\n";
+          "<option value=\"$ref->{accno}--$ref->{tax_id}\">$ref->{accno}--$ref->{description}</option>\n";
       }
     }
 
@@ -256,7 +258,7 @@ sub create_links {
           if ($akey eq 'amount') {
             $form->{"taxchart_$k"} = $form->{taxchart};
             $form->{"taxchart_$k"} =~
-              /<option value=\"($form->{acc_trans}{$key}->[$i-1]->{taxkey}--[^\"]*)/;
+              /<option value=\"($form->{acc_trans}{$key}->[$i-1]->{id}--[^\"]*)/;
             $form->{"taxchart_$k"} = $1;
           }
         }
@@ -663,8 +665,10 @@ $jsscript
       s/option value=\"$form->{"AR_paid_$i"}\">/option value=\"$form->{"AR_paid_$i"}\" selected>/;
 
     # format amounts
-    $form->{"paid_$i"} =
-      $form->format_amount(\%myconfig, $form->{"paid_$i"}, 2);
+    if ($form->{"paid_$i"}) {
+      $form->{"paid_$i"} =
+        $form->format_amount(\%myconfig, $form->{"paid_$i"}, 2);
+    }
     $form->{"exchangerate_$i"} =
       $form->format_amount(\%myconfig, $form->{"exchangerate_$i"});
 
diff --git a/sql/Pg-upgrade/Pg-upgrade-2.2.0.34-2.2.0.35.sql b/sql/Pg-upgrade/Pg-upgrade-2.2.0.34-2.2.0.35.sql
new file mode 100644 (file)
index 0000000..f7a1de5
--- /dev/null
@@ -0,0 +1 @@
+insert into taxkeys (chart_id, tax_id, taxkey_id,startdate) SELECT 0, id, taxkey, '1970-01-01' FROM tax;
\ No newline at end of file