Browse code

invoice: only update invoices that are not payed yet

Bernd Wurst authored on27/08/2021 06:31:00
Showing1 changed files
... ...
@@ -252,8 +252,10 @@ function sepamandat($name, $adresse, $iban, $bankname, $bic, $gueltig_ab)
252 252
                 ":today" => $today, ":gueltig_ab" => $gueltig_ab, ":name" => $name, ":adresse" => $adresse,
253 253
                 ":iban" => $iban, ":bic" => $bic, ":bankname" => $bankname)
254 254
     );
255
-    db_query("UPDATE kundendaten.ausgestellte_rechnungen SET abbuchung=1 WHERE kunde = :cid AND datum >= :gueltig_ab",
256
-        array(":cid" => $cid, ":gueltig_ab" => $gueltig_ab));
255
+    db_query(
256
+        "UPDATE kundendaten.ausgestellte_rechnungen SET abbuchung=1 WHERE kunde = :cid AND datum >= :gueltig_ab and bezahlt=0",
257
+        array(":cid" => $cid, ":gueltig_ab" => $gueltig_ab)
258
+    );
257 259
 }
258 260
 
259 261
 
Browse code

set abbuchung=1 for old invoices when a new SEPA mandate is valid in the past.

Bernd Wurst authored on24/08/2021 08:44:14
Showing1 changed files
... ...
@@ -252,6 +252,8 @@ function sepamandat($name, $adresse, $iban, $bankname, $bic, $gueltig_ab)
252 252
                 ":today" => $today, ":gueltig_ab" => $gueltig_ab, ":name" => $name, ":adresse" => $adresse,
253 253
                 ":iban" => $iban, ":bic" => $bic, ":bankname" => $bankname)
254 254
     );
255
+    db_query("UPDATE kundendaten.ausgestellte_rechnungen SET abbuchung=1 WHERE kunde = :cid AND datum >= :gueltig_ab",
256
+        array(":cid" => $cid, ":gueltig_ab" => $gueltig_ab));
255 257
 }
256 258
 
257 259
 
Browse code

set admin address as sender for messages / use company name if defined

Bernd Wurst authored on17/06/2021 15:58:21
Showing1 changed files
... ...
@@ -354,8 +354,12 @@ function save_more_storage($items, $storage)
354 354
     foreach ($queries as $q) {
355 355
         db_query($q[0], $q[1]);
356 356
     }
357
+    $name = $_SESSION['customerinfo']['company'];
358
+    if (! $name && $_SESSION['customerinfo']['name']) {
359
+        $name = $_SESSION['customerinfo']['name'];
360
+    }
357 361
     $allstorage = $oldcustomerquota+$storage;
358 362
     $emailaddr = $_SESSION['customerinfo']['email'];
359
-    $message = "Hallo,\n\nsoeben wurde im Webinterface von ".config('company_name')." eine Bestellung über zusätzlichen Speicherplatz ausgeführt.\nSollten Sie diese Bestellung nicht getätigt haben, antworten Sie bitte auf diese E-Mail um unseren Support zu erreichen.\n\nBei dieser Bestellung wurden {$storage} MB zusätzlicher Speicherplatz bestellt. Ihnen stehen ab sofort insgesamt {$allstorage} MB zur Verfügung.\n\nIhre Kundennummer: {$_SESSION['customerinfo']['customerno']} ({$_SESSION['customerinfo']['name']})\n";
363
+    $message = "Hallo,\n\nsoeben wurde im Webinterface von ".config('company_name')." eine Bestellung über zusätzlichen Speicherplatz ausgeführt.\nSollten Sie diese Bestellung nicht getätigt haben, antworten Sie bitte auf diese E-Mail um unseren Support zu erreichen.\n\nBei dieser Bestellung wurden {$storage} MB zusätzlicher Speicherplatz bestellt. Ihnen stehen ab sofort insgesamt {$allstorage} MB zur Verfügung.\n\nIhre Kundennummer: {$_SESSION['customerinfo']['customerno']} ({$name})\n";
360 364
     send_mail($emailaddr, 'Auftragsbestätigung: Mehr Speicherplatz bei schokokeks.org', $message);
361 365
 }
Browse code

Fix codingstyle

Hanno authored on27/10/2019 08:54:14
Showing1 changed files
... ...
@@ -251,7 +251,7 @@ function sepamandat($name, $adresse, $iban, $bankname, $bic, $gueltig_ab)
251 251
         array(":referenz" => $referenz, ":glaeubiger_id" => $glaeubiger_id, ":cid" => $cid,
252 252
                 ":today" => $today, ":gueltig_ab" => $gueltig_ab, ":name" => $name, ":adresse" => $adresse,
253 253
                 ":iban" => $iban, ":bic" => $bic, ":bankname" => $bankname)
254
-  );
254
+    );
255 255
 }
256 256
 
257 257
 
Browse code

fix encoding mail headers and body as quoted printable

Bernd Wurst authored on20/10/2019 12:02:54
Showing1 changed files
... ...
@@ -357,5 +357,5 @@ function save_more_storage($items, $storage)
357 357
     $allstorage = $oldcustomerquota+$storage;
358 358
     $emailaddr = $_SESSION['customerinfo']['email'];
359 359
     $message = "Hallo,\n\nsoeben wurde im Webinterface von ".config('company_name')." eine Bestellung über zusätzlichen Speicherplatz ausgeführt.\nSollten Sie diese Bestellung nicht getätigt haben, antworten Sie bitte auf diese E-Mail um unseren Support zu erreichen.\n\nBei dieser Bestellung wurden {$storage} MB zusätzlicher Speicherplatz bestellt. Ihnen stehen ab sofort insgesamt {$allstorage} MB zur Verfügung.\n\nIhre Kundennummer: {$_SESSION['customerinfo']['customerno']} ({$_SESSION['customerinfo']['name']})\n";
360
-    mail($emailaddr, 'Auftragsbestätigung: Mehr Speicherplatz bei schokokeks.org', $message, "X-schokokeks-org-message: notify\nFrom: ".config('company_name').' <'.config('adminmail').">\nBcc: ".config('adminmail')."\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\n");
360
+    send_mail($emailaddr, 'Auftragsbestätigung: Mehr Speicherplatz bei schokokeks.org', $message);
361 361
 }
Browse code

Update codingstyle according to latest PHP CS Fixer 2.14.2

Hanno authored on28/03/2019 18:56:56
Showing1 changed files
... ...
@@ -247,8 +247,8 @@ function sepamandat($name, $adresse, $iban, $bankname, $bic, $gueltig_ab)
247 247
 
248 248
     $today = date('Y-m-d');
249 249
     db_query(
250
-      "INSERT INTO kundendaten.sepamandat (mandatsreferenz, glaeubiger_id, kunde, erteilt, medium, gueltig_ab, kontoinhaber, adresse, iban, bic, bankname) VALUES (:referenz, :glaeubiger_id, :cid, :today, 'online', :gueltig_ab, :name, :adresse, :iban, :bic, :bankname)",
251
-          array(":referenz" => $referenz, ":glaeubiger_id" => $glaeubiger_id, ":cid" => $cid,
250
+        "INSERT INTO kundendaten.sepamandat (mandatsreferenz, glaeubiger_id, kunde, erteilt, medium, gueltig_ab, kontoinhaber, adresse, iban, bic, bankname) VALUES (:referenz, :glaeubiger_id, :cid, :today, 'online', :gueltig_ab, :name, :adresse, :iban, :bic, :bankname)",
251
+        array(":referenz" => $referenz, ":glaeubiger_id" => $glaeubiger_id, ":cid" => $cid,
252 252
                 ":today" => $today, ":gueltig_ab" => $gueltig_ab, ":name" => $name, ":adresse" => $adresse,
253 253
                 ":iban" => $iban, ":bic" => $bic, ":bankname" => $bankname)
254 254
   );
Browse code

codingstyle fixes

Hanno authored on28/02/2019 18:01:50
Showing1 changed files
... ...
@@ -44,7 +44,7 @@ function get_pdf($id)
44 44
 }
45 45
 
46 46
 
47
-function invoice_address($customer = null) 
47
+function invoice_address($customer = null)
48 48
 {
49 49
     $c = (int) $_SESSION['customerinfo']['customerno'];
50 50
     if ($customer != null && have_role(ROLE_SYSADMIN)) {
... ...
@@ -177,11 +177,11 @@ function get_lastschriften($mandatsreferenz)
177 177
 }
178 178
 
179 179
 
180
-function get_sepamandat($id) 
180
+function get_sepamandat($id)
181 181
 {
182 182
     $result = db_query("SELECT id, kunde, mandatsreferenz, glaeubiger_id, erteilt, medium, gueltig_ab, gueltig_bis, erstlastschrift, kontoinhaber, adresse, iban, bic, bankname FROM kundendaten.sepamandat WHERE id=? OR mandatsreferenz=?", array($id, $id));
183 183
     return $result->fetch();
184
- }
184
+}
185 185
 
186 186
 function get_sepamandate()
