New price adding facility
authorJoey Schulze <joey@infodrom.org>
Sat, 14 Jan 2012 19:06:46 +0000 (20:06 +0100)
committerJoey Schulze <joey@infodrom.org>
Sat, 14 Jan 2012 19:06:46 +0000 (20:06 +0100)
artikel.php

index 76398ad..07d0caf 100644 (file)
@@ -1,5 +1,115 @@
 <?php
 
+$style[] = <<<EOC
+div#form_price {
+  padding-left: 10px;
+  padding-right: 10px;
+  font-size: 90%;
+  color: #555;
+}
+EOC;
+
+$form = '
+<div id="form_price">
+<form>
+<input id="form_artikel" name="artikel" type="hidden" />
+<label for="form_datum">Rechnungsdatum</label><br>
+<input id="form_datum" name="datum" size="8">&nbsp;<img class="calendar" src="images/icons/calendar.gif" onclick="calendar(\\\'form_datum\\\',event)" />
+<br>
+<label for="form_steuer">Steuersatz</label><br>
+<input id="form_steuer" name="steuer" size="10">
+<br>
+<label for="form_preis">Preis</label><br>
+<input id="form_preis" name="preis" size="10">
+<div class="buttons" style="margin-top: 15px;">
+<button onclick="return add_price(this);">Hinzufügen</button>
+</div>
+</form>
+</div>
+';
+
+$javascript = <<<EOC
+var price_popup = false;
+function price_popup_open()
+{
+    if (!price_popup) {
+       var options = { hideOnClick: false, canDragFunc: true };
+       var content = 'CONTENT_FORM';
+
+       price_popup = new Rico.Popup(options, false, false);
+       price_popup.createWindow('<strong>Verbinden</strong>',content,'auto','130px');
+    }
+
+    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);
+}
+
+function open_popup()
+{
+    var eid = document.getElementById('edit_id');
+    if (!eid || !eid.value.length) return false;
+
+    price_popup_open();
+    return false;
+}
+
+function add_price_callback(data)
+{
+    info('Preis gespeichert');
+}
+
+function add_price(obj)
+{
+    price_popup.closePopup();
+
+    var datum = document.getElementById('form_datum');
+    if (!datum.value.length) {
+       error('Kein Rechnungsdatum angegeben');
+       return false;
+    }
+
+    var steuer = document.getElementById('form_steuer');
+    if (!steuer.value.length) {
+       error('Kein Steuersatz angegeben');
+       return false;
+    }
+
+    var preis = document.getElementById('form_preis');
+    if (!preis.value.length) {
+       error('Kein Preis angegeben');
+       return false;
+    }
+
+    var source = document.getElementById('source');
+    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);
+
+
+$buttons = <<<EOC
+<p style="margin-top: 5px; margin-bottom: 4px; text-align: center;">
+<button onclick="return open_popup()">Preis hinzufügen</button>
+</p>
+EOC;
+
 $mask = array(
              'table' => 'metro_artikel',
              'title' => 'Artikelstammdaten',
@@ -96,7 +206,37 @@ $mask = array(
                                            'size' => 21,
                                            'null' => true,
                                            ),
+                             'buttons' => array(
+                                           'type' => 'html',
+                                           'code' => $buttons,
+                                           'sql' => false,
+                                           ),
                              ),
+             'callbacks' => array(
+                                  'price' => cb_price,
+                               ),
              );
 
+function cb_price()
+{
+  global $db;
+
+  if (empty($_POST['artikel']) || empty($_POST['datum']) || empty($_POST['preis']))
+    return array('error' => 'Nicht ausreichend Daten übermittelt');
+
+  $date = format_date($_POST['datum']);
+
+  $sql = sprintf("INSERT INTO metro_artikel_preis (artikel,preis,steuersatz,datum,sys_user,sys_edit) " .
+                "VALUES (%d,%.3f,%d,'%s',%s,now())",
+                $_POST['artikel'],
+                $_POST['preis'],
+                $_POST['steuer'],
+                $date,
+                $db->quote($_SESSION['sys']['login']), $row['id']);
+
+  $sth = $db->query($sql);
+
+  return true;
+}
+
 ?>