Support pre-checking of duplicate item numbers before saving
authorJoey Schulze <joey@infodrom.org>
Fri, 24 Jan 2014 12:11:54 +0000 (13:11 +0100)
committerJoey Schulze <joey@infodrom.org>
Fri, 24 Jan 2014 12:11:54 +0000 (13:11 +0100)
artikel.php

index aa135b0..577eae3 100644 (file)
@@ -29,6 +29,59 @@ $form = '
 ';
 
 $javascript = <<<EOC
+var custom_this = false;
+function custom_save_callback(data)
+{
+    if (data.count > 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');
+
+    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');
+
+    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()
 {
@@ -105,6 +158,12 @@ function add_price(obj)
     return false;
 }
 
+Rico.onLoad(function(){
+    var btn = document.getElementById('button_save');
+    btn.onclick = function () {return custom_save(this);};
+    var btn = document.getElementById('button_insert');
+    btn.onclick = function () {return custom_insert(this);};
+});
 EOC;
 
 $jscode[] = str_replace('CONTENT_FORM', str_replace(array("\n"),
@@ -287,6 +346,7 @@ $mask = array(
                                ),
              'callbacks' => array(
                                   'price' => cb_price,
+                                  'artnr' => cb_artnr,
                                ),
              );
 
@@ -313,4 +373,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']);
+}
+
 ?>