3 JavaScript::instance()->file('lib/rico3/minsrc/ricoLiveGridControls.js');
4 JavaScript::instance()->add("Hallinta.closeDialogAfterInsert = false;");
5 JavaScript::instance()->add("Hallinta.postFetch = function(data){\$('#edit_artnr').select();};");
7 Styles::instance()->add("
18 <input id="form_artikel" name="artikel" type="hidden" />
19 <label for="form_datum">Rechnungsdatum</label><br>
20 <input id="form_datum" name="datum" size="8"> <img class="calendar" src="images/icons/calendar.gif" onclick="calendar(\\\'form_datum\\\',event)" />
22 <label for="form_steuer">Steuersatz</label><br>
23 <input id="form_steuer" name="steuer" size="10">
25 <label for="form_preis">Nettopreis</label><br>
26 <input id="form_preis" name="preis" size="10">
27 <div class="buttons" style="margin-top: 15px;">
28 <button class="custom" onclick="return add_price(this);">Hinzufügen</button>
35 var custom_this = false;
36 function custom_save_callback(data)
39 var text = "Diese Artikelnummer ist bereits " + data.count + " mal vorhanden.\\nSoll der Artikel trotzdem gespeichert werden?";
41 form_save(custom_this);
43 form_save(custom_this);
47 function custom_save(obj)
50 var id = document.getElementById('edit_id');
53 return custom_insert(obj);
55 var artnr = document.getElementById('edit_artnr');
57 if (artnr.value == 0) return form_save(custom_this);
59 var parms = 'callback=artnr';
60 parms += '&artnr=' + artnr.value;
61 parms += '&artikel=' + id.value;
62 ajax_request('function', parms, custom_save_callback);
67 function custom_insert_callback(data)
70 var text = "Diese Artikelnummer ist bereits " + data.count + " mal vorhanden.\\nSoll der Artikel trotzdem hinzugefügt werden?";
72 form_insert(custom_this);
74 form_insert(custom_this);
78 function custom_insert(obj)
81 var artnr = document.getElementById('edit_artnr');
83 if (artnr.value == 0) return form_insert(custom_this);
85 var parms = 'callback=artnr';
86 parms += '&artnr=' + artnr.value;
87 ajax_request('function', parms, custom_insert_callback);
92 var price_popup = false;
93 function price_popup_open()
96 var options = { hideOnClick: false, canDragFunc: true };
97 var content = 'CONTENT_FORM';
99 price_popup = new Rico.Window('Preis hinzufügen', options);
100 price_popup.contentDiv.innerHTML = content;
102 price_popup.centerPopup();
104 price_popup.openPopup();
106 var form_id = document.getElementById('edit_id');
107 var artikel = document.getElementById('form_artikel');
108 artikel.value = form_id.value;
110 if ($('#form_datum').val().length)
111 $('#form_preis').select();
113 $('#form_datum').select();
116 function open_popup()
118 if (!$('#edit_id').val().length) return false;
124 function add_price_callback(data)
126 info('Preis gespeichert');
127 grid_update(Hallinta.grid);
130 function add_price(obj)
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 parms = 'callback=price&' + $(obj.form).serialize();
151 ajax_request('function', parms, add_price_callback);
153 price_popup.closePopup();
160 $jscode = str_replace('CONTENT_FORM', str_replace(array("\n"),
161 array("\\\n"), $form), $jscode);
162 JavaScript::instance()->add($jscode);
163 JavaScript::instance()->onLoad("\$('#button_save').click(function () {return custom_save(this);});");
164 JavaScript::instance()->onLoad("\$('#button_insert').click(function () {return custom_insert(this);});");
167 <p style="margin-top: 5px; margin-bottom: 4px; text-align: center;">
168 <button class="custom" onclick="return open_popup()">Preis hinzufügen</button>
173 'table' => 'metro_artikel',
174 'title' => 'Artikelstammdaten',
175 'join' => array('metro_abteilung ON abteilung = metro_abteilung.id'),
180 'sql' => 'metro_artikel.id',
188 'specs' => array('decPlaces' => 0, 'thouSep' => ''),
194 'specs' => array('ClassName' => 'alignrightpad'),
196 'bezeichnung' => array(
197 'name' => 'Bezeichnung',
205 'specs' => array('decPlaces' => 2, 'ClassName' => 'alignrightpad'),
206 'sql' => '(SELECT preis FROM metro_artikel_preis ' .
207 'WHERE artikel = metro_artikel.id ORDER BY datum DESC LIMIT 1)',
213 'specs' => array('decPlaces' => 2, 'ClassName' => 'alignrightpad'),
214 'sql' => '(SELECT preis * ((100 + steuersatz)/100) FROM metro_artikel_preis ' .
215 'WHERE artikel = metro_artikel.id ORDER BY datum DESC LIMIT 1)',
221 'sql' => '(SELECT datum FROM metro_artikel_preis ' .
222 'WHERE artikel = metro_artikel.id ORDER BY datum DESC LIMIT 1)',
225 'hersteller' => array(
226 'name' => 'Hersteller',
230 'abteilung' => array(
231 'name' => 'Abteilung',
235 'control' => "new Rico.TableColumn.lookup(".grid_lookup_sql('metro_abteilung','id','name').", 0, '')",
236 'distinct' => "SELECT DISTINCT abteilung,metro_abteilung.name FROM metro_artikel JOIN metro_abteilung ON abteilung = metro_abteilung.id ORDER BY name",
243 'specs' => array('ClassName' => 'aligncenter'),
251 'specs' => array('ClassName' => 'aligncenter'),
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',
302 'name' => 'Artikel nicht mehr im Programm',
312 'pricelist' => array(
313 'title' => 'Preisverlauf',
315 'table' => 'metro_artikel_preis',
316 'table_edit' => 'metro_artikel_preis',
317 'where' => 'artikel = {id} ORDER BY datum DESC',
321 'edit' => array('Writeable' => false, 'EntryType' => 'H', 'Length' => 4, 'isKey' => true),
327 'edit' => array('EntryType' => 'T', 'isNullable' => false, 'Writeable' => true),
329 'steuersatz' => array(
333 'specs' => array('decPlaces' => 2, 'ClassName' => 'alignrightpad'),
334 'edit' => array('EntryType' => 'T', 'isNullable' => false, 'Writeable' => true),
340 'specs' => array('decPlaces' => 2, 'ClassName' => 'alignrightpad'),
341 'edit' => array('EntryType' => 'T', 'isNullable' => false, 'Writeable' => true),
347 'specs' => array('decPlaces' => 2, 'ClassName' => 'alignrightpad'),
348 'sql' => 'preis * ((100 + steuersatz)/100)',
358 'callbacks' => array(
368 if (empty($_POST['artikel']) || empty($_POST['datum']) || empty($_POST['preis']))
369 return array('error' => 'Nicht ausreichend Daten übermittelt');
371 $date = format_date($_POST['datum']);
372 $_POST['preis'] = str_replace(',','.',$_POST['preis']);
374 $sql = sprintf("INSERT INTO metro_artikel_preis (artikel,preis,steuersatz,datum,sys_user,sys_edit) " .
375 "VALUES (%d,%.3f,%d,'%s',%s,now())",
380 $db->quote($_SESSION['sys']['login']), $row['id']);
382 $sth = $db->query($sql);
391 if (empty($_POST['artnr']))
392 return array('error' => 'Nicht ausreichend Daten übermittelt');
394 $sql = sprintf("SELECT count(*) AS count FROM metro_artikel WHERE artnr = %d", $_POST['artnr']);
395 if (!empty($_POST['artikel']))
396 $sql .= sprintf(" AND id <> %d", $_POST['artikel']);
398 $sth = $db->query($sql);
399 $row = $sth->fetch();
401 return array('count' => $row['count']);