Move list table to class / new AJAX framework
[infodrom.org/service.infodrom.org] / src / InfoCon / account / list.wml
index 2b02c9e..3db6613 100644 (file)
 #include <infocon.style>
+#include <phptools.inc>
+#include "account.inc"
 
-<page func=InfoCon title="Kontoführung">
-
-<h3 class=bar align=center><font face="Helvetica,Arial"> - <?
-  $both = explode (":", $blzkto);
-  printf ("BLZ %s, Konto %s", $both[0], $both[1]);
-?> - </font></h3>
-
-<table class=font width=100% border=0 cellpadding=2 cellspacing=0>
-<tr bgcolor=#<colh>>
-  <th width=10%><font face="Helvetica,Arial">Datum</font></th>
-  <th width=10%><font face="Helvetica,Arial">Kategorie</font></th>
-  <th width=70%><font face="Helvetica,Arial">Verwendungszweck</font></th>
-  <th width=10%><font face="Helvetica,Arial">Betrag</font></th>
-</tr>
-<?
-  $dbh = pg_pconnect ("<dbhost>", "<dbport>", "<dbname>")
-              or die("Unable to connect to SQL server");
-
-  pg_exec ($dbh, "SET DateStyle = 'ISO'") or die("Datenbank-Abfrage!");
-
-  $table = "account";
-  $value = "value_eur";
-  $add = '';
-  if ((strlen ($currency) > 0) && ($currency == "dm")) {
-    $table = "account_dm";
-    $value = "value_dm";
-    $add = "&cur=dm";
-  }
-
-  $where[] = "blz_kto = '$blzkto'";
-  if (strlen($year)) {
-    $where[] = sprintf ("datum >= '%04d-01-01'", $year);
-    $year++;
-    $where[] = sprintf ("datum < '%04d-01-01'", $year);
-  }
-  if (strlen($statement)) {
-    $where[] = "statement = '$statement'";
-  }
-  if (strlen($category)) {
-    $where[] = "category = '$category'";
-  }
-  if (strlen($keyword)) {
-    $where[] = "descr ~* '$keyword'";
-  }
-  if (strlen($from_to)) {
-    $where[] = "from_to = '$from_to'";
-  }
-  if ($input && !$output) {
-    $where[] = "$value > 0.0";
-  } elseif ($output && !$input) {
-    $where[] = "$value < 0.0";
-  }
-
-  $query = "SELECT datum,oid,category,descr,$value FROM $table WHERE "
-        . implode ($where, " AND ")
-        . " ORDER BY datum,oid";
-  $sth = pg_exec ($dbh, $query) or die("Datenbank-Abfrage!");
-
-  $sum = 0.0;
-  $sum_in = 0.0;
-  $sum_out = 0.0;
-  $color = "<cold>";
-  for ($nr=0; $nr < pg_NumRows ($sth); $nr++) {
-    $row = pg_fetch_array ($sth, $nr);
-    $color = $color=="<cold>"?"<coln>":"<cold>";
-
-    $descr = explode ("
-", $row['descr']);
-    $date = explode (" ", $row['datum']);
-    $date = explode ("-", $date[0]);
-    $date = sprintf ("%d.%d.%d", $date[2], $date[1], $date[0]);
-
-    printf ("<tr bgcolor=\"#%s\">", $color);
-    printf ("<td width=\"10%%\" align=\"right\"><font face=\"Helvetica,Arial\">%s</font></td>", $date);
-    printf ("<td width=\"10%%\" align=\"center\"><font face=\"Helvetica,Arial\">%s</font></td>", $row['category']);
-    printf ("<td width=\"70%%\"><font face=\"Helvetica,Arial\"><a href=\"edit.php3?oid=%d%s\">%s</a></font></td>",
-           $row['oid'], $add, $descr[0]);
-    printf ("<td width=\"10%%\" align=\"right\"><font face=\"Helvetica,Arial\">%5.2f</font></td>", $row[$value]);
-    $sum += $row[$value];
-    if ($row[$value] > 0) {
-      $sum_in += $row[$value];
+<?php
+function filter_account()
+{
+    if ((strlen($_POST['currency']) > 0) && ($_POST['currency'] == "dm")) {
+       $account = new AccountingDM();
     } else {
-      $sum_out += $row[$value];
-    }
-    echo ("</tr>");
-  }
-    echo ("<tr>");
-    echo ("<th width=\"90%\" colspan=\"3\"><font face=\"Helvetica,Arial\">Summe</font></th>");
-    printf ("<th width=\"10%%\" align=\"right\"><font face=\"Helvetica,Arial\">%5.2f</font></th>", $sum);
-    echo ("</tr>");
-    if (strlen($statement)) {
-      echo ("<tr>");
-      echo ("<th width=\"90%\" colspan=\"3\"><font face=\"Helvetica,Arial\">Summe Einnahmen</font></th>");
-      printf ("<th width=\"10%%\" align=\"right\"><font face=\"Helvetica,Arial\">%5.2f</font></th>", $sum_in);
-      echo ("</tr>");
-      echo ("<tr>");
-      echo ("<th width=\"90%\" colspan=\"3\"><font face=\"Helvetica,Arial\">Summe Ausgaben</font></th>");
-      printf ("<th width=\"10%%\" align=\"right\"><font face=\"Helvetica,Arial\">%5.2f</font></th>", $sum_out*-1);
-      echo ("</tr>");
+       $account = new Accounting();
     }
 
+    return $account->filterTable($_POST);
+}
+
+if (!empty($_POST['ajax']) && $_POST['ajax'] == 1) {
+    echo utf8_encode(filter_account());
+    exit;
+}
+
 ?>
+
+<page func=InfoCon title="Kontoführung">
+
+<calendar_init -5>
+<account_heading>
+<form_to_yyyymmdd>
+
+<style type="text/css">
+div#filter_popup {
+    background: white;
+    border: 1px solid #CCC;
+    height:auto;
+    width:340px;
+    position:absolute;
+}
+div#filter_title {
+    width: 100%;
+    cursor: move;
+    background: #EEE;
+    margin-bottom: 5px;
+    font-weight: bold;
+}
+</style>
+<table class="border smallfont yellow-hover" width=100% border=0 cellpadding=0 cellspacing=1>
+<thead>
+<tr class=head>
+  <th width=10%>Datum</th>
+  <th width=10%>Kategorie</th>
+  <th width=70%>Verwendungszweck</th>
+  <th width=10%>Betrag</th>
+</tr>
+</thead>
+<tbody>
+<?=(count($_GET)?'':filter_account())?>
+</tbody>
 </table><p>
 
