X-Git-Url: https://git.infodrom.org/?p=misc%2Fhallinta-metro;a=blobdiff_plain;f=artikel.php;h=d7bcc76b8aec0b6f04777bb465e5384368c10b87;hp=07d0caf38c81612a7347e7d4078c9f16be2c414b;hb=44602f0fd181b7789ba4c5289d5dd4bc2526c7b1;hpb=0aee365e3ba1ad59668ec4e3f1c42c2d780b7b8e diff --git a/artikel.php b/artikel.php index 07d0caf..d7bcc76 100644 --- a/artikel.php +++ b/artikel.php @@ -1,13 +1,12 @@ add(" div#form_price { padding-left: 10px; padding-right: 10px; font-size: 90%; color: #555; -} -EOC; +}"); $form = '
@@ -22,13 +21,70 @@ $form = '
- +
'; -$javascript = << 0) { + var text = "Diese Artikelnummer ist bereits " + data.count + " mal vorhanden.\\nSoll der Artikel trotzdem gespeichert werden?"; + if (confirm(text)) + form_save(custom_this); + } else { + form_save(custom_this); + } +} + +function custom_save(obj) +{ + custom_this = obj; + var id = document.getElementById('edit_id'); + + if (!id.value.length) + return custom_insert(obj); + + var artnr = document.getElementById('edit_artnr'); + + if (artnr.value == 0) return form_save(custom_this); + + var parms = 'source=' + source.innerHTML + '&callback=artnr'; + parms += '&artnr=' + artnr.value; + parms += '&artikel=' + id.value; + ajax_request('function', parms, custom_save_callback); + + return false; +} + +function custom_insert_callback(data) +{ + if (data.count > 0) { + var text = "Diese Artikelnummer ist bereits " + data.count + " mal vorhanden.\\nSoll der Artikel trotzdem hinzugefügt werden?"; + if (confirm(text)) + form_insert(custom_this); + } else { + form_insert(custom_this); + } +} + +function custom_insert(obj) +{ + custom_this = obj; + var artnr = document.getElementById('edit_artnr'); + + if (artnr.value == 0) return form_insert(custom_this); + + var parms = 'source=' + source.innerHTML + '&callback=artnr'; + parms += '&artnr=' + artnr.value; + ajax_request('function', parms, custom_insert_callback); + + return false; +} + var price_popup = false; function price_popup_open() { @@ -38,16 +94,23 @@ function price_popup_open() price_popup = new Rico.Popup(options, false, false); price_popup.createWindow('Verbinden',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 +125,7 @@ function open_popup() function add_price_callback(data) { info('Preis gespeichert'); + grid_update(grid); } function add_price(obj) @@ -90,23 +154,23 @@ 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 = ''; return false; } - EOC; -$jscode[] = str_replace('CONTENT_FORM', str_replace(array("\n"), - array("\\\n"), $form), $javascript); - +$jscode = str_replace('CONTENT_FORM', str_replace(array("\n"), + array("\\\n"), $form), $jscode); +$javascript->add($jscode); +$javascript->onLoad("\$('button_save').onclick = function () {return custom_save(this);};"); +$javascript->onLoad("\$('button_insert').onclick = function () {return custom_insert(this);};"); $buttons = << - +

EOC; @@ -123,25 +187,43 @@ $mask = array( 'artnr' => array( 'name' => 'ArtNr', 'width' => 60, + 'type' => 'number', + 'specs' => "decPlaces: 0, thouSep: '', filterUI: 't='", ), '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 +234,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 +248,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,20 +284,76 @@ $mask = array( 'size' => 21, 'required' => true, ), + 'hinweis' => array( + 'name' => 'Hinweis', + 'type' => 'text', + 'size' => 21, + 'null' => true, + ), 'hersteller' => array( 'name' => 'Hersteller', 'type' => 'text', 'size' => 21, 'null' => true, ), + 'removed' => array( + 'name' => 'Artikel nicht mehr im Programm', + 'type' => 'boolean', + ), 'buttons' => array( 'type' => 'html', 'code' => $buttons, 'sql' => false, ), ), + 'second' => array( + 'title' => 'Preisverlauf', + 'rows' => 5, + 'table' => 'metro_artikel_preis', + 'table_edit' => 'metro_artikel_preis', + 'where' => 'artikel = {id} ORDER BY datum DESC', + 'list' => array( + 'id' => array( + 'name' => 'ID', + 'edit' => "Writeable:false, EntryType: 'H', Length: 4, isKey: true", + 'visible' => false, + ), + 'datum' => array( + 'name' => 'Datum', + 'width' => 180, + 'edit' => "EntryType: 'T', isNullable: false, Writeable: true", + ), + 'steuersatz' => array( + 'name' => 'Steuer', + 'width' => 60, + 'type' => 'number', + 'specs' => "decPlaces: 2, ClassName: 'alignrightpad'", + 'edit' => "EntryType: 'T', isNullable: false, Writeable: true", + ), + 'preis' => array( + 'name' => 'netto', + 'width' => 60, + 'type' => 'number', + 'specs' => "decPlaces: 2, ClassName: 'alignrightpad'", + 'edit' => "EntryType: 'T', isNullable: false, Writeable: true", + ), + '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, + 'artnr' => cb_artnr, ), ); @@ -225,6 +365,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())", @@ -239,4 +380,21 @@ function cb_price() return true; } +function cb_artnr() +{ + global $db; + + if (empty($_POST['artnr'])) + return array('error' => 'Nicht ausreichend Daten übermittelt'); + + $sql = sprintf("SELECT count(*) AS count FROM metro_artikel WHERE artnr = %d", $_POST['artnr']); + if (!empty($_POST['artikel'])) + $sql .= sprintf(" AND id <> %d", $_POST['artikel']); + + $sth = $db->query($sql); + $row = $sth->fetch(); + + return array('count' => $row['count']); +} + ?>