14 <input id="form_artikel" name="artikel" type="hidden" />
15 <label for="form_datum">Rechnungsdatum</label><br>
16 <input id="form_datum" name="datum" size="8"> <img class="calendar" src="images/icons/calendar.gif" onclick="calendar(\\\'form_datum\\\',event)" />
18 <label for="form_steuer">Steuersatz</label><br>
19 <input id="form_steuer" name="steuer" size="10">
21 <label for="form_preis">Preis</label><br>
22 <input id="form_preis" name="preis" size="10">
23 <div class="buttons" style="margin-top: 15px;">
24 <button class="custom" onclick="return add_price(this);">Hinzufügen</button>
31 var custom_this = false;
32 function custom_save_callback(data)
35 var text = "Diese Artikelnummer ist bereits " + data.count + " mal vorhanden.\\nSoll der Artikel trotzdem gespeichert werden?";
37 form_save(custom_this);
39 form_save(custom_this);
43 function custom_save(obj)
46 var id = document.getElementById('edit_id');
49 return custom_insert(obj);
51 var artnr = document.getElementById('edit_artnr');
53 if (artnr.value == 0) return form_save(custom_this);
55 var parms = 'source=' + source.innerHTML + '&callback=artnr';
56 parms += '&artnr=' + artnr.value;
57 parms += '&artikel=' + id.value;
58 ajax_request('function', parms, custom_save_callback);
63 function custom_insert_callback(data)
66 var text = "Diese Artikelnummer ist bereits " + data.count + " mal vorhanden.\\nSoll der Artikel trotzdem hinzugefügt werden?";
68 form_insert(custom_this);
70 form_insert(custom_this);
74 function custom_insert(obj)
77 var artnr = document.getElementById('edit_artnr');
79 if (artnr.value == 0) return form_insert(custom_this);
81 var parms = 'source=' + source.innerHTML + '&callback=artnr';
82 parms += '&artnr=' + artnr.value;
83 ajax_request('function', parms, custom_insert_callback);
88 var price_popup = false;
89 function price_popup_open()
92 var options = { hideOnClick: false, canDragFunc: true };
93 var content = 'CONTENT_FORM';
95 price_popup = new Rico.Popup(options, false, false);
96 price_popup.createWindow('<strong>Verbinden</strong>',content,'auto','130px');
98 price_popup.openPopup(100,300);
100 price_popup.openPopup();
102 price_popup.titleDiv.childNodes[0].innerHTML = 'Preis hinzufügen';
104 var form_id = document.getElementById('edit_id');
105 var artikel = document.getElementById('form_artikel');
106 artikel.value = form_id.value;
108 var datum = document.getElementById('form_datum');
109 var preis = document.getElementById('form_preis');
110 if (datum.value.length)
116 function open_popup()
118 var eid = document.getElementById('edit_id');
119 if (!eid || !eid.value.length) return false;
125 function add_price_callback(data)
127 info('Preis gespeichert');
131 function add_price(obj)
133 price_popup.closePopup();
135 var datum = document.getElementById('form_datum');
136 if (!datum.value.length) {
137 error('Kein Rechnungsdatum angegeben');
141 var steuer = document.getElementById('form_steuer');
142 if (!steuer.value.length) {
143 error('Kein Steuersatz angegeben');
147 var preis = document.getElementById('form_preis');
148 if (!preis.value.length) {
149 error('Kein Preis angegeben');
153 var source = document.getElementById('source');
154 if (!source) return false;
156 var parms = 'source=' + source.innerHTML + '&callback=price&';
157 ajax_request('function', parms+Form.serialize(obj.form), add_price_callback);
165 $jscode = str_replace('CONTENT_FORM', str_replace(array("\n"),
166 array("\\\n"), $form), $jscode);
167 $javascript->add($jscode);
168 $javascript->onLoad("\$('button_save').onclick = function () {return custom_save(this);};");
169 $javascript->onLoad("\$('button_insert').onclick = function () {return custom_insert(this);};");
172 <p style="margin-top: 5px; margin-bottom: 4px; text-align: center;">
173 <button class="custom" onclick="return open_popup()">Preis hinzufügen</button>
178 'table' => 'metro_artikel',
179 'title' => 'Artikelstammdaten',
180 'join' => array('metro_abteilung ON abteilung = metro_abteilung.id'),
185 'sql' => 'metro_artikel.id',
191 'specs' => "decPlaces: 0, thouSep: '', filterUI: 't=3'",
196 'specs' => "ClassName: 'alignrightpad', filterUI: 't3'",
198 'bezeichnung' => array(
199 'name' => 'Bezeichnung',
201 'specs' => "filterUI: 't'",
207 'specs' => "decPlaces: 2, ClassName: 'alignrightpad'",
208 'sql' => '(SELECT preis FROM metro_artikel_preis ' .
209 'WHERE artikel = metro_artikel.id ORDER BY datum DESC LIMIT 1)',
215 'specs' => "decPlaces: 2, ClassName: 'alignrightpad'",
216 'sql' => '(SELECT preis * ((100 + steuersatz)/100) FROM metro_artikel_preis ' .
217 'WHERE artikel = metro_artikel.id ORDER BY datum DESC LIMIT 1)',
223 'sql' => '(SELECT datum FROM metro_artikel_preis ' .
224 'WHERE artikel = metro_artikel.id ORDER BY datum DESC LIMIT 1)',
227 'hersteller' => array(
228 'name' => 'Hersteller',
230 'specs' => "filterUI: 't4'",
232 'abteilung' => array(
233 'name' => 'Abteilung',
235 'specs' => "filterUI: 's'",
236 'control' => "new Rico.TableColumn.lookup(".grid_lookup_sql('metro_abteilung','id','name').", 0, '')",
237 'distinct' => "SELECT DISTINCT abteilung,metro_abteilung.name FROM metro_artikel JOIN metro_abteilung ON abteilung = metro_abteilung.id ORDER BY name",
243 'specs' => "ClassName: 'aligncenter', filterUI: 's'",
249 'specs' => "ClassName: 'aligncenter', filterUI: 's'",
250 'control' => "new Rico.TableColumn.lookup(".grid_lookup_sql('metro_vpe','id','name').", 0, '')",
251 'distinct' => "SELECT DISTINCT vpe,metro_vpe.name FROM metro_artikel JOIN metro_vpe ON vpe = metro_vpe.id ORDER BY name",
256 'name' => 'Artikelnummer',
261 'abteilung' => array(
262 'name' => 'Abteilung',
264 'options' => 'SELECT id,name AS text FROM metro_abteilung ORDER BY name',
265 'option_empty' => '-- select --',
269 'name' => 'Verpackungseinheit',
271 'options' => 'SELECT id,name AS text FROM metro_vpe ORDER BY name',
272 'option_empty' => '-- select --',
281 'bezeichnung' => array(
282 'name' => 'Bezeichnung',
293 'hersteller' => array(
294 'name' => 'Hersteller',
300 'name' => 'Artikel nicht mehr im Programm',
310 'title' => 'Preisverlauf',
312 'table' => 'metro_artikel_preis',
313 'table_edit' => 'metro_artikel_preis',
314 'where' => 'artikel = {id} ORDER BY datum DESC',
318 'edit' => "Writeable:false, EntryType: 'H', Length: 4, isKey: true",
324 'edit' => "EntryType: 'T', isNullable: false, Writeable: true",
326 'steuersatz' => array(
330 'specs' => "decPlaces: 2, ClassName: 'alignrightpad'",
331 'edit' => "EntryType: 'T', isNullable: false, Writeable: true",
337 'specs' => "decPlaces: 2, ClassName: 'alignrightpad'",
338 'edit' => "EntryType: 'T', isNullable: false, Writeable: true",
344 'specs' => "decPlaces: 2, ClassName: 'alignrightpad'",
345 'sql' => 'preis * ((100 + steuersatz)/100)',
354 'callbacks' => array(
364 if (empty($_POST['artikel']) || empty($_POST['datum']) || empty($_POST['preis']))
365 return array('error' => 'Nicht ausreichend Daten übermittelt');
367 $date = format_date($_POST['datum']);
368 $_POST['preis'] = str_replace(',','.',$_POST['preis']);
370 $sql = sprintf("INSERT INTO metro_artikel_preis (artikel,preis,steuersatz,datum,sys_user,sys_edit) " .
371 "VALUES (%d,%.3f,%d,'%s',%s,now())",
376 $db->quote($_SESSION['sys']['login']), $row['id']);
378 $sth = $db->query($sql);
387 if (empty($_POST['artnr']))
388 return array('error' => 'Nicht ausreichend Daten übermittelt');
390 $sql = sprintf("SELECT count(*) AS count FROM metro_artikel WHERE artnr = %d", $_POST['artnr']);
391 if (!empty($_POST['artikel']))
392 $sql .= sprintf(" AND id <> %d", $_POST['artikel']);
394 $sth = $db->query($sql);
395 $row = $sth->fetch();
397 return array('count' => $row['count']);