--- /dev/null
+<?php
+
+$jscode[] = <<<EOC
+
+post_save = false;
+
+var personal = false;
+var geraete = false;
+function label_create(name, number, text)
+{
+ var elem = document.createElement('label');
+ elem.for = 'edit_'+name+':' + number;
+ elem.innerHTML = text;
+ return elem;
+}
+
+function input_create(name,number,size,value)
+{
+ var elem = document.createElement('input');
+ elem.id = 'edit_'+name+':' + number;
+ elem.name = name + ':' + number;
+ elem.type = 'text';
+ elem.size = size;
+ elem.value = value;
+ return elem;
+}
+
+function select_create(name,number,options,selected)
+{
+ var elem = document.createElement('select');
+ elem.id = 'edit_'+name+':' + number;
+ elem.name = name + ':' + number;
+
+ var idx;
+ for (var i=0; i < options.length; i++) {
+ elem.options[i] = new Option(options[i].text,options[i].id,false,false);
+ if (options[i].id == selected) idx = i;
+ }
+ elem.selectedIndex = idx;
+
+ return elem;
+}
+
+function personal_add_record(obj,number,data)
+{
+ var div = document.createElement('div');
+ div.style.margin = '2px';
+ div.style.padding = '2px';
+ div.style.paddingLeft = '4px';
+ div.style.marginBottom = '4px';
+ div.style.border = '1px solid #aaaaaa';
+ div.style.backgroundColor = '#dbdbdb';
+ div.style.overflow = 'hidden';
+ obj.appendChild(div);
+
+ var elem = input_create('id',number,20,data.id);
+ elem.type = 'hidden';
+ div.appendChild(elem);
+ elem = label_create('personal',number,'Mitarbeiter');
+ div.appendChild(elem);
+ elem = document.createElement('br');
+ div.appendChild(elem);
+ elem = select_create('personal',number,personal,data.personal);
+ div.appendChild(elem);
+ elem = document.createElement('br');
+ div.appendChild(elem);
+ elem = label_create('stunden',number,'Stunden');
+ div.appendChild(elem);
+ elem = document.createElement('br');
+ div.appendChild(elem);
+ elem = input_create('stunden',number,20,data.stunden);
+ div.appendChild(elem);
+}
+
+function select_geraet_callback(data)
+{
+ var id = 'edit_anbaugeraet';
+ id += ':' + data.parameter.number;
+
+ if (data.info.length)
+ select_update(id,data.info, 0);
+
+ var obj = document.getElementById(id);
+ for (var i=0; i < data.info.length; i++)
+ if (data.info[i].id == data.parameter.selected)
+ obj.selectedIndex = i;
+}
+
+function geraete_add_record(obj,number,data)
+{
+ var div = document.createElement('div');
+ div.style.margin = '2px';
+ div.style.padding = '2px';
+ div.style.paddingLeft = '4px';
+ div.style.marginBottom = '4px';
+ div.style.border = '1px solid #aaaaaa';
+ div.style.backgroundColor = '#dbdbdb';
+ div.style.overflow = 'hidden';
+ obj.appendChild(div);
+
+ var elem = input_create('id',number,20,data.id);
+ elem.type = 'hidden';
+ div.appendChild(elem);
+ elem = label_create('personal',number,'Gerät');
+ div.appendChild(elem);
+ elem = document.createElement('br');
+ div.appendChild(elem);
+ elem = select_create('geraet',number,geraete,data.geraet);
+ div.appendChild(elem);
+ elem = document.createElement('br');
+ div.appendChild(elem);
+
+ if (data.anbaugeraet != null) {
+ elem = label_create('anbaugeraet',number,'Anbaugerät');
+ div.appendChild(elem);
+ elem = select_create('anbaugeraet',number,geraete,data.geraet);
+ div.appendChild(elem);
+ elem = document.createElement('br');
+ div.appendChild(elem);
+
+ get_info('anbaugeraete',
+ {geraet: data.geraet, number: number, selected: data.anbaugeraet},
+ select_geraet_callback);
+ }
+
+ elem = label_create('stunden',number,'Stunden');
+ div.appendChild(elem);
+ elem = document.createElement('br');
+ div.appendChild(elem);
+ elem = input_create('stunden',number,20,data.stunden);
+ div.appendChild(elem);
+}
+
+function personal_load_callback(data)
+{
+ var div = document.getElementById('form_edit_parent');
+
+ while (div.childNodes.length)
+ div.removeChild(div.firstChild);
+
+ for (var i=0; i < data.info.length; i++) {
+ personal_add_record(div,i,data.info[i]);
+ }
+}
+
+function geraete_load_callback(data)
+{
+ var div = document.getElementById('form_edit_parent');
+
+ while (div.childNodes.length)
+ div.removeChild(div.firstChild);
+
+ for (var i=0; i < data.info.length; i++) {
+ geraete_add_record(div,i,data.info[i]);
+ }
+}
+
+function personal_load(id)
+{
+ get_info('einsatzpersonal', {id: id}, personal_load_callback);
+
+ var title = document.getElementById('mask_edit_title');
+ title.innerHTML = 'Personaleinsatz bearbeiten';
+
+ var type = document.getElementById('edit_data_type');
+ type.value = 'personal';
+}
+
+function geraete_load(id)
+{
+ get_info('einsatzgeraete', {id: id}, geraete_load_callback);
+
+ var title = document.getElementById('mask_edit_title');
+ title.innerHTML = 'Geräteeinsatz bearbeiten';
+
+ var type = document.getElementById('edit_data_type');
+ type.value = 'geraete';
+}
+
+function form_onload()
+{
+ get_info('mitarbeiter', {}, function (data) { personal = data.info });
+ get_info('geraete', {}, function (data) { geraete = data.info });
+
+ var form = document.getElementById('form_edit');
+
+ var div = document.createElement('div');
+ div.id = 'form_edit_parent';
+ form.insertBefore(div,form.firstChild);
+
+ var elem = document.createElement('input');
+ elem.id = 'edit_data_type';
+ elem.name = 'data_type';
+ elem.type = 'hidden';
+ form.insertBefore(elem,form.firstChild);
+
+ var status = document.getElementById('form_status');
+ status.style.display = 'none';
+}
+
+Rico.onLoad(form_onload);
+
+EOC;
+
+function korrektur_save($mask)
+{
+ if ($_POST['data_type'] == 'personal') {
+ $num = 0;
+ while (true) {
+ $app = ':'.($num++);
+ if (empty($_POST['id'.$app])) break;
+
+ $sql = sprintf("SELECT personal,stunden FROM einsatzpersonal WHERE id = %d", $_POST['id'.$app]);
+ $sth = pg_query($sql);
+ $row = pg_fetch_assoc($sth);
+
+ if ($row['personal'] != $_POST['personal'.$app] ||
+ $row['stunden'] != $_POST['stunden'.$app]) {
+ $sql = sprintf("UPDATE einsatzpersonal SET personal=%d,stunden=%.2f,sys_user='%s',sys_edit=now() WHERE id = %d",
+ $_POST['personal'.$app], $_POST['stunden'.$app],
+ pg_escape_string($_SESSION['sys']['login']),
+ $_POST['id'.$app]);
+ pg_query($sql);
+ }
+ }
+ } elseif ($_POST['data_type'] == 'geraete') {
+ $num = 0;
+ while (true) {
+ $app = ':'.($num++);
+ if (empty($_POST['id'.$app])) break;
+
+ $sql = sprintf("SELECT geraet,anbaugeraet,stunden FROM einsatzgeraete WHERE id = %d", $_POST['id'.$app]);
+ $sth = pg_query($sql);
+ $row = pg_fetch_assoc($sth);
+
+ if ($row['geraet'] != $_POST['geraet'.$app] ||
+ ($row['anbaugeraet'] === NULL && !empty($_POST['anbaugeraet'.$app])) ||
+ ($row['anbaugeraet'] !== NULL && $row['anbaugeraet'] != $_POST['anbaugeraet'.$app]) ||
+ $row['stunden'] != $_POST['stunden'.$app]) {
+ $anbaugeraet = empty($_POST['anbaugeraet'.$app]) ? 'NULL' : sprintf('%d', $_POST['anbaugeraet'.$app]);
+
+ $sql = sprintf("UPDATE einsatzgeraete SET geraet=%d,anbaugeraet=%s,stunden=%.2f,sys_user='%s',sys_edit=now() WHERE id = %d",
+ $_POST['geraet'.$app],
+ $anbaugeraet,
+ $_POST['stunden'.$app],
+ pg_escape_string($_SESSION['sys']['login']),
+ $_POST['id'.$app]);
+ pg_query($sql);
+ }
+ }
+ }
+
+ return array('status' => true);
+}
+
+$mask = array(
+ 'table' => 'einsatz',
+ 'title' => 'Korrektur von Arbeitsberichten',
+ 'join' => array(
+ 'kostenstellen ON einsatz.kostenstelle = kostenstellen.id',
+ 'gebiet ON kostenstellen.gebiet = gebiet.id',
+ ),
+ 'list' => array(
+ 'id' => array(
+ 'name' => 'ID',
+ 'sql' => 'einsatz.id',
+ 'width' => 60,
+ 'visible' => false,
+ ),
+ 'datum' => array(
+ 'name' => 'Datum',
+ 'type' => 'date',
+ 'width' => 70,
+ ),
+ 'controla' => array(
+ 'name' => 'Personal',
+ 'width' => 70,
+ 'control' => "new Rico.TableColumn.link('javascript:personal_load({0})')",
+ 'specs' => "filterUI: 'c', ClassName: 'aligncenter', canSort: false",
+ 'sql' => "'bearbeiten'",
+ ),
+ 'controlb' => array(
+ 'name' => 'Geräte',
+ 'width' => 70,
+ 'control' => "new Rico.TableColumn.link('javascript:geraete_load({0})')",
+ 'specs' => "filterUI: 'c', ClassName: 'aligncenter', canSort: false",
+ 'sql' => "'bearbeiten'",
+ ),
+ 'gebiet' => array(
+ 'name' => 'Gebiet',
+ 'width' => 230,
+ 'sql' => 'gebiet.gebiet',
+ ),
+ 'kostenstelle' => array(
+ 'name' => 'Kostenstelle',
+ 'width' => 230,
+ 'sql' => 'kostenstellen.kostenstelle',
+ ),
+ 'personal' => array(
+ 'name' => 'Personal',
+ 'width' => 230,
+ 'sql' => "(SELECT name || ', ' || vorname FROM personal " .
+ "JOIN einsatzpersonal ON einsatzpersonal.personal = personal.id " .
+ "WHERE einsatzpersonal.einsatz = einsatz.id LIMIT 1)",
+ ),
+ 'material' => array(
+ 'name' => 'Material',
+ 'width' => 70,
+ 'control' => "new Rico.TableColumn.checkbox('t','f','0',true)",
+ 'sql' => '(SELECT count(*) > 0 FROM materialverbrauch WHERE einsatz = einsatz.id)',
+ 'specs' => "ClassName: 'aligncenter', canSort: false",
+ ),
+ ),
+ 'edit_table' => 'materialverbrauch',
+ 'edit' => array(),
+ 'save' => korrektur_save,
+ 'buttons' => array(
+ 'insert' => false,
+ 'delete' => false,
+ ),
+ 'info' => array(
+ 'einheit' => array(
+ 'sql' => 'SELECT einheiten.einheit FROM einheiten ' .
+ 'JOIN materialien ON materialien.einheit = einheiten.id ' .
+ 'WHERE materialien.id = {id}',
+ ),
+ 'einsatzpersonal' => array(
+ 'sql' => "SELECT id,personal,stunden " .
+ 'FROM einsatzpersonal ' .
+ 'WHERE einsatz = {id}',
+ ),
+ 'einsatzgeraete' => array(
+ 'sql' => "SELECT id,geraet,anbaugeraet,stunden " .
+ 'FROM einsatzgeraete ' .
+ 'WHERE einsatz = {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',
+ ),
+ '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',
+ ),
+ ),
+ );
+
+?>