3 JavaScript::instance()->file('lib/rico3/minsrc/ricoLiveGridControls.js');
4 JavaScript::instance()->add("Hallinta.closeDialogAfterInsert = false;");
5 JavaScript::instance()->add("Hallinta.closeDialogAfterSave = false;");
6 JavaScript::instance()->add("Hallinta.fetchItemAfterInsert = true;");
7 JavaScript::instance()->add("Hallinta.postFetch = function(data){\$('#edit_artnr').select();};");
8 JavaScript::instance()->add("Hallinta.postLoadForm = artikel_init_form;");
10 Styles::instance()->add("
21 <input id="form_artikel" name="artikel" type="hidden" />
22 <label for="form_datum">Rechnungsdatum</label><br>
23 <input id="form_datum" name="datum" size="8"> <img class="calendar" src="images/icons/calendar.gif" onclick="calendar(\\\'form_datum\\\',event)" />
25 <label for="form_steuer">Steuersatz</label><br>
26 <input id="form_steuer" name="steuer" size="10">
28 <label for="form_preis">Nettopreis</label><br>
29 <input id="form_preis" name="preis" size="10">
30 <div class="buttons" style="margin-top: 15px;">
31 <button class="custom" onclick="return add_price(this);">Hinzufügen</button>
38 var custom_this = false;
39 function custom_save_callback(data)
42 var text = "Diese Artikelnummer ist bereits " + data.count + " mal vorhanden.\\nSoll der Artikel trotzdem gespeichert werden?";
44 form_save(custom_this);
46 form_save(custom_this);
50 function custom_save(obj)
53 var id = document.getElementById('edit_id');
56 return custom_insert(obj);
58 var artnr = document.getElementById('edit_artnr');
60 if (artnr.value == 0) return form_save(custom_this);
62 var parms = 'callback=artnr';
63 parms += '&artnr=' + artnr.value;
64 parms += '&artikel=' + id.value;
65 ajax_request('function', parms, custom_save_callback);
70 function custom_insert_callback(data)
73 var text = "Diese Artikelnummer ist bereits " + data.count + " mal vorhanden.\\nSoll der Artikel trotzdem hinzugefügt werden?";
75 form_insert(custom_this);
77 form_insert(custom_this);
81 function custom_insert(obj)
84 var artnr = document.getElementById('edit_artnr');
86 if (artnr.value == 0) return form_insert(custom_this);
88 var parms = 'callback=artnr';
89 parms += '&artnr=' + artnr.value;
90 ajax_request('function', parms, custom_insert_callback);
95 var price_popup = false;
96 function price_popup_open()
99 var options = { hideOnClick: false, canDragFunc: true };
100 var content = 'CONTENT_FORM';
102 price_popup = new Rico.Window('Preis hinzufügen', options);
103 price_popup.contentDiv.innerHTML = content;
105 price_popup.centerPopup();
107 price_popup.openPopup();
109 var form_id = document.getElementById('edit_id');
110 var artikel = document.getElementById('form_artikel');
111 artikel.value = form_id.value;
113 if ($('#form_datum').val().length)
114 $('#form_preis').select();
116 $('#form_datum').select();
119 function open_popup()
121 if (!$('#edit_id').val().length) return false;
127 function add_price_callback(data)
129 info('Preis gespeichert');
130 grid_update(Hallinta.grid);
133 function add_price(obj)
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 parms = 'callback=price&' + $(obj.form).serialize();
154 ajax_request('function', parms, add_price_callback);
156 price_popup.closePopup();
162 function artikel_init_form()
164 $('#button_save').attr('onclick','').prop('onclick',null).off('click');
165 $('#button_save').click(function () {return custom_save(this);});
166 $('#button_insert').attr('onclick','').prop('onclick',null).off('click');
167 $('#button_insert').click(function () {return custom_insert(this);});
172 $jscode = str_replace('CONTENT_FORM', str_replace(array("\n"),
173 array("\\\n"), $form), $jscode);
174 JavaScript::instance()->add($jscode);
177 <p style="margin-top: 5px; margin-bottom: 4px; text-align: center;">
178 <button class="custom" onclick="return open_popup()">Preis hinzufügen</button>
183 'table' => 'metro_artikel',
184 'title' => 'Artikelstammdaten',
185 'join' => array('metro_abteilung ON abteilung = metro_abteilung.id'),
190 'sql' => 'metro_artikel.id',
198 'specs' => array('decPlaces' => 0, 'thouSep' => ''),
204 'specs' => array('ClassName' => 'alignrightpad'),
206 'bezeichnung' => array(
207 'name' => 'Bezeichnung',
215 'specs' => array('decPlaces' => 2, 'ClassName' => 'alignrightpad'),
216 'sql' => '(SELECT preis FROM metro_artikel_preis ' .
217 'WHERE artikel = metro_artikel.id ORDER BY datum DESC LIMIT 1)',
223 'specs' => array('decPlaces' => 2, 'ClassName' => 'alignrightpad'),
224 'sql' => '(SELECT preis * ((100 + steuersatz)/100) FROM metro_artikel_preis ' .
225 'WHERE artikel = metro_artikel.id ORDER BY datum DESC LIMIT 1)',
231 'sql' => '(SELECT datum FROM metro_artikel_preis ' .
232 'WHERE artikel = metro_artikel.id ORDER BY datum DESC LIMIT 1)',
235 'hersteller' => array(
236 'name' => 'Hersteller',
240 'abteilung' => array(
241 'name' => 'Abteilung',
245 'control' => "new Rico.TableColumn.lookup(".grid_lookup_sql('metro_abteilung','id','name').", 0, '')",
246 'distinct' => "SELECT DISTINCT abteilung,metro_abteilung.name FROM metro_artikel JOIN metro_abteilung ON abteilung = metro_abteilung.id ORDER BY name",
253 'specs' => array('ClassName' => 'aligncenter'),
261 'specs' => array('ClassName' => 'aligncenter'),
262 'control' => "new Rico.TableColumn.lookup(".grid_lookup_sql('metro_vpe','id','name').", 0, '')",
263 'distinct' => "SELECT DISTINCT vpe,metro_vpe.name FROM metro_artikel JOIN metro_vpe ON vpe = metro_vpe.id ORDER BY name",
268 'name' => 'Artikelnummer',
273 'abteilung' => array(
274 'name' => 'Abteilung',
276 'options' => 'SELECT id,name AS text FROM metro_abteilung ORDER BY name',
277 'option_empty' => '-- select --',
281 'name' => 'Verpackungseinheit',
283 'options' => 'SELECT id,name AS text FROM metro_vpe ORDER BY name',
284 'option_empty' => '-- select --',
293 'bezeichnung' => array(
294 'name' => 'Bezeichnung',
305 'hersteller' => array(
306 'name' => 'Hersteller',
312 'name' => 'Artikel nicht mehr im Programm',
322 'pricelist' => array(
323 'title' => 'Preisverlauf',
325 'table' => 'metro_artikel_preis',
326 'table_edit' => 'metro_artikel_preis',
327 'where' => 'artikel = {id} ORDER BY datum DESC',
331 'edit' => array('Writeable' => false, 'EntryType' => 'H', 'Length' => 4, 'isKey' => true),
337 'edit' => array('EntryType' => 'T', 'isNullable' => false, 'Writeable' => true),
339 'steuersatz' => array(
343 'specs' => array('decPlaces' => 2, 'ClassName' => 'alignrightpad'),
344 'edit' => array('EntryType' => 'T', 'isNullable' => false, 'Writeable' => true),
350 'specs' => array('decPlaces' => 2, 'ClassName' => 'alignrightpad'),
351 'edit' => array('EntryType' => 'T', 'isNullable' => false, 'Writeable' => true),
357 'specs' => array('decPlaces' => 2, 'ClassName' => 'alignrightpad'),
358 'sql' => 'preis * ((100 + steuersatz)/100)',
368 'callbacks' => array(
378 if (empty($_POST['artikel']) || empty($_POST['datum']) || empty($_POST['preis']))
379 return array('error' => 'Nicht ausreichend Daten übermittelt');
381 $date = format_date($_POST['datum']);
382 $_POST['preis'] = str_replace(',','.',$_POST['preis']);
384 $sql = sprintf("INSERT INTO metro_artikel_preis (artikel,preis,steuersatz,datum,sys_user,sys_edit) " .
385 "VALUES (%d,%.3f,%d,'%s',%s,now())",
390 $db->quote($_SESSION['sys']['login']), $row['id']);
392 $sth = $db->query($sql);
401 if (empty($_POST['artnr']))
402 return array('error' => 'Nicht ausreichend Daten übermittelt');
404 $sql = sprintf("SELECT count(*) AS count FROM metro_artikel WHERE artnr = %d", $_POST['artnr']);
405 if (!empty($_POST['artikel']))
406 $sql .= sprintf(" AND id <> %d", $_POST['artikel']);
408 $sth = $db->query($sql);
409 $row = $sth->fetch();
411 return array('count' => $row['count']);