Allow editing of booking texts
[infodrom.org/service.infodrom.org] / src / InfoCon / buch / list.wml
1 #include <infocon.style>
2
3 <future>
4 <page func=InfoCon title="Buchhaltung">
5 <script type="text/javascript" src="<root_prefix>jquery.editable.js"></script>
6
7 <?
8   $dbh = pg_pconnect ("<dbhost>", "<dbport>", "<dbname>")
9                or die("Unable to connect to SQL server");
10
11   pg_exec ($dbh, "SET DateStyle = 'ISO'") or die("Datenbank-Abfrage!");
12
13   $table = "sales";
14
15 if ($_POST["submit"] == "List") {
16 ?>
17 <table class="smallfont border" width=100% border=0 cellpadding=1 cellspacing=1>
18 <tr class="head">
19   <th width=10%>Datum</th>
20   <th width=10%>Buchung</th>
21   <th width=10%>Kategorie</th>
22   <th width=60%>Verwendungszweck</th>
23   <th width=10%>Betrag</th>
24 </tr>
25 <?
26   if (strlen($_POST[year])) {
27     # $where[] = "date >= '$year-01-01'";
28     # $year++;
29     # $where[] = "date < '$year-01-01'";
30     $where[] = "date ~* '$_POST[year]'";
31   }
32   if (strlen($_POST[category])) {
33     $where[] = "category = '$_POST[category]'";
34   }
35   if ($_POST[input] && !$_POST[output]) {
36     $where[] = "price > 0.0";
37   } elseif ($_POST[output] && !$_POST[input]) {
38     $where[] = "price < 0.0";
39   }
40
41   $query = "SELECT nr,date,billing_date,category,description,price FROM $table ";
42   if (count($where) > 0) {
43     $query .= " WHERE " . implode ($where, " AND ");
44   }
45   $query .= " ORDER BY date,oid";
46   $sth = pg_exec ($dbh, $query) or die("Datenbank-Abfrage!");
47
48   $sum = 0.0;
49   $color = 0;
50   for ($nr=0; $nr < pg_NumRows ($sth); $nr++) {
51     $row = pg_fetch_array ($sth, $nr);
52
53     # $date = explode (" ", $row['date']);
54     # $date = explode ("-", $date[0]);
55     # $date = sprintf ("%d.%d.%d", $date[2], $date[1], $date[0]);
56     $date = substr ($row['date'],6,2) . "." . substr ($row['date'],4,2) . "." . substr ($row['date'],0,4);
57     if ($row['billing_date'])
58       $billing_date = substr ($row['billing_date'],8,2) . "." . substr ($row['billing_date'],5,2) . "." . substr ($row['billing_date'],0,4);
59     else
60       $billing_date = '&nbsp;';
61
62     printf ("<tr class=\"t%d\">", $color);
63     printf ("<td width=\"10%%\" align=\"right\">%s</td>", $date);
64     printf ("<td width=\"10%%\" align=\"right\">%s</td>", $billing_date);
65     printf ("<td width=\"10%%\" align=\"center\">%s</td>", $row['category']);
66     printf ("<td width=\"0%%\"><span class=\"edit\" route=\"Sales/EditDescription\" item_id=\"%d\">%s</span></td>",
67       $row['nr'], $row['description']);
68     printf ("<td width=\"10%%\" align=\"right\">%5.2f</td>", $row['price']);
69     $sum += $row['price'];
70     echo ("</tr>");
71     $color = !$color;
72   }
73   printf ("<tr class=\"t%d\">", $color);
74   echo ("<td width=\"85%\" colspan=\"4\"><b>Summe</b></td>");
75   printf ("<td width=\"15%%\" align=\"right\"><b>%5.2f</b></td>", $sum);
76   echo ("</tr>");
77   echo ("</table>");
78
79 } elseif ($_POST["submit"] == "Overview") {
80
81     $query = "SELECT DISTINCT category FROM $table ";
82     if (strlen($_POST[year]))
83       $query .= "WHERE date ~* '$_POST[year]'";
84
85     $sth = pg_exec ($dbh, $query); // or die("Datenbank-Abfrage!");
86
87     for ($nr=0; $nr < pg_NumRows ($sth); $nr++) {
88       $row = pg_fetch_array ($sth, $nr);
89       $catz[] = $row['category'];
90     }
91
92     if (count ($catz) > 0) {
93       echo ("<h3>Nach Kategorien sortiert</h3>");
94       echo ("<div align=\"center\"><table class=\"smallfont border\" width=\"60%\" cellpadding=\"1\" cellspacing=\"1\" summary=\"\">");
95       echo ("<tr class=\"head\">"
96            ."<th width=\"40%\">Kategorie</th>"
97            ."<th width=\"20%\">Einnahmen</th>"
98            ."<th width=\"20%\">Ausgaben</th>"
99            ."<th width=\"20%\">Summe</th></tr>");
100       sort ($catz);
101
102       $color = 0;
103       $sum_output = 0;
104       for ($i=0; $i < count ($catz); $i++) {
105         $query = sprintf ("SELECT SUM (price) FROM $table WHERE category = '%s' AND price > 0.0", $catz[$i]);
106
107         if (strlen($_POST[year])) {
108           $query .= " AND date ~* '$_POST[year]'";
109         }
110         $sth = pg_exec ($dbh, $query); // or die("Datenbank-Abfrage!");
111         $row = pg_fetch_array ($sth, 0);
112         $input = $row[0]; $sum_input += $input;
113         $query = sprintf ("SELECT SUM (price) FROM $table WHERE category = '%s' AND price < 0.0", $catz[$i]);
114         if (strlen($_POST[year])) {
115           $query .= " AND date ~* '$_POST[year]'";
116         }
117         $sth = pg_exec ($dbh, $query); // or die("Datenbank-Abfrage!");
118         $row = pg_fetch_array ($sth, 0);
119         $output = -$row[0]; $sum_output += $output;
120
121         $sum = $input - $output;
122         printf ("<tr class=\"t%d\"><td width=\"40%%\">%s</td>"
123                ."<td align=\"right\" width=\"20%%\">%.2f</td>"
124                ."<td align=\"right\" width=\"20%%\">%.2f</td>"
125                ."<td align=\"right\" width=\"20%%\" class=\"%s\">%.2f</td></tr>",
126                 $color, $catz[$i], $input, $output, $sum>0?'in':'out', $sum);
127         $color = !$color;
128       }
129
130       $sum = $sum_input - $sum_output;
131       printf ("<tr class=\"t%d\"><td width=\"40%%\"><b>Summe</b></td>"
132              ."<td align=\"right\" width=\"20%%\"><b>%.2f</b></td>"
133              ."<td align=\"right\" width=\"20%%\"><b>%.2f</b></td>"
134              ."<td align=\"right\" width=\"20%%\" class=\"%s\"><b>%.2f</b></td></tr>",
135               $color, $sum_input, $sum_output, $sum>0?'in':'out', $sum);
136
137       echo ("</table></div>");
138
139     }
140   } elseif ($_POST["submit"] == "Tally") {
141     if (strlen($_POST[year]))
142       $where = "date ~* '$_POST[year]' AND ";
143     else
144       $where = '';
145
146     if (strlen($_POST[year]))
147       printf("<h3>Jahresabrechnung %d</h3>", $_POST[year]);
148     else
149       echo ("<h3>Abrechnung</h3>");
150
151     $input = tally ($dbh, "Einnahmen", $where, 'in');
152     echo '<div style="padding-top: 15px;"></div>';
153     $output = tally ($dbh, "Ausgaben", $where, 'out');
154
155     if (strlen($_POST[year])) {
156       echo '<div style="padding-top: 15px;"></div>';
157       echo('<table class="smallfont border" cellspacing="1" cellpadding="1">');
158       $foo = $input["tax"] - $output["tax"];
159       printf('<tr><td>%s</td><td align="right">%.2f&nbsp;&euro;</td><td>(%s)</td></tr>',
160              'Summe Steuern', $foo, $foo>0?'Nachzahlung':'R├╝ckzahlung');
161       printf('<tr><td>%s</td><td align="right">%.2f&nbsp;&euro;</td><td>&nbsp;</td></tr>',
162              'Summe netto', $input["netto"] - $output["netto"]);
163       $foo = $input["brutto"] - $output["brutto"];
164       printf('<tr><td>%s</td><td align="right">%.2f&nbsp;&euro;</td><td>(%s)</td></tr>',
165              'Summe brutto', $foo, $foo>0?'Gewinn':'Verlust');
166       if (($privat = privat($dbh, $where)))
167         printf('<tr><td>%s</td><td align="right">%.2f&nbsp;&euro;</td><td>&nbsp;</td></tr>',
168                'Privatentnahme', $privat);
169       echo('</table>');
170     }
171   }
172
173 function privat ($dbh, $where)
174 {
175   $query = "SELECT sum(price) * -1 AS privat"
176     . " FROM sales WHERE " . $where
177     . " category = 'privat'";
178
179   error_log($query);
180   $sth = pg_exec ($dbh, $query); // or die("Datenbank-Abfrage!");
181   if (pg_NumRows($sth) != 1)
182     return 0;
183
184   $row = pg_fetch_array ($sth, $nr);
185   return $row['privat'];
186 }
187
188 function tally ($dbh, $head, $where, $class)
189 {
190   echo ("<div align=\"center\"><table class=\"smallfont border\" width=\"60%\" cellpadding=\"1\" cellspacing=\"1\" summary=\"\">");
191   printf ("<tr class=\"head\"><th colspan=\"4\" align=\"left\"><strong>%s</strong></td></tr>", $head);
192   printf ("<tr class=\"head\">"
193           ."<th width=\"10%%\">USt.</th>"
194           ."<th width=\"30%%\">Steuer</th>"
195           ."<th width=\"30%%\">netto</th>"
196           ."<th width=\"30%%\">brutto</th></tr>");
197   
198   $query = "SELECT tax_percent,sum(tax_assigned) AS tax,sum(price-tax_assigned) AS netto,sum(price) AS brutto"
199     . " FROM sales WHERE " . $where
200     . ($class=='in'?"price > 0.0":"price < 0.0")
201     . " AND category <> 'privat' "
202     . " GROUP BY tax_percent ORDER BY tax_percent";
203
204   $color = 0;
205   $sum = array();
206
207   $sth = pg_exec ($dbh, $query); // or die("Datenbank-Abfrage!");
208   for ($nr=0; $nr < pg_NumRows ($sth); $nr++) {
209     $row = pg_fetch_array ($sth, $nr);
210
211     if ($row["brutto"] < 0) {
212       $row["tax"] = -$row["tax"];
213       $row["netto"] = -$row["netto"];
214       $row["brutto"] = -$row["brutto"];
215     }
216
217     printf ("<tr class=\"t%d\"><td align=\"right\" width=\"10%%\">%d%%</td>"
218             ."<td align=\"right\" width=\"30%%\">%.2f</td>"
219             ."<td align=\"right\" width=\"30%%\">%.2f</td>"
220             ."<td align=\"right\" width=\"30%%\">%.2f</td></tr>",
221             $color,
222             $row["tax_percent"], $row["tax"], $row["netto"], $row["brutto"]);
223     $sum["tax"] += $row["tax"];
224     $sum["netto"] += $row["netto"];
225     $sum["brutto"] += $row["brutto"];
226     $color = !$color;
227   }
228
229   printf ("<tr class=\"t%d\"><td width=\"10%%\"><b>Sum</b></td>"
230           ."<td align=\"right\" width=\"30%%\"><b>%.2f</b></td>"
231           ."<td align=\"right\" width=\"30%%\"><b>%.2f</b></td>"
232           ."<td align=\"right\" width=\"30%%\" class=\"%s\"><b>%.2f</b></td></tr>",
233           $color,
234           $sum["tax"], $sum["netto"], $class, $sum["brutto"]);
235
236   echo ("</table></div>\n");
237
238   return $sum;
239 }
240
241 ?>
242 <div style="padding-top: 5px;"></div>
243
244 <script type="text/javascript">
245 <protect>
246 $(function(){
247     make_editable('table.smallfont tr span.edit');
248 });
249 </protect>
250 </script>
251 </page>
252
253 # Local variables:
254 # mode: php
255 # end: