Use new possibility to provide distinct queries
[misc/hallinta-metro] / artikel.php
index 07d0caf..2bb5744 100644 (file)
@@ -38,16 +38,23 @@ function price_popup_open()
 
        price_popup = new Rico.Popup(options, false, false);
        price_popup.createWindow('<strong>Verbinden</strong>',content,'auto','130px');
-    }
+
+       price_popup.openPopup(100,300);
+    } else
+       price_popup.openPopup();
 
     price_popup.titleDiv.childNodes[0].innerHTML = 'Preis hinzufügen';
 
     var form_id = document.getElementById('edit_id');
     var artikel = document.getElementById('form_artikel');
     artikel.value = form_id.value;
-    Debug.write('id: ' + form_id.value);
 
-    price_popup.openPopup(100,300);
+    var datum = document.getElementById('form_datum');
+    var preis = document.getElementById('form_preis');
+    if (datum.value.length)
+      preis.activate();
+    else
+      datum.activate();
 }
 
 function open_popup()
@@ -62,6 +69,7 @@ function open_popup()
 function add_price_callback(data)
 {
     info('Preis gespeichert');
+    grid_update(grid);
 }
 
 function add_price(obj)
@@ -90,7 +98,6 @@ function add_price(obj)
     if (!source) return false;
 
     var parms = 'source=' + source.innerHTML + '&callback=price&';
-    Debug.write(parms+Form.serialize(obj.form));
     ajax_request('function', parms+Form.serialize(obj.form), add_price_callback);
 
     preis.value = '';
@@ -127,21 +134,37 @@ $mask = array(
                              'menge' => array(
                                            'name' => 'Menge',
                                            'width' => 60,
-                                           'specs' => "ClassName: 'alignrightpad'",
+                                           'specs' => "ClassName: 'alignrightpad', filterUI: 't3'",
                                            ),
                              'bezeichnung' => array(
                                            'name' => 'Bezeichnung',
                                            'width' => 300,
                                            'specs' => "filterUI: 't'",
                                            ),
+                             'netto' => array(
+                                           'name' => 'netto',
+                                           'width' => 60,
+                                           'type' => 'number',
+                                           'specs' => "decPlaces: 2, ClassName: 'alignrightpad'",
+                                           'sql' => '(SELECT preis FROM metro_artikel_preis ' .
+                                                    'WHERE artikel = metro_artikel.id ORDER BY datum DESC LIMIT 1)',
+                                           ),
                              'preis' => array(
                                            'name' => 'Preis',
                                            'width' => 60,
                                            'type' => 'number',
-                                           'specs' => "decPlaces: 2, ClassName: 'alignrightpad', filterUI: 't'",
+                                           'specs' => "decPlaces: 2, ClassName: 'alignrightpad'",
                                            'sql' => '(SELECT preis * ((100 + steuersatz)/100) FROM metro_artikel_preis ' .
                                                     'WHERE artikel = metro_artikel.id ORDER BY datum DESC LIMIT 1)',
                                            ),
+                             'datum' => array(
+                                           'name' => 'Datum',
+                                           'width' => 85,
+                                           'type' => 'text',
+                                           'sql' => '(SELECT datum FROM metro_artikel_preis ' .
+                                                    'WHERE artikel = metro_artikel.id ORDER BY datum DESC LIMIT 1)',
+                                           'visible' => false,
+                                           ),
                              'hersteller' => array(
                                            'name' => 'Hersteller',
                                            'width' => 100,
@@ -152,6 +175,7 @@ $mask = array(
                                            'width' => 200,
                                            'specs' => "filterUI: 's'",
                                            'control' => "new Rico.TableColumn.lookup(".grid_lookup_sql('metro_abteilung','id','name').", 0, '')",
+                                           'distinct' => "SELECT DISTINCT abteilung,metro_abteilung.name FROM metro_artikel JOIN metro_abteilung ON abteilung = metro_abteilung.id ORDER BY name",
                                            'visible' => false,
                                            ),
                              'gang' => array(
@@ -165,6 +189,7 @@ $mask = array(
                                            'width' => 70,
                                            'specs' => "ClassName: 'aligncenter', filterUI: 's'",
                                            'control' => "new Rico.TableColumn.lookup(".grid_lookup_sql('metro_vpe','id','name').", 0, '')",
+                                           'distinct' => "SELECT DISTINCT vpe,metro_vpe.name FROM metro_artikel JOIN metro_vpe ON vpe = metro_vpe.id ORDER BY name",
                                            ),
                              ),
              'edit' => array(
@@ -200,6 +225,12 @@ $mask = array(
                                            'size' => 21,
                                            'required' => true,
                                            ),
+                             'hinweis' => array(
+                                           'name' => 'Hinweis',
+                                           'type' => 'text',
+                                           'size' => 21,
+                                           'null' => true,
+                                           ),
                              'hersteller' => array(
                                            'name' => 'Hersteller',
                                            'type' => 'text',
@@ -212,6 +243,46 @@ $mask = array(
                                            'sql' => false,
                                            ),
                              ),
+             'second' => array(
+                               'title' => 'Preisverlauf',
+                               'rows' => 5,
+                               'table' => 'metro_artikel_preis',
+                               'where' => 'artikel = {id} ORDER BY datum DESC',
+                               'list' => array(
+                                               'id' => array(
+                                                             'name' => 'ID',
+                                                             'visible' => false,
+                                                             ),
+                                               'datum' => array(
+                                                             'name' => 'Datum',
+                                                             'width' => 180,
+                                                             ),
+                                               'steuersatz' => array(
+                                                             'name' => 'Steuer',
+                                                             'width' => 60,
+                                                             'type' => 'number',
+                                                             'specs' => "decPlaces: 2, ClassName: 'alignrightpad'",
+                                                             ),
+                                               'preis' => array(
+                                                             'name' => 'netto',
+                                                             'width' => 60,
+                                                             'type' => 'number',
+                                                             'specs' => "decPlaces: 2, ClassName: 'alignrightpad'",
+                                                             ),
+                                               'brutto' => array(
+                                                             'name' => 'Preis',
+                                                             'width' => 60,
+                                                             'type' => 'number',
+                                                             'specs' => "decPlaces: 2, ClassName: 'alignrightpad'",
+                                                             'sql' => 'preis * ((100 + steuersatz)/100)',
+                                                             ),
+                                               'empty' => array(
+                                                             'name' => '',
+                                                             'width' => 10,
+                                                             'sql' => "''",
+                                                             ),
+                                               ),
+                               ),
              'callbacks' => array(
                                   'price' => cb_price,
                                ),
@@ -225,6 +296,7 @@ function cb_price()
     return array('error' => 'Nicht ausreichend Daten übermittelt');
 
   $date = format_date($_POST['datum']);
+  $_POST['preis'] = str_replace(',','.',$_POST['preis']);
 
   $sql = sprintf("INSERT INTO metro_artikel_preis (artikel,preis,steuersatz,datum,sys_user,sys_edit) " .
                 "VALUES (%d,%.3f,%d,'%s',%s,now())",