0) id += ':' + num; var obj = document.getElementById(id); if (data.info.length) { if (obj.options.length == 0) obj.options[0] = new Option('Bitte wählen Sie','',false,false); select_update(id,data.info, 1); } else obj.options.length = 0; } function select_geraet(obj) { get_info('anbaugeraete', {geraet: obj.options[obj.selectedIndex].value, id: obj.id}, select_geraet_callback); } function form_onload() { get_info('gebiete', {}, function (data) { select_update('edit_gebiet',data.info, 1); }); get_info('ordnungen', {}, function (data) { select_update('edit_ordnung',data.info,1); }); get_info('mitarbeiter', {}, function (data) { select_update('edit_personal',data.info, 1); }); get_info('geraete', {}, function (data) { select_update('edit_geraet',data.info, 1); }); get_info('arbeitsarten', {}, function (data) { select_update('edit_arbeitsart',data.info,1); }); } function replicate_personal() { var elem; var personal = document.getElementById('edit_personal'); var stunden = document.getElementById('edit_stunden'); var number = get_number(personal.parentNode.children[personal.parentNode.children.length-1].name) + 1; elem = document.createElement('br'); personal.parentNode.appendChild(elem); elem = document.createElement('select'); elem.id = 'edit_personal:' + number; elem.name = 'personal:' + number; elem.options[0] = new Option('Bitte wählen Sie','',false,false); personal.parentNode.appendChild(elem); get_info('mitarbeiter', {}, function (data) { select_update('edit_personal:'+number,data.info, 1); }); elem = document.createElement('br'); stunden.parentNode.appendChild(elem); elem = document.createElement('input'); elem.id = 'edit_stunden:' + number; elem.name = 'stunden:' + number; elem.type = 'text'; elem.size = 5; stunden.parentNode.appendChild(elem); return false; } function replicate_geraete() { var elem; var geraet = document.getElementById('edit_geraet'); var anbaugeraet = document.getElementById('edit_anbaugeraet'); var geraetstunden = document.getElementById('edit_geraetstunden'); var number = get_number(geraet.parentNode.children[geraet.parentNode.children.length-1].name) + 1; elem = document.createElement('br'); geraet.parentNode.appendChild(elem); elem = document.createElement('select'); elem.id = 'edit_geraet:' + number; elem.name = 'geraet:' + number; elem.options[0] = new Option('Bitte wählen Sie','',false,false); elem.onchange = function() { select_geraet(this); }; geraet.parentNode.appendChild(elem); get_info('geraete', {}, function (data) { select_update('edit_geraet:'+number,data.info, 1); }); elem = document.createElement('br'); anbaugeraet.parentNode.appendChild(elem); elem = document.createElement('select'); elem.id = 'edit_anbaugeraet:' + number; elem.name = 'anbaugeraet:' + number; anbaugeraet.parentNode.appendChild(elem); elem = document.createElement('br'); geraetstunden.parentNode.appendChild(elem); elem = document.createElement('input'); elem.id = 'edit_geraetstunden:' + number; elem.name = 'geraetstunden:' + number; elem.type = 'text'; elem.size = 5; geraetstunden.parentNode.appendChild(elem); return false; } function einsatz_check() { var fields = { datum: 'Datum', gebiet: 'Gebiet', kostenstelle: 'Gewässer', ordnung: 'Gewässerordnung', arbeitsart: 'Arbeiten', personal: 'Mitarbeiter', stunden: 'Stunden'}; for (id in fields) { var elem = document.getElementById('edit_' + id); if (elem.nodeName.toLowerCase() == 'input') { if (!elem.value.length) { alert('Das Feld ' + fields[id] + ' muß ausgefüllt werden'); return false; } continue; } if (elem.nodeName.toLowerCase() == 'select') { if (!elem.options[elem.selectedIndex].value.length) { alert('Das Feld ' + fields[id] + ' muß ausgefüllt werden'); return false; } continue; } } return true; } function einsatz_callback(data) { info('Neuer Arbeitsbericht gespeichert'); window.location.reload(); } function einsatz_submit() { if (!einsatz_check()) return false; var form = document.getElementById('edit_form'); var source = document.getElementById('source'); if (!source || !form) return false; ajax_request('insert', Form.serialize(form) + '&source=' + source.innerHTML, einsatz_callback); return false; } Rico.onLoad(form_onload); EOC; $formular = <<
 
   
 
 
EOC; function einsatz_insert($mask) { $date = explode('.',$_POST['datum']); $date = sprintf('%04d-%02d-%02d', $date[2], $date[1], $date[0]); $sql = sprintf("INSERT INTO einsatz (datum,ordnung,gebiet,kostenstelle,arbeiten,akkord,bemerkung,sys_user,sys_edit) " . "VALUES ('%s',%d,%d,%d,%d,%d,%s,'%s',now())", $date, $_POST['ordnung'], $_POST['gebiet'], $_POST['kostenstelle'], $_POST['arbeitsart'], $_POST['akkord']==='on'?1:0, empty($_POST['bemerkung']) ? 'NULL' : "'" . pg_escape_string($_POST['bemerkung']) . "'", pg_escape_string($_SESSION['sys']['login'])); $sth = pg_query($sql); if ($sth === false) { error_log($sql . ': ' . pg_last_error()); return array('error' => pg_last_error(), 'sql' => $sql); } $sql = "SELECT currval('einsatz_id_seq')"; $sth = pg_query($sql); if ($sth === false) { error_log($sql . ': ' . pg_last_error()); return array('error' => pg_last_error(), 'sql' => $sql); } $row = pg_fetch_assoc($sth); $einsatz = $row['currval']; $num = 0;$app=''; while (true) { if ($num) { $app = ':'.$num; if (empty($_POST['personal'.$app])) break; } $_POST['stunden'.$app] = str_replace(',','.',$_POST['stunden'.$app]); $sql = sprintf("INSERT INTO einsatzpersonal (einsatz,personal,stunden,sys_user,sys_edit) " . "VALUES (%d,%d,%.2f,'%s',now())", $einsatz, $_POST['personal'.$app], $_POST['stunden'.$app], pg_escape_string($_SESSION['sys']['login'])); $sth = pg_query($sql); if ($sth === false) { error_log($sql . ': ' . pg_last_error()); return array('error' => pg_last_error(), 'sql' => $sql); } $num++; } $num = 0;$app=''; while (true) { if ($num) $app = ':'.$num; if (empty($_POST['geraet'.$app])) break; $_POST['geraetstunden'.$app] = str_replace(',','.',$_POST['geraetstunden'.$app]); $sql = sprintf("INSERT INTO einsatzgeraete (einsatz,geraet,anbaugeraet,stunden,sys_user,sys_edit) " . "VALUES (%d,%d,%s,%.2f,'%s',now())", $einsatz, $_POST['geraet'.$app], empty($_POST['anbaugeraet'.$app]) ? 'NULL' : intval($_POST['anbaugeraet'.$app]), $_POST['geraetstunden'.$app], pg_escape_string($_SESSION['sys']['login'])); $sth = pg_query($sql); if ($sth === false) { error_log($sql . ': ' . pg_last_error()); return array('error' => pg_last_error(), 'sql' => $sql); } $num++; } return array('status' => true); } $mask = array( 'table' => 'einsatz', 'title' => 'Arbeitsberichte', 'html' => $formular, 'insert' => einsatz_insert, 'info' => array( 'gebiete' => array( 'sql' => 'SELECT id,gebiet AS text FROM gebiet ORDER BY text', ), 'ordnungen' => array( 'sql' => 'SELECT id,name AS text FROM ordnungen ORDER BY id', ), 'mitarbeiter' => array( 'sql' => 'SELECT id,name || \', \' || vorname AS text FROM personal WHERE aktiv = 1 ORDER BY text', ), 'geraete' => array( 'sql' => 'SELECT id,geraet AS text FROM gerate ORDER BY text', ), 'arbeitsarten' => array( 'sql' => 'SELECT id,arbeitsart AS text FROM arbeitsarten ORDER BY text', ), 'kostenstellen' => array( 'sql' => 'SELECT id,kostenstelle AS text FROM kostenstellen WHERE gebiet = {gebiet} ORDER BY text', ), 'anbaugeraete' => array( 'sql' => 'SELECT anbaugeraete.id,anbaugeraet as text FROM anbaugeraete ' . 'JOIN gerate ON anbaugeraete.geraetetyp = gerate.geraetetyp ' . 'WHERE gerate.id = {geraet} ORDER BY text', ), ), ); ?>