3 JavaScript::instance()->file('lib/rico3/minsrc/ricoLiveGridControls.js');
5 Styles::instance()->add("
16 <input id="form_artikel" name="artikel" type="hidden" />
17 <label for="form_datum">Rechnungsdatum</label><br>
18 <input id="form_datum" name="datum" size="8"> <img class="calendar" src="images/icons/calendar.gif" onclick="calendar(\\\'form_datum\\\',event)" />
20 <label for="form_steuer">Steuersatz</label><br>
21 <input id="form_steuer" name="steuer" size="10">
23 <label for="form_preis">Nettopreis</label><br>
24 <input id="form_preis" name="preis" size="10">
25 <div class="buttons" style="margin-top: 15px;">
26 <button class="custom" onclick="return add_price(this);">Hinzufügen</button>
33 var custom_this = false;
34 function custom_save_callback(data)
37 var text = "Diese Artikelnummer ist bereits " + data.count + " mal vorhanden.\\nSoll der Artikel trotzdem gespeichert werden?";
39 form_save(custom_this);
41 form_save(custom_this);
45 function custom_save(obj)
48 var id = document.getElementById('edit_id');
51 return custom_insert(obj);
53 var artnr = document.getElementById('edit_artnr');
55 if (artnr.value == 0) return form_save(custom_this);
57 var parms = 'callback=artnr';
58 parms += '&artnr=' + artnr.value;
59 parms += '&artikel=' + id.value;
60 ajax_request('function', parms, custom_save_callback);
65 function custom_insert_callback(data)
68 var text = "Diese Artikelnummer ist bereits " + data.count + " mal vorhanden.\\nSoll der Artikel trotzdem hinzugefügt werden?";
70 form_insert(custom_this);
72 form_insert(custom_this);
76 function custom_insert(obj)
79 var artnr = document.getElementById('edit_artnr');
81 if (artnr.value == 0) return form_insert(custom_this);
83 var parms = 'callback=artnr';
84 parms += '&artnr=' + artnr.value;
85 ajax_request('function', parms, custom_insert_callback);
90 var price_popup = false;
91 function price_popup_open()
94 var options = { hideOnClick: false, canDragFunc: true };
95 var content = 'CONTENT_FORM';
97 price_popup = new Rico.Window('Preis hinzufügen', options);
98 price_popup.contentDiv.innerHTML = content;
100 price_popup.centerPopup();
102 price_popup.openPopup();
104 var form_id = document.getElementById('edit_id');
105 var artikel = document.getElementById('form_artikel');
106 artikel.value = form_id.value;
108 if ($('#form_datum').val().length)
109 $('#form_preis').select();
111 $('#form_datum').select();
114 function open_popup()
116 if (!$('#edit_id').val().length) return false;
122 function add_price_callback(data)
124 info('Preis gespeichert');
125 grid_update(Hallinta.grid);
128 function add_price(obj)
130 var datum = document.getElementById('form_datum');
131 if (!datum.value.length) {
132 error('Kein Rechnungsdatum angegeben');
136 var steuer = document.getElementById('form_steuer');
137 if (!steuer.value.length) {
138 error('Kein Steuersatz angegeben');
142 var preis = document.getElementById('form_preis');
143 if (!preis.value.length) {
144 error('Kein Preis angegeben');
148 var parms = 'callback=price&' + $(obj.form).serialize();
149 ajax_request('function', parms, add_price_callback);
151 price_popup.closePopup();
158 $jscode = str_replace('CONTENT_FORM', str_replace(array("\n"),
159 array("\\\n"), $form), $jscode);
160 JavaScript::instance()->add($jscode);
161 JavaScript::instance()->onLoad("\$('#button_save').click(function () {return custom_save(this);});");
162 JavaScript::instance()->onLoad("\$('#button_insert').click(function () {return custom_insert(this);});");
165 <p style="margin-top: 5px; margin-bottom: 4px; text-align: center;">
166 <button class="custom" onclick="return open_popup()">Preis hinzufügen</button>
171 'table' => 'metro_artikel',
172 'title' => 'Artikelstammdaten',
173 'join' => array('metro_abteilung ON abteilung = metro_abteilung.id'),
178 'sql' => 'metro_artikel.id',
185 'specs' => array('decPlaces' => 0, 'thouSep' => ''),
191 'specs' => array('ClassName' => 'alignrightpad'),
193 'bezeichnung' => array(
194 'name' => 'Bezeichnung',
202 'specs' => array('decPlaces' => 2, 'ClassName' => 'alignrightpad'),
203 'sql' => '(SELECT preis FROM metro_artikel_preis ' .
204 'WHERE artikel = metro_artikel.id ORDER BY datum DESC LIMIT 1)',
210 'specs' => array('decPlaces' => 2, 'ClassName' => 'alignrightpad'),
211 'sql' => '(SELECT preis * ((100 + steuersatz)/100) FROM metro_artikel_preis ' .
212 'WHERE artikel = metro_artikel.id ORDER BY datum DESC LIMIT 1)',
218 'sql' => '(SELECT datum FROM metro_artikel_preis ' .
219 'WHERE artikel = metro_artikel.id ORDER BY datum DESC LIMIT 1)',
222 'hersteller' => array(
223 'name' => 'Hersteller',
227 'abteilung' => array(
228 'name' => 'Abteilung',
231 'control' => "new Rico.TableColumn.lookup(".grid_lookup_sql('metro_abteilung','id','name').", 0, '')",
232 'distinct' => "SELECT DISTINCT abteilung,metro_abteilung.name FROM metro_artikel JOIN metro_abteilung ON abteilung = metro_abteilung.id ORDER BY name",
239 'specs' => array('ClassName' => 'aligncenter'),
246 'specs' => array('ClassName' => 'aligncenter'),
247 'control' => "new Rico.TableColumn.lookup(".grid_lookup_sql('metro_vpe','id','name').", 0, '')",
248 'distinct' => "SELECT DISTINCT vpe,metro_vpe.name FROM metro_artikel JOIN metro_vpe ON vpe = metro_vpe.id ORDER BY name",
253 'name' => 'Artikelnummer',
258 'abteilung' => array(
259 'name' => 'Abteilung',
261 'options' => 'SELECT id,name AS text FROM metro_abteilung ORDER BY name',
262 'option_empty' => '-- select --',
266 'name' => 'Verpackungseinheit',
268 'options' => 'SELECT id,name AS text FROM metro_vpe ORDER BY name',
269 'option_empty' => '-- select --',
278 'bezeichnung' => array(
279 'name' => 'Bezeichnung',
290 'hersteller' => array(
291 'name' => 'Hersteller',
297 'name' => 'Artikel nicht mehr im Programm',
307 'pricelist' => array(
308 'title' => 'Preisverlauf',
310 'table' => 'metro_artikel_preis',
311 'table_edit' => 'metro_artikel_preis',
312 'where' => 'artikel = {id} ORDER BY datum DESC',
316 'edit' => array('Writeable' => false, 'EntryType' => 'H', 'Length' => 4, 'isKey' => true),
322 'edit' => array('EntryType' => 'T', 'isNullable' => false, 'Writeable' => true),
324 'steuersatz' => array(
328 'specs' => array('decPlaces' => 2, 'ClassName' => 'alignrightpad'),
329 'edit' => array('EntryType' => 'T', 'isNullable' => false, 'Writeable' => true),
335 'specs' => array('decPlaces' => 2, 'ClassName' => 'alignrightpad'),
336 'edit' => array('EntryType' => 'T', 'isNullable' => false, 'Writeable' => true),
342 'specs' => array('decPlaces' => 2, 'ClassName' => 'alignrightpad'),
343 'sql' => 'preis * ((100 + steuersatz)/100)',
353 'callbacks' => array(
363 if (empty($_POST['artikel']) || empty($_POST['datum']) || empty($_POST['preis']))
364 return array('error' => 'Nicht ausreichend Daten übermittelt');
366 $date = format_date($_POST['datum']);
367 $_POST['preis'] = str_replace(',','.',$_POST['preis']);
369 $sql = sprintf("INSERT INTO metro_artikel_preis (artikel,preis,steuersatz,datum,sys_user,sys_edit) " .
370 "VALUES (%d,%.3f,%d,'%s',%s,now())",
375 $db->quote($_SESSION['sys']['login']), $row['id']);
377 $sth = $db->query($sql);
386 if (empty($_POST['artnr']))
387 return array('error' => 'Nicht ausreichend Daten übermittelt');
389 $sql = sprintf("SELECT count(*) AS count FROM metro_artikel WHERE artnr = %d", $_POST['artnr']);
390 if (!empty($_POST['artikel']))
391 $sql .= sprintf(" AND id <> %d", $_POST['artikel']);
393 $sth = $db->query($sql);
394 $row = $sth->fetch();
396 return array('count' => $row['count']);