Name some colors
[infodrom.org/service.infodrom.org] / class / spritlog.class.php
1 <?php
2
3 class SpritLog extends DatabaseTable {
4   protected $machine = false;
5
6   public function __construct($id=false)
7   {
8     parent::__construct('sprit_log', $id);
9   }
10
11   public function setMachine($machine)
12   {
13       $this->machine = $machine;
14   }
15
16   public function distinctYears()
17   {
18     $sql = "SELECT EXTRACT(YEAR from date) AS year,sum(price) AS sum,sum(km) AS km FROM sprit_log " .
19         ($this->machine ? "WHERE machine = {$this->machine} " : "") .
20         "GROUP BY year ORDER BY year DESC";
21     return $this->db->fetchObjectList($sql);
22   }
23
24   public function formatYear($year)
25   {
26     $out = '';
27     $sql = sprintf("SELECT * FROM sprit_log WHERE %sEXTRACT(YEAR from date) = %d ORDER BY date ASC",
28                    $this->machine ? "machine = {$this->machine} AND " : "",
29                    $year);
30
31     $total_km = 0;
32     $total_liter = 0;
33     $total_price = 0;
34     foreach ($this->db->fetchObjectList($sql) as $row) {
35       $out .= sprintf('<tr id="%d"><td>%s</td><td>%s</td><td><span route="SpritLog/EditTankstelle" item_id="%d">%s</span></td>' .
36                       '<td class="right">%.3f</td><td class="right">%.2f</td><td class="right">%.2f</td>' .
37                       '<td class="right">%d</td><td class="right">%d</td></tr>',
38                       $row->id, assert_german_date($row->date),
39                       $row->city, $row->id, $row->tankstelle,
40                       $row->price_liter, $row->liter,$row->price,
41                       $row->km, $row->km_total);
42       $total_km += $row->km;
43       $total_liter += $row->liter;
44       $total_price += $row->price;
45     }
46
47     if (strlen($out)) {
48       $out = '<table class="smallfont spritlog" width="100%">' .
49         '<thead><tr>' .
50         '<th width="70">Datum</th><th width="130" class="left">Ort</th><th class="left">Tankstelle</th>' .
51         '<th width="40">EUR/l</th><th width="40">l</th><th width="40">EUR</th><th width="40">km</th><th width="40">gesamt</th>' .
52         '</tr></thead>' .
53         '<tbody>' . $out . '</tbody>' .
54         '<tfoot><tr>' .
55         '<th colspan="4" class="left">Summe</th>' .
56         sprintf('<th class="right">%.2f</th><th class="right">%.2f</th><th class="right">%d</th><th>&nbsp;</th>',
57                 $total_liter, $total_price, $total_km).
58         '</tr></tfoot>' .
59         '</table>';
60     }
61     return array($out, $total_liter, $total_price, $total_km);
62   }
63
64   public function ajaxList(Array $data)
65   {
66     if (isset($data['machine']))
67         $this->setMachine($data['machine']);
68     list($table, $liter, $price, $km) = $this->formatYear($data['year']);
69
70     return array('html' => array('list_'.$data['year'] => $table,
71                                  'sum_'.$data['year'] => sprintf('&euro; %.2f&nbsp;&nbsp;%d km', $price, $km),
72                                  ));
73   }
74
75   public function ajaxAdd(Array $data)
76   {
77     $data = array('machine' => intval($data['machine']),
78                   'date' => assert_iso_date($data['date']),
79                   'city' => $data['city'],
80                   'tankstelle' => $data['tankstelle'],
81                   'price_liter' => str_replace(',','.',$data['price_liter']),
82                   'liter' => str_replace(',','.',$data['liter']),
83                   'price' => str_replace(',','.',$data['price']),
84                   'km' => intval($data['km']),
85                   'km_total' => intval($data['km_total']),
86                   'sys_edit' => 'now()',
87                   'sys_user' => $_SERVER['REMOTE_USER']);
88
89     foreach ($data as $k => $v)
90       if (empty($v))
91         return ajax_error(sprintf('Field %s must not be empty', $k));
92
93     if (empty($data['id'])) {
94       $ok = $this->db->insertInto('sprit_log', $data);
95     } else {
96       $ok = $this->db->update('sprit_log', $data, 'id = ' . intval($data['id']));
97     }
98
99     $d = explode('-', $data['date']);
100     return array('status' => $ok, 'year' => $d[0]);
101   }
102
103   public function ajaxSuggestCity(Array $data)
104   {
105     $data['query'] .= '%';
106     $sql = sprintf("SELECT DISTINCT city FROM sprit_log WHERE lower(city) LIKE %s ORDER BY city",
107                    $this->quote(strtolower($data['query'])));
108     $list = array();
109     foreach ($this->fetchObjectList($sql) as $row)
110       $list[] = array('value' => $row->city, 'data' => $row->city);
111     return array('suggestions' => $list);
112   }
113
114   public function ajaxSuggestTankstelle(Array $data)
115   {
116     $data['query'] .= '%';
117     $sql = sprintf("SELECT DISTINCT tankstelle FROM sprit_log WHERE city = %s AND lower(tankstelle) LIKE %s ORDER BY tankstelle",
118                    $this->quote($data['city']),
119                    $this->quote(strtolower($data['query'])));
120     $list = array();
121     foreach ($this->fetchObjectList($sql) as $row)
122       $list[] = array('value' => $row->tankstelle, 'data' => $row->tankstelle);
123     return array('suggestions' => $list);
124   }
125
126   public function ajaxEditTankstelle(Array $data)
127   {
128     if (!strlen($data['content'])) return false;
129     return $this->modify('tankstelle', $data['content']);
130   }
131
132 }