35274775d32add904219080aa30a52e951bb3f25
[infodrom.org/service.infodrom.org] / src / InfoCon / sprit / list.wml
1 #include <infocon.style>
2
3 <future>
4 <page func=InfoCon title="Tankbuch">
5 <script type="text/javascript" src="<root_prefix>jquery.autocomplete.min.js"></script>
6 <script type="text/javascript" src="<root_prefix>jquery.editable.js"></script>
7 <calendar_init -5>
8 <popups>
9 <style type="text/css">
10 div#details {
11     width: 270px;
12 }
13 div.bar {
14     background-color: #98c5e5;
15     border-bottom: 1px solid #AAA;
16     font-size: 14px;
17     font-weight: bold;
18 }
19 div.year {
20     float: left;
21 }
22 table.spritlog tbody td {
23     border-bottom: 1px solid #CCC;
24 }
25 table.spritlog thead th {
26     border-bottom: 1px solid #AAA;
27 }
28 table.spritlog tfoot th {
29     border-top: 1px solid #AAA;
30 }
31 table.spritlog tbody tr:hover {
32     background-color: yellow;
33 }
34 </style>
35
36 <div id="details" class="popup" style="margin-top: 5px;display:none;">
37 <div class="popup_title">Bearbeiten</div>
38 <div class="popup_body">
39 <input type="hidden" id="id" name="id" value="">
40 <input type="hidden" id="machine" name="machine">
41 <label for="date">Datum</label>
42 <input type="text" id="date" name="date" size="8">
43 <img class="calendar" src="<root_prefix>pix/calendar.gif" onclick="event.cancelBubble=true;popcalendar('date');">
44
45 <label for="city">Ort</label>
46 <input type="text" id="city" name="city" size="30">
47 <label for="tankstelle">Tankstelle</label>
48 <input type="text" id="tankstelle" name="tankstelle" size="30">
49
50 <label for="price_liter">Preis pro Liter</label>
51 <input type="text" id="price_liter" name="price_liter" size="30">
52
53 <label for="liter">Liter / Preis</label>
54 <input type="text" id="liter" name="liter" size="13">
55 <input type="text" id="price" name="price" size="13">
56
57 <label for="km">Tageskilometer / Gesamt</label>
58 <input type="text" id="km" name="km" size="13">
59 <input type="text" id="km_total" name="km_total" size="13">
60
61 <div style="margin-top: 8px; text-align: center;">
62 <input type="submit" onclick="return log_save()" value="Speichern">
63 &nbsp;&nbsp;&nbsp;
64 <input type="submit" onclick="$('#details').hide();return false" value="Abbrechen">
65 </div>
66  </div>
67 </div>
68
69 <?php
70   $log = new SpritLog();
71   $list = $log->distinctYears();
72   foreach ($list as $row) {
73     echo '<div class="bar">';
74     printf('<div year="%d" class="year">%d</div>', $row->year, $row->year);
75     printf('<div style="float:right;">&euro; %.2f&nbsp;&nbsp;%d km</div>', $row->sum, $row->km);
76     echo '<div style="clear:both;"></div></div>';
77     printf('<div id="list_%d" style="display:none;"></div>', $row->year);
78   }
79   if (count($list)) {
80     $out = <<<EOT
81 <script type="text/javascript">
82 $(function(){
83     load_year({$list[0]->year});
84     $('div.bar').click(toggle_year);
85 });
86 </script>
87 EOT;
88 echo $out;
89   }
90 ?>
91 <div style="height:10px;"></div>
92 </page>
93 <protect><script text="text/javascript">
94 $(function(){
95     $('#city').autocomplete({
96         deferRequestBy: 500,
97         lookup: function(query, done){
98             $.invoke('SpritLog/SuggestCity', {query: query}, function(data){
99                 done(data);
100             });
101         }
102     });
103     $('#tankstelle').autocomplete({
104         minChars: 0,
105         deferRequestBy: 500,
106         lookup: function(query, done){
107             $.invoke('SpritLog/SuggestTankstelle', {query: query, city: $('#city').val()}, function(data){
108                 done(data);
109             });
110         }
111     });
112 });
113 var sprit_machine = <?=intval($_POST['machine'])?>;
114 function log_new()
115 {
116     $('#details input').not('input[type="submit"]').val('');
117     $('input#machine').val(sprit_machine);
118     if ($('#details').css('left') == '0px')
119       $('#details').css('left', ($(window).width()-280)+'px').css('top', '30px');
120     $('#details').show();
121     $('#date').focus();
122     return false;
123 }
124
125 function log_save()
126 {
127     $.invoke('SpritLog/Add', $('#details input').serialize(), function(data){
128         load_year(data.year);
129         $('#details').hide();
130     });
131
132     return false;
133 }
134
135 function toggle_year(event)
136 {
137     var year = $(this).find('div.year').attr('year');
138
139     if ($('div#list_'+year).is(':visible'))
140         $('div#list_'+year).hide();
141     else
142         load_year(year);
143 }
144
145 function load_year(year)
146 {
147     $('div#list_'+year).show();
148     $.invoke('SpritLog/List', {year: year}, function(data){
149         make_editable('div#list_'+year+' td span');
150     });
151 }
152 </script></protect>