Improve work without category
[infodrom.org/service.infodrom.org] / src / InfoCon / buch / pay.wml
index aca00a3..3ccc1c8 100644 (file)
@@ -3,30 +3,89 @@
 <page func=InfoCon title="Buchhaltung">
 
 <?
+  function assert_date($date)
+  {
+    if (strpos($date, '.') !== false) {
+      $d = explode('.', $date);
+      $date = sprintf('%04d-%02d-%02d', $d[2] ? $d[2] : date('Y'), $d[1], $d[0]);
+    }
+    return $date;
+  }
+
+  function dig ($dbh, $table, $id)
+  {
+    $query = sprintf ("SELECT date,description,price FROM %s WHERE nr = %d",
+                     $table, $id);
+    $sth = pg_exec ($dbh, $query);
+
+    if (pg_NumRows ($sth) > 0) {
+      $row = pg_fetch_array ($sth, 0);
+
+      $cur = "&euro;";
+      if ($table == "sales_dm") {
+        $cur = "DM";
+      }
+      $date = substr ($row['date'],6,2) . "." . substr ($row['date'],4,2) . "." . substr ($row['date'],0,4);
+      return sprintf ("<br>#%d: %s %s (%.2f&nbsp;%s)",
+                    $id, $date, $row['description'], $row['price'], $cur);
+    }
+    return '';
+  }
+
   $dbh = pg_pconnect ("<dbhost>", "<dbport>", "<dbname>")
         or die("Unable to connect to SQL server");
 
-  $query = "SELECT nr FROM sales WHERE paid=0";
+  $query = "SELECT nr FROM sales_dm WHERE paid = 0 ORDER BY date";
   $sth = pg_exec ($dbh, $query);
 
   # Collect all to be paid entries
   #
-  for ($nr=0; $nr <pg_NumRows ($sth); $nr++) {
+  <protect>for ($nr=0; $nr < pg_NumRows ($sth); $nr++) {</protect>
     $row = pg_fetch_array ($sth, $nr);
 
-    $v = sprintf ("pay_%d", $row['nr']);
-    if (${$v}) {
+    $v = sprintf ("date_%d", $row['nr']);
+    if (strlen($_POST[$v])) {
+      $paydm[] = $row['nr'];
+    }
+  }
+
+  $query = "SELECT nr FROM sales WHERE paid = 0 ORDER BY date";
+  $sth = pg_exec ($dbh, $query);
+
+  # Collect all to be paid entries
+  #
+  <protect>for ($nr=0; $nr <pg_NumRows ($sth); $nr++) {</protect>
+    $row = pg_fetch_array ($sth, $nr);
+
+    $v = sprintf ("date_%d", $row['nr']);
+    if (strlen($_POST[$v])) {
       $pay[] = $row['nr'];
     }
   }
 
   # Now pay them
-  if (count ($pay)>0) {
+  if (count($paydm) > 0) {
     echo ("Folgende Buchungen werden bezahlt:<p>");
+    for ($i=0; $i < count ($paydm); $i++) {
+      $date = assert_date($_POST[sprintf("date_%d", $paydm[$i])]);
+      $query = sprintf ("UPDATE sales_dm SET paid=1, billing_date='%s' WHERE nr = %d",
+                       $date, $paydm[$i]);
+  
+      echo (dig ($dbh, "sales_dm", $paydm[$i]));
+      $sth = pg_exec ($dbh, $query);
+    }
+  }
+
+  if (count($pay) > 0) {
+    if (count($paydm) == 0) {
+      echo ("Folgende Buchungen werden bezahlt:<p>");
+    }
     for ($i=0; $i < count ($pay); $i++) {
-      $query = sprintf ("UPDATE sales SET paid=1 WHERE nr = %d", $pay[$i]);
+      $date = assert_date($_POST[sprintf("date_%d", $pay[$i])]);
+      $query = sprintf ("UPDATE sales SET paid=1, billing_date='%s' WHERE nr = %d",
+                       $date, $pay[$i]);
   
-      // printf ("%s<br>", $query);
+      echo (dig ($dbh, "sales", $pay[$i]));
       $sth = pg_exec ($dbh, $query);
     }
   }
@@ -37,5 +96,4 @@
 # Local variables:
 # mode: text
 # mode: auto-fill
-# mode: iso-accents
 # end: