X-Git-Url: https://git.infodrom.org/?p=misc%2Fhallinta-metro;a=blobdiff_plain;f=artikel.php;h=d7bcc76b8aec0b6f04777bb465e5384368c10b87;hp=e987852490446fda02bb33275b036e2f64d78614;hb=44602f0fd181b7789ba4c5289d5dd4bc2526c7b1;hpb=8bac1edc624dbd432c3dd55be641256d2bd824cf
diff --git a/artikel.php b/artikel.php
index e987852..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 = '
';
-$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,7 +94,10 @@ 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';
@@ -46,10 +105,12 @@ function price_popup_open()
var artikel = document.getElementById('form_artikel');
artikel.value = form_id.value;
- price_popup.openPopup(100,300);
-
var datum = document.getElementById('form_datum');
- datum.activate();
+ var preis = document.getElementById('form_preis');
+ if (datum.value.length)
+ preis.activate();
+ else
+ datum.activate();
}
function open_popup()
@@ -99,16 +160,17 @@ function add_price(obj)
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;
@@ -125,11 +187,13 @@ $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',
@@ -152,6 +216,14 @@ $mask = array(
'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,
@@ -162,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(
@@ -175,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(
@@ -210,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,
),
);
@@ -250,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']);
+}
+
?>