Add empty default option
[misc/kostenrechnung] / masks / materialverbrauch.php
index 61d9cf3..4e76f76 100644 (file)
 <?php
 
+$jscode[] = <<<EOC
+
+post_save = materialverbrauch_post_save;
+pre_insert = materialverbrauch_pre_insert;
+
+function materialverbrauch_post_save()
+{
+  var einsatz = document.getElementById('edit_einsatz');
+
+  var params = 'source=' + grid.tableId.substr(5) + '&id=' + einsatz.value;
+  ajax_request('details', params, details_callback);
+
+  var material = document.getElementById('edit_material');
+  material.selectedIndex = 0;
+}
+
+function materialverbrauch_pre_insert()
+{
+  var material = document.getElementById('edit_material');
+  var einsatz = document.getElementById('edit_einsatz');
+  var menge = document.getElementById('edit_menge');
+
+  if (!material.options[material.selectedIndex].value.length) {
+    alert('Sie haben kein Material ausgewählt.');
+    return false;
+  }
+
+  if (!einsatz.value.length) {
+    alert('Sie haben keinen Einsatzbericht ausgewählt.');
+    return false;
+  }
+
+  if (!menge.value.length) {
+    alert('Sie haben keine Menge angegeben.');
+    return false;
+  }
+
+  return true;
+}
+
+function einheit_callback(data)
+{
+  var einheit = document.getElementById('edit_einheit');
+
+  if (!einheit) return false;
+
+  if (data.info[0].einheit.length)
+    einheit.innerHTML = data.info[0].einheit;
+}
+
+function select_material(obj)
+{
+  get_info('einheit', {id: obj.options[obj.selectedIndex].value}, einheit_callback);
+}
+
+EOC;
+
+function fetch_tbody()
+{
+  $sql = 'SELECT materialien.material,menge,einheiten.einheit FROM materialverbrauch '
+    . 'JOIN materialien ON materialverbrauch.material = materialien.id '
+    . 'JOIN einheiten ON materialien.einheit = einheiten.id '
+    . 'WHERE einsatz = ' . intval($_POST['id']) . ' '
+    . 'ORDER BY materialien.material';
+
+  $data = query_db($sql);
+
+  $ret = '';
+  foreach ($data as $row)
+    $ret .= sprintf('<tr><td>%s</td><td align="right">%.2f %s</td></tr>',
+                   $row['material'], $row['menge'], $row['einheit']);
+
+  return $ret;
+}
+
 $mask = array(
-             'table' => 'materialverbrauch',
-             'join' => array('materialien ON materialverbrauch.material = materialien.id'),
+             'table' => 'einsatz',
+             'title' => 'Materialverbrauch zu Arbeitsberichten',
+             'join' => array(
+                             'kostenstellen ON einsatz.kostenstelle = kostenstellen.id',
+                             'gebiet ON kostenstellen.gebiet = gebiet.id',
+                             ),
              'list' => array(
                              'id' => array(
                                            'name' => 'ID',
-                                           'sql' => 'materialverbrauch.id',
+                                           'sql' => 'einsatz.id',
+                                           'width' => 60,
                                            'visible' => false,
                                            ),
+                             'datum' => array(
+                                           'name' => 'Datum',
+                                           'type' => 'date',
+                                           'width' => 70,
+                                           ),
+                             'gebiet' => array(
+                                           'name' => 'Gebiet',
+                                           'width' => 230,
+                                           'sql' => 'gebiet.gebiet',
+                                           ),
                              'kostenstelle' => array(
-                                           'name' => 'KSt',
-                                           'width' => 50,
+                                           'name' => 'Kostenstelle',
+                                           'width' => 230,
+                                           'sql' => 'kostenstellen.kostenstelle',
                                            ),
                              'material' => array(
                                            'name' => 'Material',
-                                           'sql' => 'materialien.material',
-                                           'width' => 200,
+                                           '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",
+                                           ),
+                             ),
+             'details' => array(
+                                'html' => '<table id="materialverbrauch_table" cellspacing="0" style="margin-top: -13px;" border="0" width="100%">'.
+                                '<thead>'.
+                                '<tr bgcolor="#ffd76d" style="color: #444;"><th>Material</th><th>Menge</th></tr>'.
+                                '</thead>'.
+                                '<tbody id="detail_materialverbrauch_tbody"></tbody>'.
+                                '</table>',
+                                'list' => array(
+                                                'materialverbrauch_tbody' => array(
+                                                                                   'fetch' => fetch_tbody,
+                                                                                   ),
+                                                ),
+                                ),
+             'edit_title' => 'Materialverbrauch vermerken',
+             'edit_table' => 'materialverbrauch',
+             'edit' => array(
+                             'einsatz' => array(
+                                           'name' => 'Einsatz',
+                                           'type' => 'hidden',
+                                           'size' => 10,
+                                           'sql' => 'id',
+                                           ),
+                             'material' => array(
+                                           'name' => 'Material',
+                                           'type' => 'select',
+                                           'options' => 'SELECT id,material AS text FROM materialien ORDER BY text',
+                                           'option_empty' => 'Bitte wählen Sie',
+                                           'onchange' => 'select_material(this)',
+                                           'sql' => false,
                                            ),
                              'menge' => array(
                                            'name' => 'Menge',
-                                           'type' => 'number',
-                                           'specs' => "decPlaces: 2, ClassName: 'alignright'",
-                                           'width' => 50,
+                                           'type' => 'decimal',
+                                           'size' => 10,
+                                           'comment' => ' <span id="edit_einheit"></span>',
+                                           'sql' => false,
+                                           'required' => true,
                                            ),
+                             ),
+             'buttons' => array(
+                                'save' => false,
+                                'delete' => false,
+                                ),
+             'info' => array(
                              'einheit' => array(
-                                           'name' => 'Einheit',
-                                           'type' => 'number',
-                                           'specs' => "ClassName: 'alignright'",
-                                           'width' => 50,
+                                           'sql' => 'SELECT einheiten.einheit FROM einheiten ' .
+                                                    'JOIN materialien ON materialien.einheit = einheiten.id ' .
+                                                    'WHERE materialien.id = {id}',
                                            ),
-                             'datum' => array(
-                                           'name' => 'Datum',
-                                           'type' => 'date',
-                                           'width' => 60,
-                                           ),
-                             ),
-             'rows' => 20,
+                                  ),
              );
 
 ?>