From 6b50b6a0d34635a87a6825ef4540d95ce1962d59 Mon Sep 17 00:00:00 2001 From: Joey Schulze Date: Thu, 26 Apr 2018 22:32:59 +0200 Subject: [PATCH] Support automatic generation and calculation for reimbursements --- class/sales.class.php | 42 +++++++++++++++++++ src/InfoCon/buch/reimbursement.wml | 66 ++++++++++++++++++++++++++++++ src/InfoCon/buch/submenu.inc | 1 + 3 files changed, 109 insertions(+) create mode 100644 src/InfoCon/buch/reimbursement.wml diff --git a/class/sales.class.php b/class/sales.class.php index 3a0292d..326750b 100644 --- a/class/sales.class.php +++ b/class/sales.class.php @@ -8,6 +8,48 @@ class Sales extends DatabaseTable { parent::__construct('sales', $id); } + public function getOpenItems($from=false, $to=false) + { + $sql = "SELECT nr,date,description,price * 100 AS price FROM sales WHERE paid = 0 AND visible = 1 ORDER BY date,nr"; + return $this->db->fetchObjectList($sql); + } + + public function ajaxSubtotal() + { + + $text = ''; + $commands = ''; + $total = 0; + + foreach ($_POST['nr'] as &$nr) + $nr = intval($nr); + + $sql = sprintf("SELECT nr,date,description,price * 100 AS price FROM sales WHERE nr IN (%s) ORDER BY date,nr", + implode(', ', $_POST['nr'])); + + foreach ($this->db->fetchObjectList($sql) as $row) { + $date = substr ($row->date,6,2) . "." . substr ($row->date,4,2) . "." . substr ($row->date,0,4); + $text .= utf8_encode(sprintf("%d %s %-53s %8.2f\n", $row->nr, $date, substr($row->description,0,53), $row->price / 100)); + $commands .= sprintf("infocon --date %s --pay %d\n", date('Y-m-d', time()+60*60*24), $row->nr); + $total += $row->price; + } + + if ($total != 0) { + + $text = "Liste der Buchungen\n" . str_repeat('=', 78) . "\n" . $text; + $text .= str_repeat('=', 78) . sprintf("\n%-69s %8.2f\n", 'Zwischensumme', $total / 100); + + $mail = new Mail(); + $mail->env_from(MAIL_FROM); + $mail->set('From', mb_encode_mimeheader(utf8_decode(sprintf("%s <%s>", MAIL_FROM_NAME, MAIL_FROM)),'latin1')); + $mail->set('To', MAIL_ERROR); + $mail->set('Subject', 'Erstattungen'); + $mail->send($text . "\n\n" . $commands); + } + + return true; + } + public function setPaid() { return $this->modify('paid', 1); diff --git a/src/InfoCon/buch/reimbursement.wml b/src/InfoCon/buch/reimbursement.wml new file mode 100644 index 0000000..010fa89 --- /dev/null +++ b/src/InfoCon/buch/reimbursement.wml @@ -0,0 +1,66 @@ +#include + + + + + + +

Erstattungen / Offene Buchungen

+ +
+getOpenItems() as $row) { + $date = substr ($row->date,6,2) . "." . substr ($row->date,4,2) . "." . substr ($row->date,0,4); + printf(' ', $row->nr, $row->price); + printf('%d  %s %s (%.2f €)
', + $row->price < 0 ? 'out' : 'in', + $row->nr, $date, $row->description, $row->price / 100); + } +?> +Zwischensumme € +

+

+ +
+ + + diff --git a/src/InfoCon/buch/submenu.inc b/src/InfoCon/buch/submenu.inc index 2a4c749..94c8757 100644 --- a/src/InfoCon/buch/submenu.inc +++ b/src/InfoCon/buch/submenu.inc @@ -1,6 +1,7 @@ Menu
 

 
-- 2.20.1