-<? printf ("<a href=\"edit.php3?blzkto=%s\">Neuer Eintrag</a>", $blzkto); ?>
+<protect><script type="text/javascript">
+$(function(){
+    $('table.border tr').not('.head').click(function(){
+       $(this).toggleClass('highlight');
+       if ($(this).hasClass('highlight'))
+           $(this).css('backgroundColor','#add8e6');
+       else
+           $(this).css('backgroundColor','');
+    });
+    $('body').append('<script type="text/javascript" src="../../jquery.udraggable.js"><\/script>');
+    $('body').append('<script type="text/javascript" src="../../jquery.event.ue.js"><\/script>');
+    $('body').append('<script type="text/javascript" src="../../jquery.editable.js"><\/script>');
+});
+
+//+ Jonas Raoni Soares Silva
+//@ http://jsfromhell.com/geral/utf-8 [rev. #1]
+
+UTF8 = {
+        encode: function(s){
+                for(var c, i = -1, l = (s = s.split("")).length, o = String.fromCharCode; ++i < l;
+                        s[i] = (c = s[i].charCodeAt(0)) >= 127 ? o(0xc0 | (c >>> 6)) + o(0x80 | (c & 0x3f)) : s[i]
+                );
+                return s.join("");
+        },
+        decode: function(s){
+                for(var a, b, i = -1, l = (s = s.split("")).length, o = String.fromCharCode, c = "charCodeAt"; ++i < l;
+                        ((a = s[i][c](0)) & 0x80) &&
+                        (s[i] = (a & 0xfc) == 0xc0 && ((b = s[i + 1][c](0)) & 0xc0) == 0x80 ?
+                        o(((a & 0x03) << 6) + (b & 0x3f)) : o(128), s[++i] = "")
+                );
+                return s.join("");
+        }
+};
+
+function filter_popup()
+{
+    if (!$('#filter_popup form input').length) {
+       $.get('query.php',
+             window.location.search.substr(1)+'&ajax=1',
+             function(data) {
+                 var text = '<style type="text/css">';
+                 text += '#fc { z-index: 10; }';
+                 $(data).find('style').each(function(i,e){
+                     text += $(this).html();
+                 });
+                 text += '</style>';
+                 text += $(data).find('form').html();
+                 $('#filter_popup form').html(text);
+
+                 $('#filter_popup').udraggable({
+                     'handle': 'div#filter_title'
+                 }).css('top', '70px').css('left', '103px');
+
+                 $('#filter_popup form input,#filter_popup form select').not('input.button').change(function(e){
+                     $.invoke('Accounting/Filter',
+                              $('#filter_popup form').serialize(),
+                            function(data){
+                                $('table.border tbody').html(data.table);
+                                make_editable('table.smallfont tr span');
+                            });
+                     return false;
+                 });
+
+                 $('#filter_popup form input.button[type="submit"]').click(function(e){
+                     $.invoke('Accounting/Filter',
+                              $('#filter_popup form').serialize(),
+                            function(data){
+                                $('table.border tbody').html(data.table);
+                                $('#filter_popup').hide();
+                                make_editable('table.smallfont tr span');
+                            });
+                     return false;
+                 });
+         });
+    }
+
+    if ($('#filter_popup:visible').length)
+        $('#filter_popup').hide();
+    else
+        $('#filter_popup').show();
+
+    return false;
+}
 
+</script></protect>
+<div id="filter_popup" style="display:none;">
+<div id="filter_title">Filter setzen</div>
+<div style="padding:5px;">
+<form id="filter_form"></form>
+</div>
+</div>
 </page>
 
 # Local variables: