5 Rico.loadModule('Calendar');
7 function get_number(name)
9 var elems = name.split(':');
10 if (elems.length == 1) return 0;
11 return Number(elems[elems.length-1]);
14 function select_gebiet_callback(data)
16 select_update('edit_kostenstelle',data.info,1);
19 function select_gebiet(obj)
21 get_info('kostenstellen', {gebiet: obj.options[obj.selectedIndex].value}, select_gebiet_callback);
24 function select_geraet_callback(data)
26 var num = get_number(data.parameter.id);
28 var id = 'edit_anbaugeraet';
29 if (num > 0) id += ':' + num;
31 var obj = document.getElementById(id);
33 if (data.info.length) {
34 if (obj.options.length == 0)
35 obj.options[0] = new Option('Bitte wählen Sie','',false,false);
36 select_update(id,data.info, 1);
38 obj.options.length = 0;
42 function select_geraet(obj)
44 get_info('anbaugeraete',
45 {geraet: obj.options[obj.selectedIndex].value, id: obj.id},
46 select_geraet_callback);
49 function form_onload()
51 get_info('gebiete', {}, function (data) { select_update('edit_gebiet',data.info, 1); });
52 get_info('ordnungen', {}, function (data) { select_update('edit_ordnung',data.info,1); });
53 get_info('mitarbeiter', {}, function (data) { select_update('edit_personal',data.info, 1); });
54 get_info('geraete', {}, function (data) { select_update('edit_geraet',data.info, 1); });
55 get_info('arbeitsarten', {}, function (data) { select_update('edit_arbeitsart',data.info,1); });
58 function replicate_personal()
61 var personal = document.getElementById('edit_personal');
62 var stunden = document.getElementById('edit_stunden');
64 var number = get_number(personal.parentNode.children[personal.parentNode.children.length-1].name) + 1;
66 elem = document.createElement('br');
67 personal.parentNode.appendChild(elem);
69 elem = document.createElement('select');
70 elem.id = 'edit_personal:' + number;
71 elem.name = 'personal:' + number;
72 elem.options[0] = new Option('Bitte wählen Sie','',false,false);
73 personal.parentNode.appendChild(elem);
74 get_info('mitarbeiter', {}, function (data) { select_update('edit_personal:'+number,data.info, 1); });
76 elem = document.createElement('br');
77 stunden.parentNode.appendChild(elem);
79 elem = document.createElement('input');
80 elem.id = 'edit_stunden:' + number;
81 elem.name = 'stunden:' + number;
84 stunden.parentNode.appendChild(elem);
89 function replicate_geraete()
92 var geraet = document.getElementById('edit_geraet');
93 var anbaugeraet = document.getElementById('edit_anbaugeraet');
94 var geraetstunden = document.getElementById('edit_geraetstunden');
96 var number = get_number(geraet.parentNode.children[geraet.parentNode.children.length-1].name) + 1;
98 elem = document.createElement('br');
99 geraet.parentNode.appendChild(elem);
101 elem = document.createElement('select');
102 elem.id = 'edit_geraet:' + number;
103 elem.name = 'geraet:' + number;
104 elem.options[0] = new Option('Bitte wählen Sie','',false,false);
105 elem.onchange = function() { select_geraet(this); };
106 geraet.parentNode.appendChild(elem);
107 get_info('geraete', {}, function (data) { select_update('edit_geraet:'+number,data.info, 1); });
109 elem = document.createElement('br');
110 anbaugeraet.parentNode.appendChild(elem);
112 elem = document.createElement('select');
113 elem.id = 'edit_anbaugeraet:' + number;
114 elem.name = 'anbaugeraet:' + number;
115 anbaugeraet.parentNode.appendChild(elem);
117 elem = document.createElement('br');
118 geraetstunden.parentNode.appendChild(elem);
120 elem = document.createElement('input');
121 elem.id = 'edit_geraetstunden:' + number;
122 elem.name = 'geraetstunden:' + number;
125 geraetstunden.parentNode.appendChild(elem);
130 function einsatz_check()
135 kostenstelle: 'Gewässer',
136 ordnung: 'Gewässerordnung',
137 arbeitsart: 'Arbeiten',
138 personal: 'Mitarbeiter',
142 var elem = document.getElementById('edit_' + id);
144 if (elem.nodeName.toLowerCase() == 'input') {
145 if (!elem.value.length) {
146 alert('Das Feld ' + fields[id] + ' muß ausgefüllt werden');
152 if (elem.nodeName.toLowerCase() == 'select') {
153 if (!elem.options[elem.selectedIndex].value.length) {
154 alert('Das Feld ' + fields[id] + ' muß ausgefüllt werden');
164 function einsatz_callback(data)
166 info('Neuer Arbeitsbericht gespeichert');
167 window.location.reload();
170 function einsatz_submit()
172 if (!einsatz_check()) return false;
174 var form = document.getElementById('edit_form');
175 var source = document.getElementById('source');
176 if (!source || !form) return false;
178 ajax_request('insert', Form.serialize(form) + '&source=' + source.innerHTML, einsatz_callback);
183 Rico.onLoad(form_onload);
189 <form id="edit_form">
191 <table width="100%" cellspacing="2" border="0">
193 <td width="25%"><label for="edit_datum">Datum</label></td>
194 <td width="25%"><label for="edit_gebiet">Gebiet</label></td>
195 <td width="25%"><label for="edit_kostenstelle">Gewässer</label></td>
196 <td width="25%"><label for="edit_ordnung">Gewässerordnung</label></td>
199 <td width="25%"><input id="edit_datum" name="datum" size="8"> <img class="calendar" src="images/icons/calendar.gif" onclick="calendar('edit_datum',event)"></td>
200 <td width="25%"><select id="edit_gebiet" name="gebiet" onchange="select_gebiet(this)"><option value="">Bitte wählen Sie</option></select></td>
201 <td width="25%"><select id="edit_kostenstelle" name="kostenstelle"><option value="">Bitte wählen Sie</option></select></td>
202 <td width="25%"><select id="edit_ordnung" name="ordnung"><option value="">Bitte wählen Sie</option></select></td>
206 <table width="100%" cellspacing="2" border="0" style="border: 1px solid #CCC; border-bottom: none; background: #e5e5e5;">
208 <td width="30%"><label for="edit_personal">Mitarbeiter</label></td>
209 <td width="30%"><label for="edit_stunden">Stunden</label></td>
210 <td width="30%"> </td>
211 <td width="10%"> </td>
214 <td width="30%"><select id="edit_personal" name="personal"><option value="">Bitte wählen Sie</option></select></td>
215 <td width="30%"><input id="edit_stunden" name="stunden" size="5" type="text"></td>
216 <td width="30%"> </td>
217 <td width="10%" align="right"valign="bottom"><button onclick="return replicate_personal()" style="color: red; font-weight: bold;">+ </button></td>
221 <table width="100%" cellspacing="2" border="0" style="border: 1px solid #CCC; background: #e5e5e5;">
223 <td width="30%"><label for="edit_geraet">Gerät</label></td>
224 <td width="30%"><label for="edit_anbaugeraet">Anbaugerät</label></td>
225 <td width="30%"><label for="edit_geraetstunden">Stunden</label></td>
226 <td width="10%"> </td>
229 <td width="30%"><select id="edit_geraet" name="geraet" onchange="select_geraet(this)"><option value="">Bitte wählen Sie</option></select></td>
230 <td width="30%"><select id="edit_anbaugeraet" name="anbaugeraet"></select></td>
231 <td width="30%"><input id="edit_geraetstunden" name="geraetstunden" size="5" type="text"></td>
232 <td width="10%" align="right"valign="bottom"><button onclick="return replicate_geraete()" style="color: red; font-weight: bold;">+ </button></td>
236 <table width="100%" cellspacing="2" border="0" style="margin-top: 5px;">
238 <td width="50%"><label for="edit_bemerkung">Bemerkung</label></td>
239 <td width="25%"><label for="edit_arbeitsart">Arbeiten</label></td>
240 <td width="25%"><label for="edit_akkord">Akkord</label></td>
243 <td width="50%" valign="top"><textarea id="edit_bemerkung" name="bemerkung" cols="66" rows="5"></textarea></td>
244 <td width="25%" valign="top"><select id="edit_arbeitsart" name="arbeitsart"><option value="">Bitte wählen Sie</option></select></td>
245 <td width="25%" valign="top"><input id="edit_akkord" name="akkord" type="checkbox"></td>
250 <div align="center" style="margin-bottom: 5px;"><button onclick="return einsatz_submit()">Hinzufügen</button></div>
255 function einsatz_insert($mask)
257 $date = explode('.',$_POST['datum']);
258 $date = sprintf('%04d-%02d-%02d', $date[2], $date[1], $date[0]);
260 $sql = sprintf("INSERT INTO einsatz (datum,ordnung,gebiet,kostenstelle,arbeiten,akkord,bemerkung,sys_user,sys_edit) " .
261 "VALUES ('%s',%d,%d,%d,%d,%d,%s,'%s',now())",
265 $_POST['kostenstelle'],
266 $_POST['arbeitsart'],
267 $_POST['akkord']==='on'?1:0,
268 empty($_POST['bemerkung']) ? 'NULL' : "'" . pg_escape_string($_POST['bemerkung']) . "'",
269 pg_escape_string($_SESSION['sys']['login']));
271 $sth = pg_query($sql);
273 if ($sth === false) {
274 error_log($sql . ': ' . pg_last_error());
275 return array('error' => pg_last_error(),
279 $sql = "SELECT currval('einsatz_id_seq')";
280 $sth = pg_query($sql);
282 if ($sth === false) {
283 error_log($sql . ': ' . pg_last_error());
284 return array('error' => pg_last_error(),
288 $row = pg_fetch_assoc($sth);
289 $einsatz = $row['currval'];
295 if (empty($_POST['personal'.$app])) break;
297 $_POST['stunden'.$app] = str_replace(',','.',$_POST['stunden'.$app]);
298 $sql = sprintf("INSERT INTO einsatzpersonal (einsatz,personal,stunden,sys_user,sys_edit) " .
299 "VALUES (%d,%d,%.2f,'%s',now())",
301 $_POST['personal'.$app],
302 $_POST['stunden'.$app],
303 pg_escape_string($_SESSION['sys']['login']));
305 $sth = pg_query($sql);
307 if ($sth === false) {
308 error_log($sql . ': ' . pg_last_error());
309 return array('error' => pg_last_error(),
318 if ($num) $app = ':'.$num;
319 if (empty($_POST['geraet'.$app])) break;
320 $_POST['geraetstunden'.$app] = str_replace(',','.',$_POST['geraetstunden'.$app]);
321 $sql = sprintf("INSERT INTO einsatzgeraete (einsatz,geraet,anbaugeraet,stunden,sys_user,sys_edit) " .
322 "VALUES (%d,%d,%s,%.2f,'%s',now())",
324 $_POST['geraet'.$app],
325 empty($_POST['anbaugeraet'.$app]) ? 'NULL' : intval($_POST['anbaugeraet'.$app]),
326 $_POST['geraetstunden'.$app],
327 pg_escape_string($_SESSION['sys']['login']));
329 $sth = pg_query($sql);
331 if ($sth === false) {
332 error_log($sql . ': ' . pg_last_error());
333 return array('error' => pg_last_error(),
340 return array('status' => true);
344 'table' => 'einsatz',
345 'title' => 'Arbeitsberichte',
347 'insert' => einsatz_insert,
350 'sql' => 'SELECT id,gebiet AS text FROM gebiet ORDER BY text',
352 'ordnungen' => array(
353 'sql' => 'SELECT id,name AS text FROM ordnungen ORDER BY id',
355 'mitarbeiter' => array(
356 'sql' => 'SELECT id,name || \', \' || vorname AS text FROM personal WHERE aktiv = 1 ORDER BY text',
359 'sql' => 'SELECT id,geraet AS text FROM gerate ORDER BY text',
361 'arbeitsarten' => array(
362 'sql' => 'SELECT id,arbeitsart AS text FROM arbeitsarten ORDER BY text',
364 'kostenstellen' => array(
365 'sql' => 'SELECT id,kostenstelle AS text FROM kostenstellen WHERE gebiet = {gebiet} ORDER BY text',
367 'anbaugeraete' => array(
368 'sql' => 'SELECT anbaugeraete.id,anbaugeraet as text FROM anbaugeraete ' .
369 'JOIN gerate ON anbaugeraete.geraetetyp = gerate.geraetetyp ' .
370 'WHERE gerate.id = {geraet} ORDER BY text',