187 187
 {
Browse code

Erzeuge HTML als Eingabe für dompdf aus bestehenden Rechnungen aus der Datenbank

Bernd Wurst authored on29/12/2018 13:44:27
Showing1 changed files
... ...
@@ -17,6 +17,8 @@ Nevertheless, in case you use a significant part of this code, we ask (but not r
17 17
 require_once('inc/base.php');
18 18
 require_once('inc/security.php');
19 19
 
20
+use_module('contacts');
21
+require_once('contacts.php');
20 22
 
21 23
 function my_invoices()
22 24
 {
... ...
@@ -42,22 +44,46 @@ function get_pdf($id)
42 44
 }
43 45
 
44 46
 
45
-function invoice_details($id)
47
+function invoice_address($customer = null) 
46 48
 {
47 49
     $c = (int) $_SESSION['customerinfo']['customerno'];
50
+    if ($customer != null && have_role(ROLE_SYSADMIN)) {
51
+        $c = (int) $customer;
52
+    }
53
+    $result = db_query("SELECT contact_kunde, contact_rechnung FROM kundendaten.kunden WHERE id=?", array($c));
54
+    $kontakte = $result->fetch();
55
+    $kunde = get_contact($kontakte['contact_kunde'], $c);
56
+    if ($kontakte['contact_rechnung']) {
57
+        $rechnung = get_contact($kontakte['contact_rechnung'], $c);
58
+        foreach (array('company', 'name', 'address', 'zip', 'city', 'country', 'email') as $field) {
59
+            if ($rechnung[$field]) {
60
+                $kunde[$field] = $rechnung[$field];
61
+            }
62
+        }
63
+    }
64
+    // Hier ist $kunde der bereinigte Rechnungskontakt
65
+    return $kunde;
66
+}
67
+
68
+
69
+function invoice_details($id)
70
+{
48 71
     $id = (int) $id;
49
-    $result = db_query("SELECT kunde,datum,betrag,bezahlt,abbuchung FROM kundendaten.ausgestellte_rechnungen WHERE kunde=:c AND id=:id", array(":c" => $c, ":id" => $id));
72
+    $result = db_query("SELECT kunde,datum,betrag,bezahlt,sepamandat,abbuchung FROM kundendaten.ausgestellte_rechnungen WHERE id=:id", array(":id" => $id));
50 73
     if ($result->rowCount() == 0) {
51 74
         system_failure('Ungültige Rechnungsnummer oder nicht eingeloggt');
52 75
     }
53
-    return $result->fetch();
76
+    $data = $result->fetch();
77
+    if (!have_role(ROLE_SYSADMIN) && $data['kunde'] != (int) $_SESSION['customerinfo']['customerno']) {
78
+        system_failure('Ungültige Rechnungsnummer für diesen Login');
79
+    }
80
+    return $data;
54 81
 }
55 82
 
56 83
 function invoice_items($id)
57 84
 {
58
-    $c = (int) $_SESSION['customerinfo']['customerno'];
59 85
     $id = (int) $id;
60
-    $result = db_query("SELECT id, beschreibung, datum, enddatum, betrag, einheit, brutto, mwst, anzahl FROM kundendaten.rechnungsposten WHERE rechnungsnummer=:id AND kunde=:c", array(":c" => $c, ":id" => $id));
86
+    $result = db_query("SELECT id, beschreibung, datum, enddatum, betrag, einheit, brutto, mwst, anzahl FROM kundendaten.rechnungsposten WHERE rechnungsnummer=:id", array(":id" => $id));
61 87
     if ($result->rowCount() == 0) {
62 88
         system_failure('Ungültige Rechnungsnummer oder nicht eingeloggt');
63 89
     }
... ...
@@ -150,6 +176,13 @@ function get_lastschriften($mandatsreferenz)
150 176
     return $ret;
151 177
 }
152 178
 
179
+
180
+function get_sepamandat($id) 
181
+{
182
+    $result = db_query("SELECT id, kunde, mandatsreferenz, glaeubiger_id, erteilt, medium, gueltig_ab, gueltig_bis, erstlastschrift, kontoinhaber, adresse, iban, bic, bankname FROM kundendaten.sepamandat WHERE id=? OR mandatsreferenz=?", array($id, $id));
183
+    return $result->fetch();
184
+ }
185
+
153 186
 function get_sepamandate()
154 187
 {
155 188
     $cid = (int) $_SESSION['customerinfo']['customerno'];
Browse code

rename generate_qrcode_image to generate_qrcode_image_invoice to avoid name collision with totp

Hanno authored on08/09/2018 19:00:31
Showing1 changed files
... ...
@@ -81,7 +81,7 @@ function upcoming_items()
81 81
 }
82 82
 
83 83
 
84
-function generate_qrcode_image($id)
84
+function generate_qrcode_image_invoice($id)
85 85
 {
86 86
     $invoice = invoice_details($id);
87 87
     $customerno = $invoice['kunde'];
Browse code

remove whitespace in empty lines

Hanno authored on26/06/2018 23:36:40
Showing1 changed files
... ...
@@ -98,7 +98,7 @@ DE91602911200041512006
98 98
 
99 99
 
100 100
 RE '.$id.' KD '.$customerno.' vom '.$datum;
101
-  
101
+
102 102
     $descriptorspec = array(
103 103
     0 => array("pipe", "r"),  // STDIN ist eine Pipe, von der das Child liest
104 104
     1 => array("pipe", "w"),  // STDOUT ist eine Pipe, in die das Child schreibt
... ...
@@ -121,7 +121,7 @@ RE '.$id.' KD '.$customerno.' vom '.$datum;
121 121
         // Es ist wichtig, dass Sie alle Pipes schließen bevor Sie
122 122
         // proc_close aufrufen, um Deadlocks zu vermeiden
123 123
         $return_value = proc_close($process);
124
-  
124
+
125 125
         return $pngdata;
126 126
     } else {
127 127
         warning('Es ist ein interner Fehler im Webinterface aufgetreten, aufgrund dessen kein QR-Code erstellt werden kann. Sollte dieser Fehler mehrfach auftreten, kontaktieren Sie bitte die Administratoren.');
... ...
@@ -270,7 +270,7 @@ function get_customerquota()
270 270
 function save_more_storage($items, $storage)
271 271
 {
272 272
     $cid = (int) $_SESSION['customerinfo']['customerno'];
273
-  
273
+
274 274
     $queries = array();
275 275
 
276 276
     if ($storage < 1024 || $storage > 10240) {
... ...
@@ -304,7 +304,7 @@ function save_more_storage($items, $storage)
304 304
             input_error("Ungültige Daten");
305 305
             return;
306 306
         }
307
- 
307
+
308 308
         $param = array();
309 309
         foreach ($data as $k => $v) {
310 310
             $param[':'.$k] = $v;
... ...
@@ -317,7 +317,7 @@ function save_more_storage($items, $storage)
317 317
     if (count($queries) < 2) {
318 318
         system_failure("irgendwas stimmt jetzt nicht");
319 319
     }
320
-  
320
+
321 321
     foreach ($queries as $q) {
322 322
         db_query($q[0], $q[1]);
323 323
     }
Browse code

Fix coding style with php-cs-checker, see https://cs.sensiolabs.org/

Hanno authored on26/06/2018 13:58:19
Showing1 changed files
... ...
@@ -8,7 +8,7 @@ Written 2008-2018 by schokokeks.org Hosting, namely
8 8
 
9 9
 To the extent possible under law, the author(s) have dedicated all copyright and related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty.
10 10
 
11
-You should have received a copy of the CC0 Public Domain Dedication along with this software. If not, see 
11
+You should have received a copy of the CC0 Public Domain Dedication along with this software. If not, see
12 12
 http://creativecommons.org/publicdomain/zero/1.0/
13 13
 
14 14
 Nevertheless, in case you use a significant part of this code, we ask (but not require, see the license) that you keep the authors' names in place and return your changes to the public. We would be especially happy if you tell us what you're going to do with this code.
... ...
@@ -20,69 +20,74 @@ require_once('inc/security.php');
20 20
 
21 21
 function my_invoices()
22 22
 {
23
-  $c = (int) $_SESSION['customerinfo']['customerno'];
24
-  $result = db_query("SELECT id,datum,betrag,bezahlt,abbuchung,sepamandat FROM kundendaten.ausgestellte_rechnungen WHERE kunde=? ORDER BY id DESC", array($c));
25
-  $ret = array();
26
-  while($line = $result->fetch())
27
-  	array_push($ret, $line);
28
-  return $ret;
23
+    $c = (int) $_SESSION['customerinfo']['customerno'];
24
+    $result = db_query("SELECT id,datum,betrag,bezahlt,abbuchung,sepamandat FROM kundendaten.ausgestellte_rechnungen WHERE kunde=? ORDER BY id DESC", array($c));
25
+    $ret = array();
26
+    while ($line = $result->fetch()) {
27
+        array_push($ret, $line);
28
+    }
29
+    return $ret;
29 30
 }
30 31
 
31 32
 
32 33
 function get_pdf($id)
33 34
 {
34
-  $c = (int) $_SESSION['customerinfo']['customerno'];
35
-  $id = (int) $id;
36
-  $result = db_query("SELECT pdfdata FROM kundendaten.ausgestellte_rechnungen WHERE kunde=:c AND id=:id",array(":c" => $c, ":id" => $id));
37
-  if ($result->rowCount() == 0)
38
-	  system_failure('Ungültige Rechnungsnummer oder nicht eingeloggt');
39
-  return $result->fetch(PDO::FETCH_OBJ)->pdfdata;
40
-
35
+    $c = (int) $_SESSION['customerinfo']['customerno'];
36
+    $id = (int) $id;
37
+    $result = db_query("SELECT pdfdata FROM kundendaten.ausgestellte_rechnungen WHERE kunde=:c AND id=:id", array(":c" => $c, ":id" => $id));
38
+    if ($result->rowCount() == 0) {
39
+        system_failure('Ungültige Rechnungsnummer oder nicht eingeloggt');
40
+    }
41
+    return $result->fetch(PDO::FETCH_OBJ)->pdfdata;
41 42
 }
42 43
 
43 44
 
44 45
 function invoice_details($id)
45 46
 {
46
-  $c = (int) $_SESSION['customerinfo']['customerno'];
47
-  $id = (int) $id;
48
-  $result = db_query("SELECT kunde,datum,betrag,bezahlt,abbuchung FROM kundendaten.ausgestellte_rechnungen WHERE kunde=:c AND id=:id",array(":c" => $c, ":id" => $id));
49
-  if ($result->rowCount() == 0)
50
-  	system_failure('Ungültige Rechnungsnummer oder nicht eingeloggt');
51
-  return $result->fetch();
47
+    $c = (int) $_SESSION['customerinfo']['customerno'];
48
+    $id = (int) $id;
49
+    $result = db_query("SELECT kunde,datum,betrag,bezahlt,abbuchung FROM kundendaten.ausgestellte_rechnungen WHERE kunde=:c AND id=:id", array(":c" => $c, ":id" => $id));
50
+    if ($result->rowCount() == 0) {
51
+        system_failure('Ungültige Rechnungsnummer oder nicht eingeloggt');
52
+    }
53
+    return $result->fetch();
52 54
 }
53 55
 
54 56
 function invoice_items($id)
55 57
 {
56
-  $c = (int) $_SESSION['customerinfo']['customerno'];
57
-  $id = (int) $id;
58
-  $result = db_query("SELECT id, beschreibung, datum, enddatum, betrag, einheit, brutto, mwst, anzahl FROM kundendaten.rechnungsposten WHERE rechnungsnummer=:id AND kunde=:c",array(":c" => $c, ":id" => $id));
59
-  if ($result->rowCount() == 0)
60
-  	system_failure('Ungültige Rechnungsnummer oder nicht eingeloggt');
61
-  $ret = array();
62
-  while($line = $result->fetch())
63
-  array_push($ret, $line);
64
-  return $ret;
58
+    $c = (int) $_SESSION['customerinfo']['customerno'];
59
+    $id = (int) $id;
60
+    $result = db_query("SELECT id, beschreibung, datum, enddatum, betrag, einheit, brutto, mwst, anzahl FROM kundendaten.rechnungsposten WHERE rechnungsnummer=:id AND kunde=:c", array(":c" => $c, ":id" => $id));
61
+    if ($result->rowCount() == 0) {
62
+        system_failure('Ungültige Rechnungsnummer oder nicht eingeloggt');
63
+    }
64
+    $ret = array();
65
+    while ($line = $result->fetch()) {
66
+        array_push($ret, $line);
67
+    }
68
+    return $ret;
65 69
 }
66 70
 
67 71
 
68 72
 function upcoming_items()
69 73
 {
70
-  $c = (int) $_SESSION['customerinfo']['customerno'];
71
-  $result = db_query("SELECT quelle, id, anzahl, beschreibung, startdatum, enddatum, betrag, einheit, brutto, mwst FROM kundendaten.upcoming_items WHERE kunde=? ORDER BY startdatum ASC", array($c));
72
-  $ret = array();
73
-  while($line = $result->fetch())
74
-	  array_push($ret, $line);
75
-  return $ret;
74
+    $c = (int) $_SESSION['customerinfo']['customerno'];
75
+    $result = db_query("SELECT quelle, id, anzahl, beschreibung, startdatum, enddatum, betrag, einheit, brutto, mwst FROM kundendaten.upcoming_items WHERE kunde=? ORDER BY startdatum ASC", array($c));
76
+    $ret = array();
77
+    while ($line = $result->fetch()) {
78
+        array_push($ret, $line);
79
+    }
80
+    return $ret;
76 81
 }
77 82
 
78 83
 
79
-function generate_qrcode_image($id) 
84
+function generate_qrcode_image($id)
80 85
 {
81
-  $invoice = invoice_details($id);
82
-  $customerno = $invoice['kunde'];
83
-  $amount = 'EUR'.sprintf('%.2f', $invoice['betrag']);
84
-  $datum = $invoice['datum'];
85
-  $data = 'BCD
86
+    $invoice = invoice_details($id);
87
+    $customerno = $invoice['kunde'];
88
+    $amount = 'EUR'.sprintf('%.2f', $invoice['betrag']);
89
+    $datum = $invoice['datum'];
90
+    $data = 'BCD
86 91
 001
87 92
 1
88 93
 SCT
... ...
@@ -94,228 +99,230 @@ DE91602911200041512006
94 99
 
95 100
 RE '.$id.' KD '.$customerno.' vom '.$datum;
96 101
   
97
-  $descriptorspec = array(
102
+    $descriptorspec = array(
98 103
     0 => array("pipe", "r"),  // STDIN ist eine Pipe, von der das Child liest
99 104
     1 => array("pipe", "w"),  // STDOUT ist eine Pipe, in die das Child schreibt
100
-    2 => array("pipe", "w") 
105
+    2 => array("pipe", "w")
101 106
   );
102 107
 
103
-  $process = proc_open('qrencode -t PNG -o - -l M', $descriptorspec, $pipes);
108
+    $process = proc_open('qrencode -t PNG -o - -l M', $descriptorspec, $pipes);
104 109
 
105
-  if (is_resource($process)) {
106
-    // $pipes sieht nun so aus:
107
-    // 0 => Schreibhandle, das auf das Child STDIN verbunden ist
108
-    // 1 => Lesehandle, das auf das Child STDOUT verbunden ist
110
+    if (is_resource($process)) {
111
+        // $pipes sieht nun so aus:
112
+        // 0 => Schreibhandle, das auf das Child STDIN verbunden ist
113
+        // 1 => Lesehandle, das auf das Child STDOUT verbunden ist
109 114
 
110
-    fwrite($pipes[0], $data);
111
-    fclose($pipes[0]);
115
+        fwrite($pipes[0], $data);
116
+        fclose($pipes[0]);
112 117
 
113
-    $pngdata = stream_get_contents($pipes[1]);
114
-    fclose($pipes[1]);
118
+        $pngdata = stream_get_contents($pipes[1]);
119
+        fclose($pipes[1]);
115 120
 
116
-    // Es ist wichtig, dass Sie alle Pipes schließen bevor Sie
117
-    // proc_close aufrufen, um Deadlocks zu vermeiden
118
-    $return_value = proc_close($process);
121
+        // Es ist wichtig, dass Sie alle Pipes schließen bevor Sie
122
+        // proc_close aufrufen, um Deadlocks zu vermeiden
123
+        $return_value = proc_close($process);
119 124
   
120
-    return $pngdata;
121
-  } else {
122
-    warning('Es ist ein interner Fehler im Webinterface aufgetreten, aufgrund dessen kein QR-Code erstellt werden kann. Sollte dieser Fehler mehrfach auftreten, kontaktieren Sie bitte die Administratoren.');
123
-  }
125
+        return $pngdata;
126
+    } else {
127
+        warning('Es ist ein interner Fehler im Webinterface aufgetreten, aufgrund dessen kein QR-Code erstellt werden kann. Sollte dieser Fehler mehrfach auftreten, kontaktieren Sie bitte die Administratoren.');
128
+    }
124 129
 }
125 130
 
126 131
 
127
-function get_lastschrift($rechnungsnummer) {
128
-  $rechnungsnummer = (int) $rechnungsnummer;
129
-  $result = db_query("SELECT rechnungsnummer, rechnungsdatum, sl.betrag, buchungsdatum, sl.status FROM kundendaten.sepalastschrift sl LEFT JOIN kundendaten.ausgestellte_rechnungen re ON (re.sepamandat=sl.mandatsreferenz) WHERE rechnungsnummer=?", array($rechnungsnummer));
130
-  if ($result->rowCount() == 0) {
131
-    return NULL;
132
-  }
133
-  $item = $result->fetch();
134
-  return $item;
132
+function get_lastschrift($rechnungsnummer)
133
+{
134
+    $rechnungsnummer = (int) $rechnungsnummer;
135
+    $result = db_query("SELECT rechnungsnummer, rechnungsdatum, sl.betrag, buchungsdatum, sl.status FROM kundendaten.sepalastschrift sl LEFT JOIN kundendaten.ausgestellte_rechnungen re ON (re.sepamandat=sl.mandatsreferenz) WHERE rechnungsnummer=?", array($rechnungsnummer));
136
+    if ($result->rowCount() == 0) {
137
+        return null;
138
+    }
139
+    $item = $result->fetch();
140
+    return $item;
135 141
 }
136 142
 
137 143
 function get_lastschriften($mandatsreferenz)
138 144
 {
139
-  $result = db_query("SELECT rechnungsnummer, rechnungsdatum, betrag, buchungsdatum, status FROM kundendaten.sepalastschrift WHERE mandatsreferenz=? ORDER BY buchungsdatum DESC", array($mandatsreferenz));
140
-  $ret = array();
141
-  while ($item = $result->fetch()) {
142
-    $ret[] = $item;
143
-  }
144
-  return $ret;
145
+    $result = db_query("SELECT rechnungsnummer, rechnungsdatum, betrag, buchungsdatum, status FROM kundendaten.sepalastschrift WHERE mandatsreferenz=? ORDER BY buchungsdatum DESC", array($mandatsreferenz));
146
+    $ret = array();
147
+    while ($item = $result->fetch()) {
148
+        $ret[] = $item;
149
+    }
150
+    return $ret;
145 151
 }
146 152
 
147
-function get_sepamandate() 
153
+function get_sepamandate()
148 154
 {
149
-  $cid = (int) $_SESSION['customerinfo']['customerno'];
150
-  $result = db_query("SELECT id, mandatsreferenz, glaeubiger_id, erteilt, medium, gueltig_ab, gueltig_bis, erstlastschrift, kontoinhaber, adresse, iban, bic, bankname FROM kundendaten.sepamandat WHERE kunde=?", array($cid));
151
-  $ret = array();
152
-  while ($entry = $result->fetch()) {
153
-    array_push($ret, $entry);
154
-  }
155
-  return $ret;
155
+    $cid = (int) $_SESSION['customerinfo']['customerno'];
156
+    $result = db_query("SELECT id, mandatsreferenz, glaeubiger_id, erteilt, medium, gueltig_ab, gueltig_bis, erstlastschrift, kontoinhaber, adresse, iban, bic, bankname FROM kundendaten.sepamandat WHERE kunde=?", array($cid));
157
+    $ret = array();
158
+    while ($entry = $result->fetch()) {
159
+        array_push($ret, $entry);
160
+    }
161
+    return $ret;
156 162
 }
157 163
 
158 164
 
159
-function yesterday($date) 
165
+function yesterday($date)
160 166
 {
161
-  $result = db_query("SELECT ? - INTERVAL 1 DAY", array($date));
162
-  return $result->fetch()[0];
167
+    $result = db_query("SELECT ? - INTERVAL 1 DAY", array($date));
168
+    return $result->fetch()[0];
163 169
 }
164 170
 
165 171
 
166
-function invalidate_sepamandat($id, $date) 
172
+function invalidate_sepamandat($id, $date)
167 173
 {
168
-  $args = array(":cid" => (int) $_SESSION['customerinfo']['customerno'],
174
+    $args = array(":cid" => (int) $_SESSION['customerinfo']['customerno'],
169 175
                 ":id" => (int) $id,
170 176
                 ":date" => $date);
171
-  db_query("UPDATE kundendaten.sepamandat SET gueltig_bis=:date WHERE id=:id AND kunde=:cid", $args);
177
+    db_query("UPDATE kundendaten.sepamandat SET gueltig_bis=:date WHERE id=:id AND kunde=:cid", $args);
172 178
 }
173 179
 
174 180
 
175 181
 function sepamandat($name, $adresse, $iban, $bankname, $bic, $gueltig_ab)
176 182
 {
177
-  $cid = (int) $_SESSION['customerinfo']['customerno'];
178
-
179
-  $first_date = date('Y-m-d');
180
-  $invoices = my_invoices();
181
-  foreach ($invoices as $i) {
182
-    if ($i['bezahlt'] == 0 && $i['datum'] < $first_date) {
183
-      $first_date = $i['datum'];
183
+    $cid = (int) $_SESSION['customerinfo']['customerno'];
184
+
185
+    $first_date = date('Y-m-d');
186
+    $invoices = my_invoices();
187
+    foreach ($invoices as $i) {
188
+        if ($i['bezahlt'] == 0 && $i['datum'] < $first_date) {
189
+            $first_date = $i['datum'];
190
+        }
191
+    }
192
+    if ($gueltig_ab < date('Y-m-d') && $gueltig_ab != $first_date) {
193
+        system_failure('Das Mandat kann nicht rückwirkend erteilt werden. Bitte geben Sie ein Datum in der Zukunft an.');
184 194
     }
185
-  }
186
-  if ($gueltig_ab < date('Y-m-d') && $gueltig_ab != $first_date) {
187
-    system_failure('Das Mandat kann nicht rückwirkend erteilt werden. Bitte geben Sie ein Datum in der Zukunft an.');
188
-  }
189
-  $alte_mandate = get_sepamandate();
190
-  $referenzen = array();
191
-  foreach ($alte_mandate as $mandat) {
192
-    if ($mandat['gueltig_bis'] == NULL || $mandat['gueltig_bis'] >= $gueltig_ab) {
193
-      DEBUG('Altes Mandat wird für ungültig erklärt.');
194
-      DEBUG($mandat);
195
-      invalidate_sepamandat($mandat['id'], yesterday($gueltig_ab));
195
+    $alte_mandate = get_sepamandate();
196
+    $referenzen = array();
197
+    foreach ($alte_mandate as $mandat) {
198
+        if ($mandat['gueltig_bis'] == null || $mandat['gueltig_bis'] >= $gueltig_ab) {
199
+            DEBUG('Altes Mandat wird für ungültig erklärt.');
200
+            DEBUG($mandat);
201
+            invalidate_sepamandat($mandat['id'], yesterday($gueltig_ab));
202
+        }
203
+        array_push($referenzen, $mandat['mandatsreferenz']);
196 204
     }
197
-    array_push($referenzen, $mandat['mandatsreferenz']);
198
-  }
199
-  $counter = 1;
200
-  $referenz = sprintf('K%04d-M%03d', $cid, $counter);
201
-  while (in_array($referenz, $referenzen)) {
202
-    $counter++;
205
+    $counter = 1;
203 206
     $referenz = sprintf('K%04d-M%03d', $cid, $counter);
204
-  }
205
-  DEBUG('Nächste freie Mandatsreferenz: '. $referenz);
207
+    while (in_array($referenz, $referenzen)) {
208
+        $counter++;
209
+        $referenz = sprintf('K%04d-M%03d', $cid, $counter);
210
+    }
211
+    DEBUG('Nächste freie Mandatsreferenz: '. $referenz);
206 212
 
207
-  $glaeubiger_id = config('glaeubiger_id');
213
+    $glaeubiger_id = config('glaeubiger_id');
208 214
 
209
-  $today = date('Y-m-d');
210
-  db_query("INSERT INTO kundendaten.sepamandat (mandatsreferenz, glaeubiger_id, kunde, erteilt, medium, gueltig_ab, kontoinhaber, adresse, iban, bic, bankname) VALUES (:referenz, :glaeubiger_id, :cid, :today, 'online', :gueltig_ab, :name, :adresse, :iban, :bic, :bankname)",
211
-          array(":referenz" => $referenz, ":glaeubiger_id" => $glaeubiger_id, ":cid" => $cid, 
212
-                ":today" => $today, ":gueltig_ab" => $gueltig_ab, ":name" => $name, ":adresse" => $adresse, 
213
-                ":iban" => $iban, ":bic" => $bic, ":bankname" => $bankname));
215
+    $today = date('Y-m-d');
216
+    db_query(
217
+      "INSERT INTO kundendaten.sepamandat (mandatsreferenz, glaeubiger_id, kunde, erteilt, medium, gueltig_ab, kontoinhaber, adresse, iban, bic, bankname) VALUES (:referenz, :glaeubiger_id, :cid, :today, 'online', :gueltig_ab, :name, :adresse, :iban, :bic, :bankname)",
218
+          array(":referenz" => $referenz, ":glaeubiger_id" => $glaeubiger_id, ":cid" => $cid,
219
+                ":today" => $today, ":gueltig_ab" => $gueltig_ab, ":name" => $name, ":adresse" => $adresse,
220
+                ":iban" => $iban, ":bic" => $bic, ":bankname" => $bankname)
221
+  );
214 222
 }
215 223
 
216 224
 
217 225
 
218
-function get_bank_info($iban) 
226
+function get_bank_info($iban)
219 227
 {
220
-  if (strlen($iban) != 22 || substr($iban, 0, 2) != 'DE') {
221
-    // Geht nur bei deutschen IBANs
222
-    echo 'Fehler!';
223
-    echo '$iban = '.$iban;
224
-    echo 'strlen($iban): '.strlen($iban);
225
-    echo 'substr($iban, 0, 2): '.substr($iban, 0, 2);
226
-    return NULL;
227
-  }
228
-  $blz = substr($iban, 4, 8);
229
-  // FIXME: Liste der BLZs muss vorhanden sein!
230
-  $bankinfofile = dirname(__FILE__).'/bankinfo.txt';
231
-  $f = file($bankinfofile);
232
-  $match = '';
233
-  foreach ($f as $line) {
234
-    if (substr($line, 0, 9) == $blz.'1') {
235
-      $match = $line;
236
-      break;
228
+    if (strlen($iban) != 22 || substr($iban, 0, 2) != 'DE') {
229
+        // Geht nur bei deutschen IBANs
230
+        echo 'Fehler!';
231
+        echo '$iban = '.$iban;
232
+        echo 'strlen($iban): '.strlen($iban);
233
+        echo 'substr($iban, 0, 2): '.substr($iban, 0, 2);
234
+        return null;
235
+    }
236
+    $blz = substr($iban, 4, 8);
237
+    // FIXME: Liste der BLZs muss vorhanden sein!
238
+    $bankinfofile = dirname(__FILE__).'/bankinfo.txt';
239
+    $f = file($bankinfofile);
240
+    $match = '';
241
+    foreach ($f as $line) {
242
+        if (substr($line, 0, 9) == $blz.'1') {
243
+            $match = $line;
244
+            break;
245
+        }
237 246
     }
238
-  }
239
-  $bank = array();
240
-  $bank['name'] = iconv('latin1', 'utf8', chop(substr($match, 9,58)));
241
-  $bank['bic'] = chop(substr($match, 139,11));
242
-  return $bank;
247
+    $bank = array();
248
+    $bank['name'] = iconv('latin1', 'utf8', chop(substr($match, 9, 58)));
249
+    $bank['bic'] = chop(substr($match, 139, 11));
250
+    return $bank;
243 251
 }
244 252
 
245 253
 
246
-function find_iban($blz, $kto) 
254
+function find_iban($blz, $kto)
247 255
 {
248
-  $iban = sprintf('DE00%08s%010s', $blz, $kto);
249
-  $iban = iban_set_checksum($iban);
250
-  return $iban;
256
+    $iban = sprintf('DE00%08s%010s', $blz, $kto);
257
+    $iban = iban_set_checksum($iban);
258
+    return $iban;
251 259
 }
252 260
 
253 261
 
254 262
 function get_customerquota()
255 263
 {
256
-  $cid = (int) $_SESSION['customerinfo']['customerno'];
257
-  $result = db_query("SELECT quota FROM system.customerquota WHERE cid=:cid", array(":cid" => $cid));
258
-  $data = $result->fetch();
259
-  return $data["quota"];
264
+    $cid = (int) $_SESSION['customerinfo']['customerno'];
265
+    $result = db_query("SELECT quota FROM system.customerquota WHERE cid=:cid", array(":cid" => $cid));
266
+    $data = $result->fetch();
267
+    return $data["quota"];
260 268
 }
261 269
 
262
-function save_more_storage($items, $storage) {
263
-  $cid = (int) $_SESSION['customerinfo']['customerno'];
270
+function save_more_storage($items, $storage)
271
+{
272
+    $cid = (int) $_SESSION['customerinfo']['customerno'];
264 273
   
265
-  $queries = array();  
266
-
267
-  if ($storage < 1024 || $storage > 10240) {
268
-    input_error('Speicherplatz nicht im erwarteten Bereich');
269
-  }
270
-  $oldcustomerquota = get_customerquota();
271
-  if ($oldcustomerquota > 102400) {
272
-    # Über 100 GB soll die Automatik nichts machen
273
-    system_failure("Ihr Speicherplatz kann über diese Funktion nicht weiter erhöht werden. Bitte wenden Sie sich an die Administratoren.");
274
-  }
275
-  $result = db_query("SELECT quota FROM system.customerquota WHERE cid=:cid AND lastchange > CURDATE()", array(":cid" => $cid));
276
-  if ($result->rowcount() > 0) {
277
-    system_failure("Ihr Speicherplatz wurde heute bereits verändert. Sie können dies nur einmal am Tag machen.");
278
-  }
279
-
280
-  $queries[] = array("UPDATE system.customerquota SET quota=quota+:storage WHERE cid=:cid", array(":storage" => $storage, ":cid" => $cid));
281
-
282
-  foreach ($items as $data) {
283
-    if ($data['anzahl'] == 0) {
284
-      continue;
274
+    $queries = array();
275
+
276
+    if ($storage < 1024 || $storage > 10240) {
277
+        input_error('Speicherplatz nicht im erwarteten Bereich');
285 278
     }
286
-    $data['kunde'] = $cid;
287
-    $data['notizen'] = 'Bestellt via Webinterface';
288
-    if (!isset($data['anzahl']) ||
279
+    $oldcustomerquota = get_customerquota();
280
+    if ($oldcustomerquota > 102400) {
281
+        # Über 100 GB soll die Automatik nichts machen
282
+        system_failure("Ihr Speicherplatz kann über diese Funktion nicht weiter erhöht werden. Bitte wenden Sie sich an die Administratoren.");
283
+    }
284
+    $result = db_query("SELECT quota FROM system.customerquota WHERE cid=:cid AND lastchange > CURDATE()", array(":cid" => $cid));
285
+    if ($result->rowcount() > 0) {
286
+        system_failure("Ihr Speicherplatz wurde heute bereits verändert. Sie können dies nur einmal am Tag machen.");
287
+    }
288
+
289
+    $queries[] = array("UPDATE system.customerquota SET quota=quota+:storage WHERE cid=:cid", array(":storage" => $storage, ":cid" => $cid));
290
+
291
+    foreach ($items as $data) {
292
+        if ($data['anzahl'] == 0) {
293
+            continue;
294
+        }
295
+        $data['kunde'] = $cid;
296
+        $data['notizen'] = 'Bestellt via Webinterface';
297
+        if (!isset($data['anzahl']) ||
289 298
         !isset($data['beschreibung']) ||
290 299
         !isset($data['datum']) ||
291 300
         !array_key_exists('kuendigungsdatum', $data) ||
292 301
         !isset($data['betrag']) ||
293 302
         !isset($data['monate'])) {
294
-      DEBUG($data);
295
-      input_error("Ungültige Daten");
296
-      return;
297
-    }
303
+            DEBUG($data);
304
+            input_error("Ungültige Daten");
305
+            return;
306
+        }
298 307
  
299
-    $param = array();
300
-    foreach ($data as $k => $v) {
301
-      $param[':'.$k] = $v;
302
-    }
308
+        $param = array();
309
+        foreach ($data as $k => $v) {
310
+            $param[':'.$k] = $v;
311
+        }
303 312
 
304
-    $queries[] = array("INSERT INTO kundendaten.leistungen (kunde,periodisch,beschreibung,datum,kuendigungsdatum,betrag,brutto,monate,anzahl,notizen) VALUES ".
313
+        $queries[] = array("INSERT INTO kundendaten.leistungen (kunde,periodisch,beschreibung,datum,kuendigungsdatum,betrag,brutto,monate,anzahl,notizen) VALUES ".
305 314
                        "(:kunde,1,:beschreibung,:datum,:kuendigungsdatum,:betrag,:brutto,:monate,:anzahl,:notizen)", $param);
306
-  }
315
+    }
307 316
 
308
-  if (count($queries) < 2) {
309
-    system_failure("irgendwas stimmt jetzt nicht");
310
-  }
317
+    if (count($queries) < 2) {
318
+        system_failure("irgendwas stimmt jetzt nicht");
319
+    }
311 320
   
312
-  foreach ($queries as $q) {
313
-    db_query($q[0], $q[1]);
314
-  }
315
-  $allstorage = $oldcustomerquota+$storage;
316
-  $emailaddr = $_SESSION['customerinfo']['email'];
317
-  $message = "Hallo,\n\nsoeben wurde im Webinterface von ".config('company_name')." eine Bestellung über zusätzlichen Speicherplatz ausgeführt.\nSollten Sie diese Bestellung nicht getätigt haben, antworten Sie bitte auf diese E-Mail um unseren Support zu erreichen.\n\nBei dieser Bestellung wurden {$storage} MB zusätzlicher Speicherplatz bestellt. Ihnen stehen ab sofort insgesamt {$allstorage} MB zur Verfügung.\n\nIhre Kundennummer: {$_SESSION['customerinfo']['customerno']} ({$_SESSION['customerinfo']['name']})\n";
318
-  mail($emailaddr, 'Auftragsbestätigung: Mehr Speicherplatz bei schokokeks.org', $message, "X-schokokeks-org-message: notify\nFrom: ".config('company_name').' <'.config('adminmail').">\nBcc: ".config('adminmail')."\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\n");
321
+    foreach ($queries as $q) {
322
+        db_query($q[0], $q[1]);
323
+    }
324
+    $allstorage = $oldcustomerquota+$storage;
325
+    $emailaddr = $_SESSION['customerinfo']['email'];
326
+    $message = "Hallo,\n\nsoeben wurde im Webinterface von ".config('company_name')." eine Bestellung über zusätzlichen Speicherplatz ausgeführt.\nSollten Sie diese Bestellung nicht getätigt haben, antworten Sie bitte auf diese E-Mail um unseren Support zu erreichen.\n\nBei dieser Bestellung wurden {$storage} MB zusätzlicher Speicherplatz bestellt. Ihnen stehen ab sofort insgesamt {$allstorage} MB zur Verfügung.\n\nIhre Kundennummer: {$_SESSION['customerinfo']['customerno']} ({$_SESSION['customerinfo']['name']})\n";
327
+    mail($emailaddr, 'Auftragsbestätigung: Mehr Speicherplatz bei schokokeks.org', $message, "X-schokokeks-org-message: notify\nFrom: ".config('company_name').' <'.config('adminmail').">\nBcc: ".config('adminmail')."\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\n");
319 328
 }
320
-
321
-?>
Browse code

Abbuchung über nachträgliches SEPA-Mandat korrekt angeben.

Bernd Wurst authored on17/06/2018 10:54:04
Showing1 changed files
... ...
@@ -126,7 +126,7 @@ RE '.$id.' KD '.$customerno.' vom '.$datum;
126 126
 
127 127
 function get_lastschrift($rechnungsnummer) {
128 128
   $rechnungsnummer = (int) $rechnungsnummer;
129
-  $result = db_query("SELECT rechnungsnummer, rechnungsdatum, sl.betrag, buchungsdatum, sl.status FROM kundendaten.sepalastschrift sl LEFT JOIN kundendaten.ausgestellte_rechnungen re ON (re.sepamandat=sl.mandatsreferenz) WHERE rechnungsnummer=? AND re.abbuchung=1", array($rechnungsnummer));
129
+  $result = db_query("SELECT rechnungsnummer, rechnungsdatum, sl.betrag, buchungsdatum, sl.status FROM kundendaten.sepalastschrift sl LEFT JOIN kundendaten.ausgestellte_rechnungen re ON (re.sepamandat=sl.mandatsreferenz) WHERE rechnungsnummer=?", array($rechnungsnummer));
130 130
   if ($result->rowCount() == 0) {
131 131
     return NULL;
132 132
   }
Browse code

BezahlCode ist obsolet, der GiroCode reicht aus und hat jetzt auch einen Namen

Bernd Wurst authored on21/05/2018 07:20:03
Showing1 changed files
... ...
@@ -124,43 +124,6 @@ RE '.$id.' KD '.$customerno.' vom '.$datum;
124 124
 }
125 125
 
126 126
 
127
-function generate_bezahlcode_image($id) 
128
-{
129
-  $invoice = invoice_details($id);
130
-  $customerno = $invoice['kunde'];
131
-  $amount = str_replace('.', '%2C', sprintf('%.2f', $invoice['betrag']));
132
-  $datum = $invoice['datum'];
133
-  $data = 'bank://singlepaymentsepa?name=schokokeks.org%20GbR&reason=RE%20'.$id.'%20KD%20'.$customerno.'%20vom%20'.$datum.'&iban=DE91602911200041512006&bic=GENODES1VBK&amount='.$amount;
134
-  
135
-  $descriptorspec = array(
136
-    0 => array("pipe", "r"),  // STDIN ist eine Pipe, von der das Child liest
137
-    1 => array("pipe", "w"),  // STDOUT ist eine Pipe, in die das Child schreibt
138
-    2 => array("pipe", "w") 
139
-  );
140
-
141
-  $process = proc_open('qrencode -t PNG -o -', $descriptorspec, $pipes);
142
-
143
-  if (is_resource($process)) {
144
-    // $pipes sieht nun so aus:
145
-    // 0 => Schreibhandle, das auf das Child STDIN verbunden ist
146
-    // 1 => Lesehandle, das auf das Child STDOUT verbunden ist
147
-
148
-    fwrite($pipes[0], $data);
149
-    fclose($pipes[0]);
150
-
151
-    $pngdata = stream_get_contents($pipes[1]);
152
-    fclose($pipes[1]);
153
-
154
-    // Es ist wichtig, dass Sie alle Pipes schließen bevor Sie
155
-    // proc_close aufrufen, um Deadlocks zu vermeiden
156
-    $return_value = proc_close($process);
157
-  
158
-    return $pngdata;
159
-  } else {
160
-    warning('Es ist ein interner Fehler im Webinterface aufgetreten, aufgrund dessen kein QR-Code erstellt werden kann. Sollte dieser Fehler mehrfach auftreten, kontaktieren Sie bitte die Administratoren.');
161
-  }
162
-}
163
-
164 127
 function get_lastschrift($rechnungsnummer) {
165 128
   $rechnungsnummer = (int) $rechnungsnummer;
166 129
   $result = db_query("SELECT rechnungsnummer, rechnungsdatum, sl.betrag, buchungsdatum, sl.status FROM kundendaten.sepalastschrift sl LEFT JOIN kundendaten.ausgestellte_rechnungen re ON (re.sepamandat=sl.mandatsreferenz) WHERE rechnungsnummer=? AND re.abbuchung=1", array($rechnungsnummer));
Browse code

Zeige Kundennummer/Name in der Bestätigungsmail wegen Speicherplatzerhöhung

Bernd Wurst authored on01/03/2018 12:22:07
Showing1 changed files
... ...
@@ -351,7 +351,7 @@ function save_more_storage($items, $storage) {
351 351
   }
352 352
   $allstorage = $oldcustomerquota+$storage;
353 353
   $emailaddr = $_SESSION['customerinfo']['email'];
354
-  $message = "Hallo,\n\nsoeben wurde im Webinterface von ".config('company_name')." eine Bestellung über zusätzlichen Speicherplatz ausgeführt.\nSollten Sie diese Bestellung nicht getätigt haben, antworten Sie bitte auf diese E-Mail um unseren Support zu erreichen.\n\nBei dieser Bestellung wurden {$storage} MB zusätzlicher Speicherplatz bestellt. Ihnen stehen ab sofort insgesamt {$allstorage} MB zur Verfügung.";
354
+  $message = "Hallo,\n\nsoeben wurde im Webinterface von ".config('company_name')." eine Bestellung über zusätzlichen Speicherplatz ausgeführt.\nSollten Sie diese Bestellung nicht getätigt haben, antworten Sie bitte auf diese E-Mail um unseren Support zu erreichen.\n\nBei dieser Bestellung wurden {$storage} MB zusätzlicher Speicherplatz bestellt. Ihnen stehen ab sofort insgesamt {$allstorage} MB zur Verfügung.\n\nIhre Kundennummer: {$_SESSION['customerinfo']['customerno']} ({$_SESSION['customerinfo']['name']})\n";
355 355
   mail($emailaddr, 'Auftragsbestätigung: Mehr Speicherplatz bei schokokeks.org', $message, "X-schokokeks-org-message: notify\nFrom: ".config('company_name').' <'.config('adminmail').">\nBcc: ".config('adminmail')."\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\n");
356 356
 }
357 357
 
Browse code

php-iban über composer einbinden

Bernd Wurst authored on23/01/2018 18:20:13
Showing1 changed files
... ...
@@ -17,8 +17,6 @@ Nevertheless, in case you use a significant part of this code, we ask (but not r
17 17
 require_once('inc/base.php');
18 18
 require_once('inc/security.php');
19 19
 
20
-include("external/php-iban/php-iban.php");
21
-
22 20
 
23 21
 function my_invoices()
24 22
 {
Browse code

Copyright year update

Bernd Wurst authored on13/01/2018 06:07:05
Showing1 changed files
... ...
@@ -2,7 +2,7 @@
2 2
 /*
3 3
 This file belongs to the Webinterface of schokokeks.org Hosting
4 4
 
5
-Written 2008-2014 by schokokeks.org Hosting, namely
5
+Written 2008-2018 by schokokeks.org Hosting, namely
6 6
   Bernd Wurst <bernd@schokokeks.org>
7 7
   Hanno Böck <hanno@schokokeks.org>
8 8
 
Browse code

Bugfix: Speicherplatz erhöhen ging nur bei einem einzigen Kunden am Tag

Bernd Wurst authored on23/03/2017 20:50:15
Showing1 changed files
... ...
@@ -311,7 +311,7 @@ function save_more_storage($items, $storage) {
311 311
     # Über 100 GB soll die Automatik nichts machen
312 312
     system_failure("Ihr Speicherplatz kann über diese Funktion nicht weiter erhöht werden. Bitte wenden Sie sich an die Administratoren.");
313 313
   }
314
-  $result = db_query("SELECT quota FROM system.customerquota WHERE lastchange > CURDATE()");
314
+  $result = db_query("SELECT quota FROM system.customerquota WHERE cid=:cid AND lastchange > CURDATE()", array(":cid" => $cid));
315 315
   if ($result->rowcount() > 0) {
316 316
     system_failure("Ihr Speicherplatz wurde heute bereits verändert. Sie können dies nur einmal am Tag machen.");
317 317
   }
Browse code

E-mail-notification bei Speicherplatz-Bestellung eingebaut

Bernd Wurst authored on17/02/2017 17:24:13
Showing1 changed files
... ...
@@ -307,8 +307,8 @@ function save_more_storage($items, $storage) {
307 307
     input_error('Speicherplatz nicht im erwarteten Bereich');
308 308
   }
309 309
   $oldcustomerquota = get_customerquota();
310
-  if ($oldcustomerquota > 20480) {
311
-    # Über 20 GB soll die Automatik nichts machen
310
+  if ($oldcustomerquota > 102400) {
311
+    # Über 100 GB soll die Automatik nichts machen
312 312
     system_failure("Ihr Speicherplatz kann über diese Funktion nicht weiter erhöht werden. Bitte wenden Sie sich an die Administratoren.");
313 313
   }
314 314
   $result = db_query("SELECT quota FROM system.customerquota WHERE lastchange > CURDATE()");
... ...
@@ -351,6 +351,10 @@ function save_more_storage($items, $storage) {
351 351
   foreach ($queries as $q) {
352 352
     db_query($q[0], $q[1]);
353 353
   }
354
+  $allstorage = $oldcustomerquota+$storage;
355
+  $emailaddr = $_SESSION['customerinfo']['email'];
356
+  $message = "Hallo,\n\nsoeben wurde im Webinterface von ".config('company_name')." eine Bestellung über zusätzlichen Speicherplatz ausgeführt.\nSollten Sie diese Bestellung nicht getätigt haben, antworten Sie bitte auf diese E-Mail um unseren Support zu erreichen.\n\nBei dieser Bestellung wurden {$storage} MB zusätzlicher Speicherplatz bestellt. Ihnen stehen ab sofort insgesamt {$allstorage} MB zur Verfügung.";
357
+  mail($emailaddr, 'Auftragsbestätigung: Mehr Speicherplatz bei schokokeks.org', $message, "X-schokokeks-org-message: notify\nFrom: ".config('company_name').' <'.config('adminmail').">\nBcc: ".config('adminmail')."\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\n");
354 358
 }
355 359
 
356 360
 ?>
Browse code

Zwischenversion

Bernd Wurst authored on10/02/2017 12:20:59
Showing1 changed files
... ...
@@ -70,7 +70,7 @@ function invoice_items($id)
70 70
 function upcoming_items()
71 71
 {
72 72
   $c = (int) $_SESSION['customerinfo']['customerno'];
73
-  $result = db_query("SELECT anzahl, beschreibung, startdatum, enddatum, betrag, einheit, brutto, mwst FROM kundendaten.upcoming_items WHERE kunde=? ORDER BY startdatum ASC", array($c));
73
+  $result = db_query("SELECT quelle, id, anzahl, beschreibung, startdatum, enddatum, betrag, einheit, brutto, mwst FROM kundendaten.upcoming_items WHERE kunde=? ORDER BY startdatum ASC", array($c));
74 74
   $ret = array();
75 75
   while($line = $result->fetch())
76 76
 	  array_push($ret, $line);
... ...
@@ -290,4 +290,67 @@ function find_iban($blz, $kto)
290 290
 }
291 291
 
292 292
 
293
+function get_customerquota()
294
+{
295
+  $cid = (int) $_SESSION['customerinfo']['customerno'];
296
+  $result = db_query("SELECT quota FROM system.customerquota WHERE cid=:cid", array(":cid" => $cid));
297
+  $data = $result->fetch();
298
+  return $data["quota"];
299
+}
300
+
301
+function save_more_storage($items, $storage) {
302
+  $cid = (int) $_SESSION['customerinfo']['customerno'];
303
+  
304
+  $queries = array();  
305
+
306
+  if ($storage < 1024 || $storage > 10240) {
307
+    input_error('Speicherplatz nicht im erwarteten Bereich');
308
+  }
309
+  $oldcustomerquota = get_customerquota();
310
+  if ($oldcustomerquota > 20480) {
311
+    # Über 20 GB soll die Automatik nichts machen
312
+    system_failure("Ihr Speicherplatz kann über diese Funktion nicht weiter erhöht werden. Bitte wenden Sie sich an die Administratoren.");
313
+  }
314
+  $result = db_query("SELECT quota FROM system.customerquota WHERE lastchange > CURDATE()");
315
+  if ($result->rowcount() > 0) {
316
+    system_failure("Ihr Speicherplatz wurde heute bereits verändert. Sie können dies nur einmal am Tag machen.");
317
+  }
318
+
319
+  $queries[] = array("UPDATE system.customerquota SET quota=quota+:storage WHERE cid=:cid", array(":storage" => $storage, ":cid" => $cid));
320
+
321
+  foreach ($items as $data) {
322
+    if ($data['anzahl'] == 0) {
323
+      continue;
324
+    }
325
+    $data['kunde'] = $cid;
326
+    $data['notizen'] = 'Bestellt via Webinterface';
327
+    if (!isset($data['anzahl']) ||
328
+        !isset($data['beschreibung']) ||
329
+        !isset($data['datum']) ||
330
+        !array_key_exists('kuendigungsdatum', $data) ||
331
+        !isset($data['betrag']) ||
332
+        !isset($data['monate'])) {
333
+      DEBUG($data);
334
+      input_error("Ungültige Daten");
335
+      return;
336
+    }
337
+ 
338
+    $param = array();
339
+    foreach ($data as $k => $v) {
340
+      $param[':'.$k] = $v;
341
+    }
342
+
343
+    $queries[] = array("INSERT INTO kundendaten.leistungen (kunde,periodisch,beschreibung,datum,kuendigungsdatum,betrag,brutto,monate,anzahl,notizen) VALUES ".
344
+                       "(:kunde,1,:beschreibung,:datum,:kuendigungsdatum,:betrag,:brutto,:monate,:anzahl,:notizen)", $param);
345
+  }
346
+
347
+  if (count($queries) < 2) {
348
+    system_failure("irgendwas stimmt jetzt nicht");
349
+  }
350
+  
351
+  foreach ($queries as $q) {
352
+    db_query($q[0], $q[1]);
353
+  }
354
+}
355
+
293 356
 ?>
Browse code

Zeige Rechnungen zu rückgebuchten Lastschriften als unbezahlt an

Bernd Wurst authored on08/09/2014 01:21:16
Showing1 changed files
... ...
@@ -165,7 +165,7 @@ function generate_bezahlcode_image($id)
165 165
 
166 166
 function get_lastschrift($rechnungsnummer) {
167 167
   $rechnungsnummer = (int) $rechnungsnummer;
168
-  $result = db_query("SELECT rechnungsnummer, rechnungsdatum, sl.betrag, buchungsdatum FROM kundendaten.sepalastschrift sl LEFT JOIN kundendaten.ausgestellte_rechnungen re ON (re.sepamandat=sl.mandatsreferenz) WHERE rechnungsnummer=? AND re.abbuchung=1", array($rechnungsnummer));
168
+  $result = db_query("SELECT rechnungsnummer, rechnungsdatum, sl.betrag, buchungsdatum, sl.status FROM kundendaten.sepalastschrift sl LEFT JOIN kundendaten.ausgestellte_rechnungen re ON (re.sepamandat=sl.mandatsreferenz) WHERE rechnungsnummer=? AND re.abbuchung=1", array($rechnungsnummer));
169 169
   if ($result->rowCount() == 0) {
170 170
     return NULL;
171 171
   }
... ...
@@ -175,7 +175,7 @@ function get_lastschrift($rechnungsnummer) {
175 175
 
176 176
 function get_lastschriften($mandatsreferenz)
177 177
 {
178
-  $result = db_query("SELECT rechnungsnummer, rechnungsdatum, betrag, buchungsdatum FROM kundendaten.sepalastschrift WHERE mandatsreferenz=? ORDER BY buchungsdatum DESC", array($mandatsreferenz));
178
+  $result = db_query("SELECT rechnungsnummer, rechnungsdatum, betrag, buchungsdatum, status FROM kundendaten.sepalastschrift WHERE mandatsreferenz=? ORDER BY buchungsdatum DESC", array($mandatsreferenz));
179 179
   $ret = array();
180 180
   while ($item = $result->fetch()) {
181 181
     $ret[] = $item;
Bernd Wurst authored on02/06/2014 17:54:56
Showing1 changed files
... ...
@@ -165,7 +165,7 @@ function generate_bezahlcode_image($id)
165 165
 
166 166
 function get_lastschrift($rechnungsnummer) {
167 167
   $rechnungsnummer = (int) $rechnungsnummer;
168
-  $result = db_query("SELECT rechnungsnummer, rechnungsdatum, sl.betrag, buchungsdatum FROM kundendaten.sepalastschrift sl LEFT JOIN kundendaten.ausgestellte_rechnungen re ON (re.id=sl.rechnungsnummer) WHERE rechnungsnummer=? AND re.abbuchung=1", array($rechnungsnummer));
168
+  $result = db_query("SELECT rechnungsnummer, rechnungsdatum, sl.betrag, buchungsdatum FROM kundendaten.sepalastschrift sl LEFT JOIN kundendaten.ausgestellte_rechnungen re ON (re.sepamandat=sl.mandatsreferenz) WHERE rechnungsnummer=? AND re.abbuchung=1", array($rechnungsnummer));
169 169
   if ($result->rowCount() == 0) {
170 170
     return NULL;
171 171
   }
Browse code

Lizenzinfos in eigenes Modul ausgelagert und Copyright auf 2014 angepasst

Bernd Wurst authored on08/02/2014 05:45:07
Showing1 changed files
... ...
@@ -2,7 +2,7 @@
2 2
 /*
3 3
 This file belongs to the Webinterface of schokokeks.org Hosting
4 4
 
5
-Written 2008-2013 by schokokeks.org Hosting, namely
5
+Written 2008-2014 by schokokeks.org Hosting, namely
6 6
   Bernd Wurst <bernd@schokokeks.org>
7 7
   Hanno Böck <hanno@schokokeks.org>
8 8
 
Browse code

* Weitere Module auf prepared-statements umgestellt * Warnung beim Aufruf von db_escape_string() und maybe_null() hinzugefügt

Bernd Wurst authored on03/02/2014 16:57:44
Showing1 changed files
... ...
@@ -175,7 +175,6 @@ function get_lastschrift($rechnungsnummer) {
175 175
 
176 176
 function get_lastschriften($mandatsreferenz)
177 177
 {
178
-  $mandatsreferenz = db_escape_string($mandatsreferenz);
179 178
   $result = db_query("SELECT rechnungsnummer, rechnungsdatum, betrag, buchungsdatum FROM kundendaten.sepalastschrift WHERE mandatsreferenz=? ORDER BY buchungsdatum DESC", array($mandatsreferenz));
180 179
   $ret = array();
181 180
   while ($item = $result->fetch()) {
... ...
@@ -198,8 +197,7 @@ function get_sepamandate()
198 197
 
199 198
 function yesterday($date) 
200 199
 {
201
-  $date = db_escape_string($date);
202
-  $result = db_query("SELECT '{$date}' - INTERVAL 1 DAY");
200
+  $result = db_query("SELECT ? - INTERVAL 1 DAY", array($date));
203 201
   return $result->fetch()[0];
204 202
 }
205 203
 
Browse code

Weitere Prepared-Statement-Umstellungen

Bernd Wurst authored on02/02/2014 17:44:30
Showing1 changed files
... ...
@@ -23,7 +23,7 @@ include("external/php-iban/php-iban.php");
23 23
 function my_invoices()
24 24
 {
25 25
   $c = (int) $_SESSION['customerinfo']['customerno'];
26
-  $result = db_query("SELECT id,datum,betrag,bezahlt,abbuchung,sepamandat FROM kundendaten.ausgestellte_rechnungen WHERE kunde={$c} ORDER BY id DESC");
26
+  $result = db_query("SELECT id,datum,betrag,bezahlt,abbuchung,sepamandat FROM kundendaten.ausgestellte_rechnungen WHERE kunde=? ORDER BY id DESC", array($c));
27 27
   $ret = array();
28 28
   while($line = $result->fetch())
29 29
   	array_push($ret, $line);
... ...
@@ -35,7 +35,7 @@ function get_pdf($id)
35 35
 {
36 36
   $c = (int) $_SESSION['customerinfo']['customerno'];
37 37
   $id = (int) $id;
38
-  $result = db_query("SELECT pdfdata FROM kundendaten.ausgestellte_rechnungen WHERE kunde={$c} AND id={$id}");
38
+  $result = db_query("SELECT pdfdata FROM kundendaten.ausgestellte_rechnungen WHERE kunde=:c AND id=:id",array(":c" => $c, ":id" => $id));
39 39
   if ($result->rowCount() == 0)
40 40
 	  system_failure('Ungültige Rechnungsnummer oder nicht eingeloggt');
41 41
   return $result->fetch(PDO::FETCH_OBJ)->pdfdata;
... ...
@@ -47,7 +47,7 @@ function invoice_details($id)
47 47
 {
48 48
   $c = (int) $_SESSION['customerinfo']['customerno'];
49 49
   $id = (int) $id;
50
-  $result = db_query("SELECT kunde,datum,betrag,bezahlt,abbuchung FROM kundendaten.ausgestellte_rechnungen WHERE kunde={$c} AND id={$id}");
50
+  $result = db_query("SELECT kunde,datum,betrag,bezahlt,abbuchung FROM kundendaten.ausgestellte_rechnungen WHERE kunde=:c AND id=:id",array(":c" => $c, ":id" => $id));
51 51
   if ($result->rowCount() == 0)
52 52
   	system_failure('Ungültige Rechnungsnummer oder nicht eingeloggt');
53 53
   return $result->fetch();
... ...
@@ -57,7 +57,7 @@ function invoice_items($id)
57 57
 {
58 58
   $c = (int) $_SESSION['customerinfo']['customerno'];
59 59
   $id = (int) $id;
60
-  $result = db_query("SELECT id, beschreibung, datum, enddatum, betrag, einheit, brutto, mwst, anzahl FROM kundendaten.rechnungsposten WHERE rechnungsnummer={$id} AND kunde={$c}");
60
+  $result = db_query("SELECT id, beschreibung, datum, enddatum, betrag, einheit, brutto, mwst, anzahl FROM kundendaten.rechnungsposten WHERE rechnungsnummer=:id AND kunde=:c",array(":c" => $c, ":id" => $id));
61 61
   if ($result->rowCount() == 0)
62 62
   	system_failure('Ungültige Rechnungsnummer oder nicht eingeloggt');
63 63
   $ret = array();
... ...
@@ -70,7 +70,7 @@ function invoice_items($id)
70 70
 function upcoming_items()
71 71
 {
72 72
   $c = (int) $_SESSION['customerinfo']['customerno'];
73
-  $result = db_query("SELECT anzahl, beschreibung, startdatum, enddatum, betrag, einheit, brutto, mwst FROM kundendaten.upcoming_items WHERE kunde={$c} ORDER BY startdatum ASC");
73
+  $result = db_query("SELECT anzahl, beschreibung, startdatum, enddatum, betrag, einheit, brutto, mwst FROM kundendaten.upcoming_items WHERE kunde=? ORDER BY startdatum ASC", array($c));
74 74
   $ret = array();
75 75
   while($line = $result->fetch())
76 76
 	  array_push($ret, $line);
... ...
@@ -165,7 +165,7 @@ function generate_bezahlcode_image($id)
165 165
 
166 166
 function get_lastschrift($rechnungsnummer) {
167 167
   $rechnungsnummer = (int) $rechnungsnummer;
168
-  $result = db_query("SELECT rechnungsnummer, rechnungsdatum, sl.betrag, buchungsdatum FROM kundendaten.sepalastschrift sl LEFT JOIN kundendaten.ausgestellte_rechnungen re ON (re.id=sl.rechnungsnummer) WHERE rechnungsnummer='${rechnungsnummer}' AND re.abbuchung=1");
168
+  $result = db_query("SELECT rechnungsnummer, rechnungsdatum, sl.betrag, buchungsdatum FROM kundendaten.sepalastschrift sl LEFT JOIN kundendaten.ausgestellte_rechnungen re ON (re.id=sl.rechnungsnummer) WHERE rechnungsnummer=? AND re.abbuchung=1", array($rechnungsnummer));
169 169
   if ($result->rowCount() == 0) {
170 170
     return NULL;
171 171
   }
... ...
@@ -176,7 +176,7 @@ function get_lastschrift($rechnungsnummer) {
176 176
 function get_lastschriften($mandatsreferenz)
177 177
 {
178 178
   $mandatsreferenz = db_escape_string($mandatsreferenz);
179
-  $result = db_query("SELECT rechnungsnummer, rechnungsdatum, betrag, buchungsdatum FROM kundendaten.sepalastschrift WHERE mandatsreferenz='${mandatsreferenz}' ORDER BY buchungsdatum DESC");
179
+  $result = db_query("SELECT rechnungsnummer, rechnungsdatum, betrag, buchungsdatum FROM kundendaten.sepalastschrift WHERE mandatsreferenz=? ORDER BY buchungsdatum DESC", array($mandatsreferenz));
180 180
   $ret = array();
181 181
   while ($item = $result->fetch()) {
182 182
     $ret[] = $item;
... ...
@@ -187,7 +187,7 @@ function get_lastschriften($mandatsreferenz)
187 187
 function get_sepamandate() 
188 188
 {
189 189
   $cid = (int) $_SESSION['customerinfo']['customerno'];
190
-  $result = db_query("SELECT id, mandatsreferenz, glaeubiger_id, erteilt, medium, gueltig_ab, gueltig_bis, erstlastschrift, kontoinhaber, adresse, iban, bic, bankname FROM kundendaten.sepamandat WHERE kunde={$cid}");
190
+  $result = db_query("SELECT id, mandatsreferenz, glaeubiger_id, erteilt, medium, gueltig_ab, gueltig_bis, erstlastschrift, kontoinhaber, adresse, iban, bic, bankname FROM kundendaten.sepamandat WHERE kunde=?", array($cid));
191 191
   $ret = array();
192 192
   while ($entry = $result->fetch()) {
193 193
     array_push($ret, $entry);
... ...
@@ -206,22 +206,16 @@ function yesterday($date)
206 206
 
207 207
 function invalidate_sepamandat($id, $date) 
208 208
 {
209
-  $cid = (int) $_SESSION['customerinfo']['customerno'];
210
-  $id = (int) $id;
211
-  $date = db_escape_string($date);
212
-  db_query("UPDATE kundendaten.sepamandat SET gueltig_bis='{$date}' WHERE id={$id} AND kunde={$cid}");
209
+  $args = array(":cid" => (int) $_SESSION['customerinfo']['customerno'],
210
+                ":id" => (int) $id,
211
+                ":date" => $date);
212
+  db_query("UPDATE kundendaten.sepamandat SET gueltig_bis=:date WHERE id=:id AND kunde=:cid", $args);
213 213
 }
214 214
 
215 215
 
216 216
 function sepamandat($name, $adresse, $iban, $bankname, $bic, $gueltig_ab)
217 217
 {
218 218
   $cid = (int) $_SESSION['customerinfo']['customerno'];
219
-  $name = db_escape_string($name);
220
-  $adresse = db_escape_string($adresse);
221
-  $iban = db_escape_string($iban);
222
-  $bankname = db_escape_string($bankname);
223
-  $bic = db_escape_string($bic);
224
-  $gueltig_ab = db_escape_string($gueltig_ab);
225 219
 
226 220
   $first_date = date('Y-m-d');
227 221
   $invoices = my_invoices();
... ...
@@ -254,7 +248,10 @@ function sepamandat($name, $adresse, $iban, $bankname, $bic, $gueltig_ab)
254 248
   $glaeubiger_id = config('glaeubiger_id');
255 249
 
256 250
   $today = date('Y-m-d');
257
-  db_query("INSERT INTO kundendaten.sepamandat (mandatsreferenz, glaeubiger_id, kunde, erteilt, medium, gueltig_ab, kontoinhaber, adresse, iban, bic, bankname) VALUES ('{$referenz}', '${glaeubiger_id}', {$cid}, '{$today}', 'online', '{$gueltig_ab}', '{$name}', '{$adresse}', '{$iban}', '{$bic}', '{$bankname}')");
251
+  db_query("INSERT INTO kundendaten.sepamandat (mandatsreferenz, glaeubiger_id, kunde, erteilt, medium, gueltig_ab, kontoinhaber, adresse, iban, bic, bankname) VALUES (:referenz, :glaeubiger_id, :cid, :today, 'online', :gueltig_ab, :name, :adresse, :iban, :bic, :bankname)",
252
+          array(":referenz" => $referenz, ":glaeubiger_id" => $glaeubiger_id, ":cid" => $cid, 
253
+                ":today" => $today, ":gueltig_ab" => $gueltig_ab, ":name" => $name, ":adresse" => $adresse, 
254
+                ":iban" => $iban, ":bic" => $bic, ":bankname" => $bankname));
258 255
 }
259 256
 
260 257
 
Browse code

Umstellung auf PDO-Datenbankverbindung

Bernd Wurst authored on01/02/2014 18:38:23
Showing1 changed files
... ...
@@ -25,7 +25,7 @@ function my_invoices()
25 25
   $c = (int) $_SESSION['customerinfo']['customerno'];
26 26
   $result = db_query("SELECT id,datum,betrag,bezahlt,abbuchung,sepamandat FROM kundendaten.ausgestellte_rechnungen WHERE kunde={$c} ORDER BY id DESC");
27 27
   $ret = array();
28
-  while($line = mysql_fetch_assoc($result))
28
+  while($line = $result->fetch())
29 29
   	array_push($ret, $line);
30 30
   return $ret;
31 31
 }
... ...
@@ -36,9 +36,9 @@ function get_pdf($id)
36 36
   $c = (int) $_SESSION['customerinfo']['customerno'];
37 37
   $id = (int) $id;
38 38
   $result = db_query("SELECT pdfdata FROM kundendaten.ausgestellte_rechnungen WHERE kunde={$c} AND id={$id}");
39
-  if (mysql_num_rows($result) == 0)
39
+  if ($result->rowCount() == 0)
40 40
 	  system_failure('Ungültige Rechnungsnummer oder nicht eingeloggt');
41
-  return mysql_fetch_object($result)->pdfdata;
41
+  return $result->fetch(PDO::FETCH_OBJ)->pdfdata;
42 42
 
43 43
 }
44 44
 
... ...
@@ -48,9 +48,9 @@ function invoice_details($id)
48 48
   $c = (int) $_SESSION['customerinfo']['customerno'];
49 49
   $id = (int) $id;
50 50
   $result = db_query("SELECT kunde,datum,betrag,bezahlt,abbuchung FROM kundendaten.ausgestellte_rechnungen WHERE kunde={$c} AND id={$id}");
51
-  if (mysql_num_rows($result) == 0)
51
+  if ($result->rowCount() == 0)
52 52
   	system_failure('Ungültige Rechnungsnummer oder nicht eingeloggt');
53
-  return mysql_fetch_assoc($result);
53
+  return $result->fetch();
54 54
 }
55 55
 
56 56
 function invoice_items($id)
... ...
@@ -58,10 +58,10 @@ function invoice_items($id)
58 58
   $c = (int) $_SESSION['customerinfo']['customerno'];
59 59
   $id = (int) $id;
60 60
   $result = db_query("SELECT id, beschreibung, datum, enddatum, betrag, einheit, brutto, mwst, anzahl FROM kundendaten.rechnungsposten WHERE rechnungsnummer={$id} AND kunde={$c}");
61
-  if (mysql_num_rows($result) == 0)
61
+  if ($result->rowCount() == 0)
62 62
   	system_failure('Ungültige Rechnungsnummer oder nicht eingeloggt');
63 63
   $ret = array();
64
-  while($line = mysql_fetch_assoc($result))
64
+  while($line = $result->fetch())
65 65
   array_push($ret, $line);
66 66
   return $ret;
67 67
 }
... ...
@@ -72,7 +72,7 @@ function upcoming_items()
72 72
   $c = (int) $_SESSION['customerinfo']['customerno'];
73 73
   $result = db_query("SELECT anzahl, beschreibung, startdatum, enddatum, betrag, einheit, brutto, mwst FROM kundendaten.upcoming_items WHERE kunde={$c} ORDER BY startdatum ASC");
74 74
   $ret = array();
75
-  while($line = mysql_fetch_assoc($result))
75
+  while($line = $result->fetch())
76 76
 	  array_push($ret, $line);
77 77
   return $ret;
78 78
 }
... ...
@@ -166,19 +166,19 @@ function generate_bezahlcode_image($id)
166 166
 function get_lastschrift($rechnungsnummer) {
167 167
   $rechnungsnummer = (int) $rechnungsnummer;
168 168
   $result = db_query("SELECT rechnungsnummer, rechnungsdatum, sl.betrag, buchungsdatum FROM kundendaten.sepalastschrift sl LEFT JOIN kundendaten.ausgestellte_rechnungen re ON (re.id=sl.rechnungsnummer) WHERE rechnungsnummer='${rechnungsnummer}' AND re.abbuchung=1");
169
-  if (mysql_num_rows($result) == 0) {
169
+  if ($result->rowCount() == 0) {
170 170
     return NULL;
171 171
   }
172
-  $item = mysql_fetch_assoc($result);
172
+  $item = $result->fetch();
173 173
   return $item;
174 174
 }
175 175
 
176 176
 function get_lastschriften($mandatsreferenz)
177 177
 {
178
-  $mandatsreferenz = mysql_real_escape_string($mandatsreferenz);
178
+  $mandatsreferenz = db_escape_string($mandatsreferenz);
179 179
   $result = db_query("SELECT rechnungsnummer, rechnungsdatum, betrag, buchungsdatum FROM kundendaten.sepalastschrift WHERE mandatsreferenz='${mandatsreferenz}' ORDER BY buchungsdatum DESC");
180 180
   $ret = array();
181
-  while ($item = mysql_fetch_assoc($result)) {
181
+  while ($item = $result->fetch()) {
182 182
     $ret[] = $item;
183 183
   }
184 184
   return $ret;
... ...
@@ -189,7 +189,7 @@ function get_sepamandate()
189 189
   $cid = (int) $_SESSION['customerinfo']['customerno'];
190 190
   $result = db_query("SELECT id, mandatsreferenz, glaeubiger_id, erteilt, medium, gueltig_ab, gueltig_bis, erstlastschrift, kontoinhaber, adresse, iban, bic, bankname FROM kundendaten.sepamandat WHERE kunde={$cid}");
191 191
   $ret = array();
192
-  while ($entry = mysql_fetch_assoc($result)) {
192
+  while ($entry = $result->fetch()) {
193 193
     array_push($ret, $entry);
194 194
   }
195 195
   return $ret;
... ...
@@ -198,9 +198,9 @@ function get_sepamandate()
198 198
 
199 199
 function yesterday($date) 
200 200
 {
201
-  $date = mysql_real_escape_string($date);
201
+  $date = db_escape_string($date);
202 202
   $result = db_query("SELECT '{$date}' - INTERVAL 1 DAY");
203
-  return mysql_fetch_array($result)[0];
203
+  return $result->fetch()[0];
204 204
 }
205 205
 
206 206
 
... ...
@@ -208,7 +208,7 @@ function invalidate_sepamandat($id, $date)
208 208
 {
209 209
   $cid = (int) $_SESSION['customerinfo']['customerno'];
210 210
   $id = (int) $id;
211
-  $date = mysql_real_escape_string($date);
211
+  $date = db_escape_string($date);
212 212
   db_query("UPDATE kundendaten.sepamandat SET gueltig_bis='{$date}' WHERE id={$id} AND kunde={$cid}");
213 213
 }
214 214
 
... ...
@@ -216,12 +216,12 @@ function invalidate_sepamandat($id, $date)
216 216
 function sepamandat($name, $adresse, $iban, $bankname, $bic, $gueltig_ab)
217 217
 {
218 218
   $cid = (int) $_SESSION['customerinfo']['customerno'];
219
-  $name = mysql_real_escape_string($name);
220
-  $adresse = mysql_real_escape_string($adresse);
221
-  $iban = mysql_real_escape_string($iban);
222
-  $bankname = mysql_real_escape_string($bankname);
223
-  $bic = mysql_real_escape_string($bic);
224
-  $gueltig_ab = mysql_real_escape_string($gueltig_ab);
219
+  $name = db_escape_string($name);
220
+  $adresse = db_escape_string($adresse);
221
+  $iban = db_escape_string($iban);
222
+  $bankname = db_escape_string($bankname);
223
+  $bic = db_escape_string($bic);
224
+  $gueltig_ab = db_escape_string($gueltig_ab);
225 225
 
226 226
   $first_date = date('Y-m-d');
227 227
   $invoices = my_invoices();
Browse code

Zeige fehlgeschlagene Abbuchungen wieder als offene Rechnung an

Bernd Wurst authored on27/01/2014 09:02:58
Showing1 changed files
... ...
@@ -165,7 +165,7 @@ function generate_bezahlcode_image($id)
165 165
 
166 166
 function get_lastschrift($rechnungsnummer) {
167 167
   $rechnungsnummer = (int) $rechnungsnummer;
168
-  $result = db_query("SELECT rechnungsnummer, rechnungsdatum, betrag, buchungsdatum FROM kundendaten.sepalastschrift WHERE rechnungsnummer='${rechnungsnummer}'");
168
+  $result = db_query("SELECT rechnungsnummer, rechnungsdatum, sl.betrag, buchungsdatum FROM kundendaten.sepalastschrift sl LEFT JOIN kundendaten.ausgestellte_rechnungen re ON (re.id=sl.rechnungsnummer) WHERE rechnungsnummer='${rechnungsnummer}' AND re.abbuchung=1");
169 169
   if (mysql_num_rows($result) == 0) {
170 170
     return NULL;
171 171
   }
Browse code

Vorgemerkte Lastschriften anzeigen

Bernd Wurst authored on11/01/2014 18:25:16
Showing1 changed files
... ...
@@ -163,6 +163,26 @@ function generate_bezahlcode_image($id)
163 163
   }
164 164
 }
165 165
 
166
+function get_lastschrift($rechnungsnummer) {
167
+  $rechnungsnummer = (int) $rechnungsnummer;
168
+  $result = db_query("SELECT rechnungsnummer, rechnungsdatum, betrag, buchungsdatum FROM kundendaten.sepalastschrift WHERE rechnungsnummer='${rechnungsnummer}'");
169
+  if (mysql_num_rows($result) == 0) {
170
+    return NULL;
171
+  }
172
+  $item = mysql_fetch_assoc($result);
173
+  return $item;
174
+}
175
+
176
+function get_lastschriften($mandatsreferenz)
177
+{
178
+  $mandatsreferenz = mysql_real_escape_string($mandatsreferenz);
179
+  $result = db_query("SELECT rechnungsnummer, rechnungsdatum, betrag, buchungsdatum FROM kundendaten.sepalastschrift WHERE mandatsreferenz='${mandatsreferenz}' ORDER BY buchungsdatum DESC");
180
+  $ret = array();
181
+  while ($item = mysql_fetch_assoc($result)) {
182
+    $ret[] = $item;
183
+  }
184
+  return $ret;
185
+}
166 186
 
167 187
 function get_sepamandate() 
168 188
 {
... ...
@@ -196,6 +216,13 @@ function invalidate_sepamandat($id, $date)
196 216
 function sepamandat($name, $adresse, $iban, $bankname, $bic, $gueltig_ab)
197 217
 {
198 218
   $cid = (int) $_SESSION['customerinfo']['customerno'];
219
+  $name = mysql_real_escape_string($name);
220
+  $adresse = mysql_real_escape_string($adresse);
221
+  $iban = mysql_real_escape_string($iban);
222
+  $bankname = mysql_real_escape_string($bankname);
223
+  $bic = mysql_real_escape_string($bic);
224
+  $gueltig_ab = mysql_real_escape_string($gueltig_ab);
225
+
199 226
   $first_date = date('Y-m-d');
200 227
   $invoices = my_invoices();
201 228
   foreach ($invoices as $i) {
Browse code

Ermögliche das Berechnen der IBAN aus BLZ/Kontonummer

Bernd Wurst authored on11/01/2014 17:43:19
Showing1 changed files
... ...
@@ -260,4 +260,12 @@ function get_bank_info($iban)
260 260
 }
261 261
 
262 262
 
263
+function find_iban($blz, $kto) 
264
+{
265
+  $iban = sprintf('DE00%08s%010s', $blz, $kto);
266
+  $iban = iban_set_checksum($iban);
267
+  return $iban;
268
+}
269
+
270
+
263 271
 ?>
Browse code

Kleine Korrekturen Ausführungsfrist auf 2 Tage reduziert

Bernd Wurst authored on10/01/2014 13:30:36
Showing1 changed files
... ...
@@ -23,7 +23,7 @@ include("external/php-iban/php-iban.php");
23 23
 function my_invoices()
24 24
 {
25 25
   $c = (int) $_SESSION['customerinfo']['customerno'];
26
-  $result = db_query("SELECT id,datum,betrag,bezahlt,abbuchung FROM kundendaten.ausgestellte_rechnungen WHERE kunde={$c} ORDER BY id DESC");
26
+  $result = db_query("SELECT id,datum,betrag,bezahlt,abbuchung,sepamandat FROM kundendaten.ausgestellte_rechnungen WHERE kunde={$c} ORDER BY id DESC");
27 27
   $ret = array();
28 28
   while($line = mysql_fetch_assoc($result))
29 29
   	array_push($ret, $line);
Browse code

Speichere Gläubiger-ID mit dem Mandat und erlaube auch Mandat für die Vergangenheit, wenn das Datum gleich dem Datum der ältesten offenen Rechnung ist.

Bernd Wurst authored on10/01/2014 13:23:59
Showing1 changed files
... ...
@@ -167,7 +167,7 @@ function generate_bezahlcode_image($id)
167 167
 function get_sepamandate() 
168 168
 {
169 169
   $cid = (int) $_SESSION['customerinfo']['customerno'];
170
-  $result = db_query("SELECT id, mandatsreferenz, erteilt, medium, gueltig_ab, gueltig_bis, erstlastschrift, kontoinhaber, adresse, iban, bic, bankname FROM kundendaten.sepamandat WHERE kunde={$cid}");
170
+  $result = db_query("SELECT id, mandatsreferenz, glaeubiger_id, erteilt, medium, gueltig_ab, gueltig_bis, erstlastschrift, kontoinhaber, adresse, iban, bic, bankname FROM kundendaten.sepamandat WHERE kunde={$cid}");
171 171
   $ret = array();
172 172
   while ($entry = mysql_fetch_assoc($result)) {
173 173
     array_push($ret, $entry);
... ...
@@ -196,7 +196,14 @@ function invalidate_sepamandat($id, $date)
196 196
 function sepamandat($name, $adresse, $iban, $bankname, $bic, $gueltig_ab)
197 197
 {
198 198
   $cid = (int) $_SESSION['customerinfo']['customerno'];
199
-  if ($gueltig_ab < date('Y-m-d')) {
199
+  $first_date = date('Y-m-d');
200
+  $invoices = my_invoices();
201
+  foreach ($invoices as $i) {
202
+    if ($i['bezahlt'] == 0 && $i['datum'] < $first_date) {
203
+      $first_date = $i['datum'];
204
+    }
205
+  }
206
+  if ($gueltig_ab < date('Y-m-d') && $gueltig_ab != $first_date) {
200 207
     system_failure('Das Mandat kann nicht rückwirkend erteilt werden. Bitte geben Sie ein Datum in der Zukunft an.');
201 208
   }
202 209
   $alte_mandate = get_sepamandate();
... ...
@@ -217,8 +224,10 @@ function sepamandat($name, $adresse, $iban, $bankname, $bic, $gueltig_ab)
217 224
   }
218 225
   DEBUG('Nächste freie Mandatsreferenz: '. $referenz);
219 226
 
227
+  $glaeubiger_id = config('glaeubiger_id');
228
+
220 229
   $today = date('Y-m-d');
221
-  db_query("INSERT INTO kundendaten.sepamandat (mandatsreferenz, kunde, erteilt, medium, gueltig_ab, kontoinhaber, adresse, iban, bic, bankname) VALUES ('{$referenz}', {$cid}, '{$today}', 'online', '{$gueltig_ab}', '{$name}', '{$adresse}', '{$iban}', '{$bic}', '{$bankname}')");
230
+  db_query("INSERT INTO kundendaten.sepamandat (mandatsreferenz, glaeubiger_id, kunde, erteilt, medium, gueltig_ab, kontoinhaber, adresse, iban, bic, bankname) VALUES ('{$referenz}', '${glaeubiger_id}', {$cid}, '{$today}', 'online', '{$gueltig_ab}', '{$name}', '{$adresse}', '{$iban}', '{$bic}', '{$bankname}')");
222 231
 }
223 232
 
224 233
 
Browse code

Vervollständige Bankname und BIC automatisch

Bernd Wurst authored on27/12/2013 11:04:38
Showing1 changed files
... ...
@@ -223,4 +223,32 @@ function sepamandat($name, $adresse, $iban, $bankname, $bic, $gueltig_ab)
223 223
 
224 224
 
225 225
 
226
+function get_bank_info($iban) 
227
+{
228
+  if (strlen($iban) != 22 || substr($iban, 0, 2) != 'DE') {
229
+    // Geht nur bei deutschen IBANs
230
+    echo 'Fehler!';
231
+    echo '$iban = '.$iban;
232
+    echo 'strlen($iban): '.strlen($iban);
233
+    echo 'substr($iban, 0, 2): '.substr($iban, 0, 2);
234
+    return NULL;
235
+  }
236
+  $blz = substr($iban, 4, 8);
237
+  // FIXME: Liste der BLZs muss vorhanden sein!
238
+  $bankinfofile = dirname(__FILE__).'/bankinfo.txt';
239
+  $f = file($bankinfofile);
240
+  $match = '';
241
+  foreach ($f as $line) {
242
+    if (substr($line, 0, 9) == $blz.'1') {
243
+      $match = $line;
244
+      break;
245
+    }
246
+  }
247
+  $bank = array();
248
+  $bank['name'] = iconv('latin1', 'utf8', chop(substr($match, 9,58)));
249