Anscheinend gab es irgendwo im Upgrade-Pfad Unstimmigkeiten, sodass nicht alle Datenb...
[kivitendo-erp.git] / SL / USTVA.pm
index 09f5683..31b13bd 100644 (file)
@@ -597,6 +597,27 @@ sub ustva {
   &get_accounts_ustva($dbh, $last_period, $form->{fromdate}, $form->{todate},
                       $form, $category);
 
+
+  # 16%/19% Umstelung
+  # Umordnen der Kennziffern und abfangen von Fehlern 
+
+#  $form->header;
+#  print $form->{81};
+
+  if ( $form->{year} < 2007) {
+    $form->{35} += $form->{81};
+    $form->{36} += $form->{811};
+    $form->{95} += $form->{89};
+    $form->{98} += $form->{891};
+    map { delete $form->{$_} } qw(81 811 89 891);
+  } else {
+    $form->{35} += $form->{51};
+    $form->{36} += $form->{511};
+    $form->{95} += $form->{97};
+    $form->{98} += $form->{971};
+    map { delete $form->{$_} } qw(51 511 97 971);
+  }
+
   #
   # Berechnung der USTVA Formularfelder laut Bogen 207
   #
@@ -694,7 +715,8 @@ sub get_accounts_ustva {
      ( 
        SELECT SUM(acc.amount)
        FROM acc_trans acc
-       INNER JOIN chart c ON (acc.chart_id = c.id AND c.link like '%AR_paid%')
+       INNER JOIN chart c ON (acc.chart_id   =   c.id 
+                              AND c.link   like  '%AR_paid%')
        WHERE
         1=1 
         $ARwhere
@@ -705,47 +727,73 @@ sub get_accounts_ustva {
       select amount from ar where id = ac.trans_id  
      )
    ) AS amount,
-   c.pos_ustva
+   tk.pos_ustva
    FROM acc_trans ac
-   JOIN chart c ON (c.id = ac.chart_id)
-   --JOIN ar ON (ar.id = ac.trans_id)
-   where 
+   LEFT JOIN chart c ON (c.id  = ac.chart_id)
+   LEFT JOIN ar      ON (ar.id = ac.trans_id)
+   LEFT JOIN taxkeys tk ON (
+     tk.id = (
+       SELECT id FROM taxkeys 
+       WHERE chart_id   = ac.chart_id 
+         AND taxkey_id  = ac.taxkey 
+         AND startdate <= COALESCE(ar.deliverydate, ar.transdate)
+       ORDER BY startdate DESC LIMIT 1
+     )
+   )
+   WHERE 
      1=1 
      -- Here no where, please. All Transactions ever should be
      -- testet if they are paied in the USTVA report period.
-   GROUP BY c.pos_ustva
+   GROUP BY tk.pos_ustva
 
  UNION -- alle Ausgaben AP erfassen
 
      SELECT
-     sum(ac.amount) AS amount, pos_ustva
+     sum(ac.amount) AS amount, 
+     tk.pos_ustva
      FROM acc_trans ac
      JOIN AP ON (AP.id = ac.trans_id )
-     JOIN chart c ON (c.id = ac.chart_id AND pos_ustva NOT LIKE '')
+     JOIN chart c ON (c.id = ac.chart_id)
+     LEFT JOIN taxkeys tk ON (
+       tk.id = (
+         SELECT id FROM taxkeys 
+         WHERE chart_id=ac.chart_id 
+           AND taxkey_id=ac.taxkey 
+           AND startdate <= COALESCE(AP.transdate)
+         ORDER BY startdate DESC LIMIT 1
+       )
+     )
      WHERE
        1=1
        $APwhere
        $dpt_where
        $project
-     GROUP BY pos_ustva
+     GROUP BY tk.pos_ustva
 
  UNION -- alle Ausgaben und Einnahmen direkter gl Buchungen erfassen
 
    SELECT sum
-   (
-     CASE WHEN c.link LIKE '%AR%' THEN ac.amount * -1
-          WHEN c.link LIKE '%AP%' THEN ac.amount * 1
-     END
-   ) AS amount, c.$category
+   ( - ac.amount) AS amount, 
+   tk.pos_ustva
    FROM acc_trans ac
    JOIN chart c ON (c.id = ac.chart_id)
    JOIN gl a ON (a.id = ac.trans_id)
+   LEFT JOIN taxkeys tk ON (
+     tk.id = (
+       SELECT id FROM taxkeys 
+       WHERE chart_id=ac.chart_id 
+         AND taxkey_id=ac.taxkey 
+         
+         AND startdate <= COALESCE(ac.transdate)
+       ORDER BY startdate DESC LIMIT 1
+     )
+   )
+
    $dpt_join
    WHERE $where
    $dpt_from
-   AND NOT (c.link = 'AR' OR c.link = 'AP')
    $project
-   GROUP BY c.$category
+   GROUP BY tk.pos_ustva
    |;
 
   } else {