Improve work without category
[infodrom.org/service.infodrom.org] / src / InfoCon / buch / pay.wml
1 #include <infocon.style>
2
3 <page func=InfoCon title="Buchhaltung">
4
5 <?
6   function assert_date($date)
7   {
8     if (strpos($date, '.') !== false) {
9       $d = explode('.', $date);
10       $date = sprintf('%04d-%02d-%02d', $d[2] ? $d[2] : date('Y'), $d[1], $d[0]);
11     }
12     return $date;
13   }
14
15   function dig ($dbh, $table, $id)
16   {
17     $query = sprintf ("SELECT date,description,price FROM %s WHERE nr = %d",
18                       $table, $id);
19     $sth = pg_exec ($dbh, $query);
20
21     if (pg_NumRows ($sth) > 0) {
22       $row = pg_fetch_array ($sth, 0);
23
24       $cur = "&euro;";
25       if ($table == "sales_dm") {
26         $cur = "DM";
27       }
28       $date = substr ($row['date'],6,2) . "." . substr ($row['date'],4,2) . "." . substr ($row['date'],0,4);
29       return sprintf ("<br>#%d: %s %s (%.2f&nbsp;%s)",
30                      $id, $date, $row['description'], $row['price'], $cur);
31     }
32     return '';
33   }
34
35   $dbh = pg_pconnect ("<dbhost>", "<dbport>", "<dbname>")
36          or die("Unable to connect to SQL server");
37
38   $query = "SELECT nr FROM sales_dm WHERE paid = 0 ORDER BY date";
39   $sth = pg_exec ($dbh, $query);
40
41   # Collect all to be paid entries
42   #
43   <protect>for ($nr=0; $nr < pg_NumRows ($sth); $nr++) {</protect>
44     $row = pg_fetch_array ($sth, $nr);
45
46     $v = sprintf ("date_%d", $row['nr']);
47     if (strlen($_POST[$v])) {
48       $paydm[] = $row['nr'];
49     }
50   }
51
52   $query = "SELECT nr FROM sales WHERE paid = 0 ORDER BY date";
53   $sth = pg_exec ($dbh, $query);
54
55   # Collect all to be paid entries
56   #
57   <protect>for ($nr=0; $nr <pg_NumRows ($sth); $nr++) {</protect>
58     $row = pg_fetch_array ($sth, $nr);
59
60     $v = sprintf ("date_%d", $row['nr']);
61     if (strlen($_POST[$v])) {
62       $pay[] = $row['nr'];
63     }
64   }
65
66   # Now pay them
67   if (count($paydm) > 0) {
68     echo ("Folgende Buchungen werden bezahlt:<p>");
69     for ($i=0; $i < count ($paydm); $i++) {
70       $date = assert_date($_POST[sprintf("date_%d", $paydm[$i])]);
71       $query = sprintf ("UPDATE sales_dm SET paid=1, billing_date='%s' WHERE nr = %d",
72                         $date, $paydm[$i]);
73   
74       echo (dig ($dbh, "sales_dm", $paydm[$i]));
75       $sth = pg_exec ($dbh, $query);
76     }
77   }
78
79   if (count($pay) > 0) {
80     if (count($paydm) == 0) {
81       echo ("Folgende Buchungen werden bezahlt:<p>");
82     }
83     for ($i=0; $i < count ($pay); $i++) {
84       $date = assert_date($_POST[sprintf("date_%d", $pay[$i])]);
85       $query = sprintf ("UPDATE sales SET paid=1, billing_date='%s' WHERE nr = %d",
86                         $date, $pay[$i]);
87   
88       echo (dig ($dbh, "sales", $pay[$i]));
89       $sth = pg_exec ($dbh, $query);
90     }
91   }
92
93 ?>
94 </page>
95
96 # Local variables:
97 # mode: text
98 # mode: auto-fill
99 # end: