9 function label_create(name, number, text)
11 var elem = document.createElement('label');
12 elem.for = 'edit_'+name+':' + number;
13 elem.innerHTML = text;
17 function input_create(name,number,size,value)
19 var elem = document.createElement('input');
20 elem.id = 'edit_'+name+':' + number;
21 elem.name = name + ':' + number;
28 function select_create(name,number,options,selected)
30 var elem = document.createElement('select');
31 elem.id = 'edit_'+name+':' + number;
32 elem.name = name + ':' + number;
35 for (var i=0; i < options.length; i++) {
36 elem.options[i] = new Option(options[i].text,options[i].id,false,false);
37 if (options[i].id == selected) idx = i;
39 elem.selectedIndex = idx;
44 function personal_add_record(obj,number,data)
46 var div = document.createElement('div');
47 div.style.margin = '2px';
48 div.style.padding = '2px';
49 div.style.paddingLeft = '4px';
50 div.style.marginBottom = '4px';
51 div.style.border = '1px solid #aaaaaa';
52 div.style.backgroundColor = '#dbdbdb';
53 div.style.overflow = 'hidden';
56 var elem = input_create('id',number,20,data.id);
58 div.appendChild(elem);
59 elem = label_create('personal',number,'Mitarbeiter');
60 div.appendChild(elem);
61 elem = document.createElement('br');
62 div.appendChild(elem);
63 elem = select_create('personal',number,personal,data.personal);
64 div.appendChild(elem);
65 elem = document.createElement('br');
66 div.appendChild(elem);
67 elem = label_create('stunden',number,'Stunden');
68 div.appendChild(elem);
69 elem = document.createElement('br');
70 div.appendChild(elem);
71 elem = input_create('stunden',number,5,data.stunden);
72 div.appendChild(elem);
75 function select_geraet_callback(data)
77 var id = 'edit_anbaugeraet';
78 id += ':' + data.parameter.number;
81 select_update(id,data.info, 0);
83 var obj = document.getElementById(id);
84 for (var i=0; i < data.info.length; i++)
85 if (data.info[i].id == data.parameter.selected)
86 obj.selectedIndex = i;
89 function geraete_add_record(obj,number,data)
91 var div = document.createElement('div');
92 div.style.margin = '2px';
93 div.style.padding = '2px';
94 div.style.paddingLeft = '4px';
95 div.style.marginBottom = '4px';
96 div.style.border = '1px solid #aaaaaa';
97 div.style.backgroundColor = '#dbdbdb';
98 div.style.overflow = 'hidden';
101 var elem = input_create('id',number,20,data.id);
102 elem.type = 'hidden';
103 div.appendChild(elem);
104 elem = label_create('personal',number,'Gerät');
105 div.appendChild(elem);
106 elem = document.createElement('br');
107 div.appendChild(elem);
108 elem = select_create('geraet',number,geraete,data.geraet);
109 div.appendChild(elem);
110 elem = document.createElement('br');
111 div.appendChild(elem);
113 if (data.anbaugeraet != null) {
114 elem = label_create('anbaugeraet',number,'Anbaugerät');
115 div.appendChild(elem);
116 elem = select_create('anbaugeraet',number,geraete,data.geraet);
117 div.appendChild(elem);
118 elem = document.createElement('br');
119 div.appendChild(elem);
121 get_info('anbaugeraete',
122 {geraet: data.geraet, number: number, selected: data.anbaugeraet},
123 select_geraet_callback);
126 elem = label_create('stunden',number,'Stunden');
127 div.appendChild(elem);
128 elem = document.createElement('br');
129 div.appendChild(elem);
130 elem = input_create('stunden',number,5,data.stunden);
131 div.appendChild(elem);
134 function personal_load_callback(data)
136 var div = document.getElementById('form_edit_parent');
138 while (div.childNodes.length)
139 div.removeChild(div.firstChild);
141 for (var i=0; i < data.info.length; i++) {
142 personal_add_record(div,i,data.info[i]);
146 function geraete_load_callback(data)
148 var div = document.getElementById('form_edit_parent');
150 while (div.childNodes.length)
151 div.removeChild(div.firstChild);
153 for (var i=0; i < data.info.length; i++) {
154 geraete_add_record(div,i,data.info[i]);
158 function personal_load(id)
160 get_info('einsatzpersonal', {id: id}, personal_load_callback);
162 var title = document.getElementById('mask_edit_title');
163 title.innerHTML = 'Personaleinsatz bearbeiten';
165 var type = document.getElementById('edit_data_type');
166 type.value = 'personal';
169 function geraete_load(id)
171 get_info('einsatzgeraete', {id: id}, geraete_load_callback);
173 var title = document.getElementById('mask_edit_title');
174 title.innerHTML = 'Geräteeinsatz bearbeiten';
176 var type = document.getElementById('edit_data_type');
177 type.value = 'geraete';
180 function form_onload()
182 get_info('mitarbeiter', {}, function (data) { personal = data.info });
183 get_info('geraete', {}, function (data) { geraete = data.info });
185 var form = document.getElementById('form_edit');
187 var div = document.createElement('div');
188 div.id = 'form_edit_parent';
189 form.insertBefore(div,form.firstChild);
191 var elem = document.createElement('input');
192 elem.id = 'edit_data_type';
193 elem.name = 'data_type';
194 elem.type = 'hidden';
195 form.insertBefore(elem,form.firstChild);
197 var status = document.getElementById('form_status');
198 status.style.display = 'none';
201 Rico.onLoad(form_onload);
205 function korrektur_save($mask)
207 if ($_POST['data_type'] == 'personal') {
211 if (empty($_POST['id'.$app])) break;
213 $sql = sprintf("SELECT personal,stunden FROM einsatzpersonal WHERE id = %d", $_POST['id'.$app]);
214 $sth = pg_query($sql);
215 $row = pg_fetch_assoc($sth);
217 if ($row['personal'] != $_POST['personal'.$app] ||
218 $row['stunden'] != $_POST['stunden'.$app]) {
219 $sql = sprintf("UPDATE einsatzpersonal SET personal=%d,stunden=%.2f,sys_user='%s',sys_edit=now() WHERE id = %d",
220 $_POST['personal'.$app], $_POST['stunden'.$app],
221 pg_escape_string($_SESSION['sys']['login']),
226 } elseif ($_POST['data_type'] == 'geraete') {
230 if (empty($_POST['id'.$app])) break;
232 $sql = sprintf("SELECT geraet,anbaugeraet,stunden FROM einsatzgeraete WHERE id = %d", $_POST['id'.$app]);
233 $sth = pg_query($sql);
234 $row = pg_fetch_assoc($sth);
236 if ($row['geraet'] != $_POST['geraet'.$app] ||
237 ($row['anbaugeraet'] === NULL && !empty($_POST['anbaugeraet'.$app])) ||
238 ($row['anbaugeraet'] !== NULL && $row['anbaugeraet'] != $_POST['anbaugeraet'.$app]) ||
239 $row['stunden'] != $_POST['stunden'.$app]) {
240 $anbaugeraet = empty($_POST['anbaugeraet'.$app]) ? 'NULL' : intval($_POST['anbaugeraet'.$app]);
242 $sql = sprintf("UPDATE einsatzgeraete SET geraet=%d,anbaugeraet=%s,stunden=%.2f,sys_user='%s',sys_edit=now() WHERE id = %d",
243 $_POST['geraet'.$app],
245 $_POST['stunden'.$app],
246 pg_escape_string($_SESSION['sys']['login']),
253 return array('status' => true);
257 'table' => 'einsatz',
258 'title' => 'Korrektur von Arbeitsberichten',
260 'kostenstellen ON einsatz.kostenstelle = kostenstellen.id',
261 'gebiet ON kostenstellen.gebiet = gebiet.id',
266 'sql' => 'einsatz.id',
278 'sql' => 'gebiet.gebiet',
280 'kostenstelle' => array(
281 'name' => 'Kostenstelle',
283 'sql' => 'kostenstellen.kostenstelle',
286 'name' => 'Personal',
288 'sql' => "(SELECT name || ', ' || vorname FROM personal " .
289 "JOIN einsatzpersonal ON einsatzpersonal.personal = personal.id " .
290 "WHERE einsatzpersonal.einsatz = einsatz.id LIMIT 1)",
293 'name' => 'Personal',
295 'control' => "new Rico.TableColumn.link('javascript:personal_load({0})')",
296 'specs' => "filterUI: 'c', ClassName: 'aligncenter', canSort: false",
297 'sql' => "'bearbeiten'",
302 'control' => "new Rico.TableColumn.link('javascript:geraete_load({0})')",
303 'specs' => "filterUI: 'c', ClassName: 'aligncenter', canSort: false",
304 'sql' => "'bearbeiten'",
307 'edit_table' => 'materialverbrauch',
309 'save' => korrektur_save,
316 'sql' => 'SELECT einheiten.einheit FROM einheiten ' .
317 'JOIN materialien ON materialien.einheit = einheiten.id ' .
318 'WHERE materialien.id = {id}',
320 'einsatzpersonal' => array(
321 'sql' => "SELECT id,personal,stunden " .
322 'FROM einsatzpersonal ' .
323 'WHERE einsatz = {id}',
325 'einsatzgeraete' => array(
326 'sql' => "SELECT id,geraet,anbaugeraet,stunden " .
327 'FROM einsatzgeraete ' .
328 'WHERE einsatz = {id}',
330 'mitarbeiter' => array(
331 'sql' => 'SELECT id,name || \', \' || vorname AS text FROM personal WHERE aktiv = 1 ORDER BY text',
334 'sql' => 'SELECT id,geraet AS text FROM gerate ORDER BY text',
336 'anbaugeraete' => array(
337 'sql' => 'SELECT anbaugeraete.id,anbaugeraet as text FROM anbaugeraete ' .
338 'JOIN gerate ON anbaugeraete.geraetetyp = gerate.geraetetyp ' .
339 'WHERE gerate.id = {geraet} ORDER BY text',