3 $SQL_CREATE_EARNINGS = sprintf('
4 CREATE TABLE IF NOT EXISTS `%1$s` (
5 `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
7 `type` ENUM(\'donation\', \'fee\', \'old_fee\', \'interest\', \'account_transfer\', \'room\', \'catering\') NULL,
8 `status` ENUM(\'open\',\'paid\') NOT NULL,
9 `account` ENUM(\'bank\',\'cash\') NOT NULL,
10 `value` DECIMAL(10,2) NULL,
11 `member_id` INT(10) UNSIGNED NOT NULL,
12 `description` TEXT NOT NULL,
13 `created_at` DATETIME NOT NULL,
14 `modified_at` DATETIME NOT NULL,
16 INDEX `idx_member_id` (`member_id`),
17 INDEX `idx_date` (`date`)
18 ) ENGINE=InnoDB DEFAULT CHARSET=%2$s
19 ', DB_TABLE_EARNINGS, DB_CHARSET);
21 $EARNING_TYPES = array(
22 'fee' => 'Mitgliedsbeitrag',
23 'donation' => 'Spende',
24 'interest' => 'Zinsen',
25 'room' => 'Raumeinnahme',
26 'account_transfer' => 'Umbuchung',
27 'old_fee' => 'MitgliedsbeitrÃĪge vor dem ' . format_date(DIRECTDEBIT_DATE),
28 'catering' => 'Raum - Getraenke & Snacks'
32 /* DB functions {{{ */
34 function db_get_earning_with_id($earning_id)
36 $sql = 'SELECT * FROM %1$s WHERE id=\'%2$d\' LIMIT 1';
37 return db_select_single(sprintf($sql, DB_TABLE_EARNINGS, db_escape($earning_id)));
40 function db_create_earning($earning)
42 unset($earning['id']);
43 $earning['date'] = db_unixtime2datetime(ui_date2unixtime($earning['date']));
44 $earning['value'] = ui_money2float($earning['value']);
45 $earning['created_at'] = db_unixtime2datetime(time());
46 $earning['modified_at'] = db_unixtime2datetime(time());
47 return (db_insert_single(DB_TABLE_EARNINGS, $earning));
50 function db_change_earning($earning)
53 unset($earning['id']);
54 $earning['date'] = db_unixtime2datetime(ui_date2unixtime($earning['date']));
55 $earning['value'] = ui_money2float($earning['value']);
56 $earning['modified_at'] = db_unixtime2datetime(time());
57 return db_update_single(DB_TABLE_EARNINGS, $earning, sprintf('id=\'%1$d\'', db_escape($id)));
60 function db_delete_earning($earning)
62 return db_delete_single(DB_TABLE_EARNINGS, sprintf('id=\'%1$d\'', db_escape($earning['id'])));
68 function validate_earning($userdata, &$dbdata, &$validation)
70 global $EARNING_TYPES, $ACCOUNT_TYPES;
74 'type' => $EARNING_TYPES,
75 'account' => $ACCOUNT_TYPES,
76 'member_id' => 'member',
78 'description' => 'text',
79 // 'status' - See below...
82 $dbdata['status'] = empty($userdata['status']) ? 'open' : 'paid';
83 foreach ($fields as $name => $type) {
84 if (!isset($userdata[$name])) {
87 $dbdata[$name] = $userdata[$name];
90 if (empty($dbdata['date'])) {
91 $validation[] = 'Bitte ein Datum angeben.';
93 if ((float)ui_money2float($dbdata['value']) == 0) {
94 $validation[] = 'Bitte einen Betrag angeben.';
97 return (count($validation) == 0);
101 function action_create_earning()
104 $earning['date'] = format_date(time());
105 $earning['status'] = 'paid';
106 $log_messages = array();
107 if (isset($_POST['submit'])) {
109 if (validate_earning($_POST, $earning, $log_messages)) {
110 if (db_create_earning($earning)) {
111 redirect(link_to('finances'));
116 form_earning($earning, 'create', $log_messages);
120 function action_change_earning()
122 if (!isset($_REQUEST['id'])) {
123 redirect(link_to('finances'));
125 $earning = db_get_earning_with_id($_REQUEST['id']);
126 if (!isset($earning)) {
127 redirect(link_to('finances'));
129 $earning['date'] = format_date(db_date2unixtime($earning['date']));
130 $earning['value'] = format_money($earning['value']);
131 $log_messages = array();
132 if (isset($_POST['submit'])) {
133 if (validate_earning($_POST, $earning, $log_messages)) {
134 if (db_change_earning($earning)) {
135 redirect(link_to('finances'));
141 form_earning($earning, 'change', $log_messages);
145 function action_delete_earning()
147 if (!isset($_REQUEST['id'])) {
148 redirect(link_to('finances'));
150 $earning = db_get_earning_with_id($_REQUEST['id']);
151 if (!isset($earning)) {
152 redirect(link_to('finances'));
154 $earning['date'] = format_date(db_date2unixtime($earning['date']));
155 $earning['value'] = format_money($earning['value']);
156 $log_messages = array();
157 if (isset($_POST['submit'])) {
158 if (db_delete_earning($earning)) {
159 redirect(link_to('finances'));
163 form_earning($earning, 'delete', $log_messages);
167 function form_earning($earning = array(), $task, $log_messages)
169 global $EARNING_TYPES, $ACCOUNT_TYPES;
171 $readonly = ($task == 'delete');
174 <form action="<?= link_to($task . '_earning') ?>" method="post" class="clearfix" id="earning_form"
175 style="<?php if ($_REQUEST['action'] == 'finances') : ?>float: left<?php else : ?>margin-top: 2em<?php endif ?>">
176 <?php if (isset($earning['id'])) : ?><?= html_hidden_field('id', $earning) ?><?php endif ?>
178 <?php if ($task == 'create') : ?>
179 <legend>Neue Einnahme</legend>
180 <?php elseif ($task == 'delete') : ?>
181 <legend>Einnahme löschen</legend>
182 <?php elseif ($task == 'change') : ?>
183 <legend>Einnahme ändern</legend>
185 <?php log_messages($log_messages); ?>
186 <?= html_text_field('Datum', 'date', $earning, $readonly) ?>
187 <?= html_list_box('Typ', 'type', $EARNING_TYPES, $earning, $readonly) ?>
188 <?= html_member_list_box('Mitglied', 'member_id', $earning, $readonly) ?>
189 <?= html_money_field('Betrag', 'value', $earning, $readonly) ?>
190 <?= html_text_field('Beschreibung', 'description', $earning, $readonly) ?>
191 <?= html_list_box('Ziel', 'account', $ACCOUNT_TYPES, $earning, $readonly) ?>
192 <?= html_checkbox('Bezahlt', 'status', $earning['status'] == 'paid', 1, $readonly) ?>
194 <?php if ($task == 'delete') : ?>
195 <input class="submit" type="submit" name="submit" value="Löschen"/>
197 <input class="submit" type="submit" name="submit" value="Speichern"/>
200 <?php if ($task == 'change') : ?>
202 <a href="<?= html_escape(link_to('delete_earning', array('id' => $earning['id']))) ?>">Einnahme löschen</a>
203 <a href="<?= html_escape(link_to('finances')) ?>">Neue Einnahme</a>
204 <?php elseif ($task == 'delete') : ?>
206 <a href="<?= html_escape(link_to('finances')) ?>">Neue Einnahme</a>
212 function action_create_earnings()
214 if (empty($_POST['earnings']) || !is_array($_POST['earnings'])) {
215 redirect(link_to('finances'));
218 foreach ($_POST['earnings'] as $post_data) {
219 $log_messages = array();
221 unset($post_data['id']);
225 if (validate_earning($post_data, $earning, $log_messages)) {
226 if (!db_create_earning($earning)) {
233 echo '<h2>Verbuchen von Einnahmen</h2><p>Beim Verbuchen der Einnahmen ist ein Fehler aufgetreten:</p>';
234 log_messages($log_messages);
240 // SET directdebit from FRST to RCUR
241 foreach ($_POST['earnings'] as $post_data) {
242 $member['modified_at'] = db_unixtime2datetime(time());
243 $member['directdebit'] = 3; // RCUR
244 db_update_single(DB_TABLE_MEMBERS, $member,
245 sprintf('directdebit=\'2\' AND id=\'%1$d\'', db_escape($post_data['member_id'])));
248 redirect(link_to('finances'));