Support assigning a billing_date when paying a statement
authorJoey Schulze <joey@infodrom.org>
Wed, 13 Jul 2016 20:02:10 +0000 (22:02 +0200)
committerJoey Schulze <joey@infodrom.org>
Wed, 13 Jul 2016 20:02:10 +0000 (22:02 +0200)
src/InfoCon/buch/index.wml
src/InfoCon/buch/pay.wml

index a0685e2..6e2fe54 100644 (file)
@@ -1,6 +1,7 @@
 #include <infocon.style>
 
 <page func=InfoCon title="Buchhaltung">
+<calendar_init -5>
 
 <style type="text/css">
 span.in { color: green; }
@@ -8,7 +9,7 @@ span.out { color: red; }
 span.in:hover, span.out:hover { background: yellow; border: 1px solid #ccc; }
 </style>
 
-<h3>Nicht bezahlte Rechnungen</h3>
+<h3>√úbersichten</h3>
 
 <?
   $dbh = pg_pconnect ("<dbhost>", "<dbport>", "<dbname>")
@@ -62,8 +63,9 @@ span.in:hover, span.out:hover { background: yellow; border: 1px solid #ccc; }
   for ($nr=0; $nr <pg_NumRows ($sth); $nr++) {
     $row = pg_fetch_array ($sth, $nr);
     $date = substr ($row['date'],6,2) . "." . substr ($row['date'],4,2) . "." . substr ($row['date'],0,4);
-    printf (" <input type=\"checkbox\" name=\"pay_dm_%d\" value=\"1\">", $row['nr']);
-    printf ("%d. %s %s (%.2f&nbsp;DM)<br>", $row['nr'], $date, $row['description'], $row['price']);
+    printf (" <input type=\"text\" id=\"date_%d\" name=\"date_%d\" size=\"6\" value=\"\">", $row['nr'], $row['nr']);
+    printf (" <img class=\"calendar\" src=\"<root_prefix>pix/calendar.gif\" onclick=\"event.cancelBubble=true;popcalendar('date_%d');\" alt=\"\">", $row['nr']);
+    printf (" %d. %s %s (%.2f&nbsp;DM)<br>", $row['nr'], $date, $row['description'], $row['price']);
   }
 
   $query = "SELECT nr,date,description,price FROM sales WHERE paid=0 ORDER BY date,nr";
@@ -78,8 +80,9 @@ span.in:hover, span.out:hover { background: yellow; border: 1px solid #ccc; }
   for ($nr=0; $nr <pg_NumRows ($sth); $nr++) {
     $row = pg_fetch_array ($sth, $nr);
     $date = substr ($row['date'],6,2) . "." . substr ($row['date'],4,2) . "." . substr ($row['date'],0,4);
-    printf (" <input type=\"checkbox\" name=\"pay_%d\" value=\"1\">", $row['nr']);
-    printf ('<span class="%s">%d. %s %s (%.2f&nbsp;&euro;)</span><br>',
+    printf (" <input type=\"text\" id=\"date_%d\" name=\"date_%d\" size=\"6\" value=\"\">", $row['nr'], $row['nr']);
+    printf (" <img class=\"calendar\" src=\"<root_prefix>pix/calendar.gif\" onclick=\"event.cancelBubble=true;popcalendar('date_%d');\" alt=\"\">", $row['nr']);
+    printf (' <span class="%s">%d. %s %s (%.2f&nbsp;&euro;)</span><br>',
            $row['price'] < 0 ? 'out' : 'in',
            $row['nr'], $date, $row['description'], $row['price']);
   }
index 62837d5..3ccc1c8 100644 (file)
@@ -3,6 +3,15 @@
 <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",
@@ -26,7 +35,7 @@
   $dbh = pg_pconnect ("<dbhost>", "<dbport>", "<dbname>")
         or die("Unable to connect to SQL server");
 
-  $query = "SELECT nr FROM sales_dm 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
   <protect>for ($nr=0; $nr < pg_NumRows ($sth); $nr++) {</protect>
     $row = pg_fetch_array ($sth, $nr);
 
-    $v = sprintf ("pay_dm_%d", $row['nr']);
-    if (isset($_POST[$v])) {
+    $v = sprintf ("date_%d", $row['nr']);
+    if (strlen($_POST[$v])) {
       $paydm[] = $row['nr'];
     }
   }
 
-  $query = "SELECT nr FROM sales WHERE paid=0";
+  $query = "SELECT nr FROM sales WHERE paid = 0 ORDER BY date";
   $sth = pg_exec ($dbh, $query);
 
   # Collect all to be paid entries
@@ -48,8 +57,8 @@
   <protect>for ($nr=0; $nr <pg_NumRows ($sth); $nr++) {</protect>
     $row = pg_fetch_array ($sth, $nr);
 
-    $v = sprintf ("pay_%d", $row['nr']);
-    if (isset($_POST[$v])) {
+    $v = sprintf ("date_%d", $row['nr']);
+    if (strlen($_POST[$v])) {
       $pay[] = $row['nr'];
     }
   }
@@ -58,7 +67,9 @@
   if (count($paydm) > 0) {
     echo ("Folgende Buchungen werden bezahlt:<p>");
     for ($i=0; $i < count ($paydm); $i++) {
-      $query = sprintf ("UPDATE sales_dm SET paid=1 WHERE nr = %d", $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);
@@ -70,7 +81,9 @@
       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]);
   
       echo (dig ($dbh, "sales", $pay[$i]));
       $sth = pg_exec ($dbh, $query);