15 <input id="form_artikel" name="artikel" type="hidden" />
16 <label for="form_datum">Rechnungsdatum</label><br>
17 <input id="form_datum" name="datum" size="8"> <img class="calendar" src="images/icons/calendar.gif" onclick="calendar(\\\'form_datum\\\',event)" />
19 <label for="form_steuer">Steuersatz</label><br>
20 <input id="form_steuer" name="steuer" size="10">
22 <label for="form_preis">Preis</label><br>
23 <input id="form_preis" name="preis" size="10">
24 <div class="buttons" style="margin-top: 15px;">
25 <button class="custom" onclick="return add_price(this);">Hinzufügen</button>
32 var custom_this = false;
33 function custom_save_callback(data)
36 var text = "Diese Artikelnummer ist bereits " + data.count + " mal vorhanden.\\nSoll der Artikel trotzdem gespeichert werden?";
38 form_save(custom_this);
40 form_save(custom_this);
44 function custom_save(obj)
47 var id = document.getElementById('edit_id');
50 return custom_insert(obj);
52 var artnr = document.getElementById('edit_artnr');
54 var parms = 'source=' + source.innerHTML + '&callback=artnr';
55 parms += '&artnr=' + artnr.value;
56 parms += '&artikel=' + id.value;
57 ajax_request('function', parms, custom_save_callback);
62 function custom_insert_callback(data)
65 var text = "Diese Artikelnummer ist bereits " + data.count + " mal vorhanden.\\nSoll der Artikel trotzdem hinzugefügt werden?";
67 form_insert(custom_this);
69 form_insert(custom_this);
73 function custom_insert(obj)
76 var artnr = document.getElementById('edit_artnr');
78 var parms = 'source=' + source.innerHTML + '&callback=artnr';
79 parms += '&artnr=' + artnr.value;
80 ajax_request('function', parms, custom_insert_callback);
85 var price_popup = false;
86 function price_popup_open()
89 var options = { hideOnClick: false, canDragFunc: true };
90 var content = 'CONTENT_FORM';
92 price_popup = new Rico.Popup(options, false, false);
93 price_popup.createWindow('<strong>Verbinden</strong>',content,'auto','130px');
95 price_popup.openPopup(100,300);
97 price_popup.openPopup();
99 price_popup.titleDiv.childNodes[0].innerHTML = 'Preis hinzufügen';
101 var form_id = document.getElementById('edit_id');
102 var artikel = document.getElementById('form_artikel');
103 artikel.value = form_id.value;
105 var datum = document.getElementById('form_datum');
106 var preis = document.getElementById('form_preis');
107 if (datum.value.length)
113 function open_popup()
115 var eid = document.getElementById('edit_id');
116 if (!eid || !eid.value.length) return false;
122 function add_price_callback(data)
124 info('Preis gespeichert');
128 function add_price(obj)
130 price_popup.closePopup();
132 var datum = document.getElementById('form_datum');
133 if (!datum.value.length) {
134 error('Kein Rechnungsdatum angegeben');
138 var steuer = document.getElementById('form_steuer');
139 if (!steuer.value.length) {
140 error('Kein Steuersatz angegeben');
144 var preis = document.getElementById('form_preis');
145 if (!preis.value.length) {
146 error('Kein Preis angegeben');
150 var source = document.getElementById('source');
151 if (!source) return false;
153 var parms = 'source=' + source.innerHTML + '&callback=price&';
154 ajax_request('function', parms+Form.serialize(obj.form), add_price_callback);
161 Rico.onLoad(function(){
162 var btn = document.getElementById('button_save');
163 btn.onclick = function () {return custom_save(this);};
164 var btn = document.getElementById('button_insert');
165 btn.onclick = function () {return custom_insert(this);};
169 $jscode[] = str_replace('CONTENT_FORM', str_replace(array("\n"),
170 array("\\\n"), $form), $javascript);
174 <p style="margin-top: 5px; margin-bottom: 4px; text-align: center;">
175 <button class="custom" onclick="return open_popup()">Preis hinzufügen</button>
180 'table' => 'metro_artikel',
181 'title' => 'Artikelstammdaten',
182 'join' => array('metro_abteilung ON abteilung = metro_abteilung.id'),
187 'sql' => 'metro_artikel.id',
193 'specs' => "decPlaces: 0, thouSep: '', filterUI: 't='",
198 'specs' => "ClassName: 'alignrightpad', filterUI: 't3'",
200 'bezeichnung' => array(
201 'name' => 'Bezeichnung',
203 'specs' => "filterUI: 't'",
209 'specs' => "decPlaces: 2, ClassName: 'alignrightpad'",
210 'sql' => '(SELECT preis FROM metro_artikel_preis ' .
211 'WHERE artikel = metro_artikel.id ORDER BY datum DESC LIMIT 1)',
217 'specs' => "decPlaces: 2, ClassName: 'alignrightpad'",
218 'sql' => '(SELECT preis * ((100 + steuersatz)/100) FROM metro_artikel_preis ' .
219 'WHERE artikel = metro_artikel.id ORDER BY datum DESC LIMIT 1)',
225 'sql' => '(SELECT datum FROM metro_artikel_preis ' .
226 'WHERE artikel = metro_artikel.id ORDER BY datum DESC LIMIT 1)',
229 'hersteller' => array(
230 'name' => 'Hersteller',
232 'specs' => "filterUI: 't'",
234 'abteilung' => array(
235 'name' => 'Abteilung',
237 'specs' => "filterUI: 's'",
238 'control' => "new Rico.TableColumn.lookup(".grid_lookup_sql('metro_abteilung','id','name').", 0, '')",
239 'distinct' => "SELECT DISTINCT abteilung,metro_abteilung.name FROM metro_artikel JOIN metro_abteilung ON abteilung = metro_abteilung.id ORDER BY name",
245 'specs' => "ClassName: 'aligncenter', filterUI: 's'",
251 'specs' => "ClassName: 'aligncenter', filterUI: 's'",
252 'control' => "new Rico.TableColumn.lookup(".grid_lookup_sql('metro_vpe','id','name').", 0, '')",
253 'distinct' => "SELECT DISTINCT vpe,metro_vpe.name FROM metro_artikel JOIN metro_vpe ON vpe = metro_vpe.id ORDER BY name",
258 'name' => 'Artikelnummer',
263 'abteilung' => array(
264 'name' => 'Abteilung',
266 'options' => 'SELECT id,name AS text FROM metro_abteilung ORDER BY name',
267 'option_empty' => '-- select --',
271 'name' => 'Verpackungseinheit',
273 'options' => 'SELECT id,name AS text FROM metro_vpe ORDER BY name',
274 'option_empty' => '-- select --',
283 'bezeichnung' => array(
284 'name' => 'Bezeichnung',
295 'hersteller' => array(
296 'name' => 'Hersteller',
308 'title' => 'Preisverlauf',
310 'table' => 'metro_artikel_preis',
311 'where' => 'artikel = {id} ORDER BY datum DESC',
321 'steuersatz' => array(
325 'specs' => "decPlaces: 2, ClassName: 'alignrightpad'",
331 'specs' => "decPlaces: 2, ClassName: 'alignrightpad'",
337 'specs' => "decPlaces: 2, ClassName: 'alignrightpad'",
338 'sql' => 'preis * ((100 + steuersatz)/100)',
347 'callbacks' => array(
357 if (empty($_POST['artikel']) || empty($_POST['datum']) || empty($_POST['preis']))
358 return array('error' => 'Nicht ausreichend Daten übermittelt');
360 $date = format_date($_POST['datum']);
361 $_POST['preis'] = str_replace(',','.',$_POST['preis']);
363 $sql = sprintf("INSERT INTO metro_artikel_preis (artikel,preis,steuersatz,datum,sys_user,sys_edit) " .
364 "VALUES (%d,%.3f,%d,'%s',%s,now())",
369 $db->quote($_SESSION['sys']['login']), $row['id']);
371 $sth = $db->query($sql);
380 if (empty($_POST['artnr']))
381 return array('error' => 'Nicht ausreichend Daten übermittelt');
383 $sql = sprintf("SELECT count(*) AS count FROM metro_artikel WHERE artnr = %d", $_POST['artnr']);
384 if (!empty($_POST['artikel']))
385 $sql .= sprintf(" AND id <> %d", $_POST['artikel']);
387 $sth = $db->query($sql);
388 $row = $sth->fetch();
390 return array('count' => $row['count']);