From 98b8577deb8303963dcc84e1ef9b2c0513c5cc4e Mon Sep 17 00:00:00 2001 From: Joey Schulze Date: Wed, 28 Dec 2011 13:54:56 +0100 Subject: [PATCH 1/1] Import current development version --- abteilung.php | 36 ++++++++ artikel.php | 96 +++++++++++++++++++++ ordersatz.php | 129 ++++++++++++++++++++++++++++ ordersatz.tex | 90 ++++++++++++++++++++ ordersatz_pos.php | 209 ++++++++++++++++++++++++++++++++++++++++++++++ utils.php | 123 +++++++++++++++++++++++++++ vpe.php | 36 ++++++++ 7 files changed, 719 insertions(+) create mode 100644 abteilung.php create mode 100644 artikel.php create mode 100644 ordersatz.php create mode 100644 ordersatz.tex create mode 100644 ordersatz_pos.php create mode 100644 utils.php create mode 100644 vpe.php diff --git a/abteilung.php b/abteilung.php new file mode 100644 index 0000000..0424da9 --- /dev/null +++ b/abteilung.php @@ -0,0 +1,36 @@ + 'metro_abteilung', + 'title' => 'Abteilungen', + 'list' => array( + 'id' => array( + 'name' => 'ID', + 'visible' => false, + ), + 'gang' => array( + 'name' => 'Gang', + 'width' => 50, + ), + 'name' => array( + 'name' => 'Name', + 'width' => 200, + ), + ), + 'edit' => array( + 'gang' => array( + 'name' => 'Gang', + 'type' => 'text', + 'size' => 10, + 'null' => true, + ), + 'name' => array( + 'name' => 'Name', + 'type' => 'text', + 'size' => 25, + 'required' => true, + ), + ), + ); + +?> diff --git a/artikel.php b/artikel.php new file mode 100644 index 0000000..018a00f --- /dev/null +++ b/artikel.php @@ -0,0 +1,96 @@ + 'metro_artikel', + 'title' => 'Artikelstammdaten', + 'join' => array('metro_abteilung ON abteilung = metro_abteilung.id'), + 'list' => array( + 'id' => array( + 'name' => 'ID', + 'visible' => false, + 'sql' => 'metro_artikel.id', + ), + 'artnr' => array( + 'name' => 'ArtNr', + 'width' => 60, + 'specs' => "filterUI: 't'", + ), + 'menge' => array( + 'name' => 'Menge', + 'width' => 60, + 'specs' => "ClassName: 'alignrightpad', filterUI: 't'", + ), + 'bezeichnung' => array( + 'name' => 'Bezeichnung', + 'width' => 345, + 'specs' => "filterUI: 't'", + ), + 'hersteller' => array( + 'name' => 'Hersteller', + 'width' => 100, + 'specs' => "filterUI: 't'", + 'visible' => false, + ), + 'abteilung' => array( + 'name' => 'Abteilung', + 'width' => 200, + 'specs' => "filterUI: 's'", + 'control' => "new Rico.TableColumn.lookup(".grid_lookup_sql('metro_abteilung','id','name').", 0, '')", + 'visible' => false, + ), + 'gang' => array( + 'name' => 'Gang', + 'width' => 50, + 'specs' => "ClassName: 'aligncenter', filterUI: 's'", + 'visible' => false, + ), + 'vpe' => array( + 'name' => 'Einheit', + 'width' => 70, + 'specs' => "ClassName: 'aligncenter', filterUI: 's'", + 'control' => "new Rico.TableColumn.lookup(".grid_lookup_sql('metro_vpe','id','name').", 0, '')", + ), + ), + 'edit' => array( + 'artnr' => array( + 'name' => 'Artikelnummer', + 'type' => 'number', + 'size' => 25, + 'required' => true, + ), + 'abteilung' => array( + 'name' => 'Abteilung', + 'type' => 'select', + 'options' => 'SELECT id,name AS text FROM metro_abteilung ORDER BY name', + 'option_empty' => '-- select --', + 'required' => true, + ), + 'vpe' => array( + 'name' => 'Verpackungseinheit', + 'type' => 'select', + 'options' => 'SELECT id,name AS text FROM metro_vpe ORDER BY name', + 'option_empty' => '-- select --', + 'required' => true, + ), + 'menge' => array( + 'name' => 'Menge', + 'type' => 'text', + 'size' => 15, + 'null' => true, + ), + 'bezeichnung' => array( + 'name' => 'Bezeichnung', + 'type' => 'text', + 'size' => 25, + 'required' => true, + ), + 'hersteller' => array( + 'name' => 'Hersteller', + 'type' => 'text', + 'size' => 25, + 'null' => true, + ), + ), + ); + +?> diff --git a/ordersatz.php b/ordersatz.php new file mode 100644 index 0000000..1c2cc6f --- /dev/null +++ b/ordersatz.php @@ -0,0 +1,129 @@ +query($query); + $row = $sth->fetch(); + if ($row) return 'Ordersatz für ' . $row['name']; + else return 'Unbekannter Ordersatz'; +} + +$href = "new Rico.TableColumn.link('./?mask=metro__ordersatz_pos&id={0}')"; + +# INSERT INTO metro_ordersatz_pos (ordersatz,artikel,sys_user,sys_edit) SELECT ORDERID,id,'joey',now() FROM metro_artikel; +# DELETE FROM metro_ordersatz_pos WHERE ordersatz = ORDERID AND anzahl IS NULL +$mask = array( + 'table' => 'metro_ordersatz', + 'title' => 'Ordersatz auswählen / erstellen', + 'where' => sprintf('owner = %d AND done IS NULL', $_SESSION['sys']['uid']), + 'list' => array( + 'id' => array( + 'name' => 'ID', + 'visible' => false, + ), + 'erstellt' => array( + 'name' => 'Erstellt', + 'width' => 70, + 'specs' => "ClassName: 'alignrightpad', filterUI: 't'", + ), + 'name' => array( + 'name' => 'Name', + 'width' => 250, + 'specs' => "filterUI: 't'", + ), + 'koch' => array( + 'name' => 'Kochbetreuer', + 'width' => 100, + 'specs' => "filterUI: 't'", + ), + 'datum' => array( + 'name' => 'Einkauf am', + 'width' => 110, + 'sql' => "datum || ' ' || uhrzeit || ' Uhr'", + ), + 'link' => array( + 'name' => 'auswählen', + 'width' => 90, + 'control' => $href, + 'specs' => "ClassName: 'aligncenter'", + 'sql' => "'auswählen'", + ), + ), + 'edit' => array( + 'owner' => array( + 'type' => 'hidden', + 'default' => $_SESSION['sys']['uid'], + 'required' => true, + ), + 'erstellt' => array( + 'type' => 'hidden', + 'subtype' => 'string', + 'default' => date('Y-m-d'), + 'required' => true, + ), + 'name' => array( + 'name' => 'Name', + 'type' => 'text', + 'size' => 25, + 'required' => true, + ), + 'koch' => array( + 'name' => 'Kochbetreuer', + 'type' => 'text', + 'size' => 25, + 'required' => true, + ), + 'email' => array( + 'name' => 'E-Mail', + 'type' => 'text', + 'size' => 25, + 'null' => true, + ), + 'telefon' => array( + 'name' => 'Telefon für Rückfragen', + 'type' => 'text', + 'size' => 25, + 'required' => true, + ), + 'datum' => array( + 'name' => 'Abholdatum', + 'type' => 'date', + 'size' => 8, + 'required' => true, + ), + 'uhrzeit' => array( + 'name' => 'Ungefähre Uhrzeit der Abholung', + 'type' => 'number', + 'size' => 3, + 'required' => true, + ), + ), + 'postinsert' => ordersatz_insert, + ); + +function ordersatz_insert($id) +{ + global $db; + + $sql = sprintf("INSERT INTO metro_ordersatz_pos (ordersatz,artikel,sys_user,sys_edit) SELECT %d,id,%s,now() FROM metro_artikel", + $id, $db->quote($_SESSION['sys']['login'])); + error_log($sql); + + $sth = $db->query($sql); +} + +?> diff --git a/ordersatz.tex b/ordersatz.tex new file mode 100644 index 0000000..a9ca8e3 --- /dev/null +++ b/ordersatz.tex @@ -0,0 +1,90 @@ +\documentclass{dinbrief} +\usepackage[T1]{fontenc} +\usepackage[latin1]{inputenc} +\usepackage{german} +\usepackage{times} +\usepackage{supertabular} + + +% +% Per Fax an 0441-2002-364 +% + + +\input ordersatz_vars + +\place{Oldenburg} + +\nowindowrules +\nowindowtics +\centeraddress + +\signature{\koch} +\address{% +\begin{flushright} + \koch\\ + FIPS Sportfreizeiten\\ + Tannenkampstr. 4\\ + 26\,129 Oldenburg\\[\medskipamount] + Tel: \telefon +\end{flushright} +} +% \backaddress{J. Schulze $\bullet$ FIPS Sportfreizeiten $\bullet$ joey@infodrom.org} + +% \def\today{\tt 17. M"arz 1996} + +\newcommand{\order}[4]{% +#2 & #3 & #4 & #1\\ \hline +} + + +\begin{document} + +\begin{letter}{An den\\ + Metro Store Oldenburg\\ + An der Schmiede\\[\medskipamount] + 26\,135 Oldenburg} + +\concern{\textbf{Kundenordersatz (\reise)} \hfill Kunden Nr. 00074/88402} + +\opening{\hfill Waren zur Abholung am \datum, ca. \uhrzeit{} Uhr} + +Sehr geehrte Damen und Herren, + +hiermit möchten wir folgende Waren bestellen und Sie bitten, diese auf +einem Einkaufswagen für unseren Einkauf am \datum{} um ca. \uhrzeit{} Uhr +bereitzustellen. Wir werden die Waren dort abholen und voraussichtlich +noch weitere Artikel einkaufen. + +\vspace{1cm} +\begin{sffamily} +\renewcommand{\arraystretch}{1.4} + +\tablefirsthead{% +\hline +\textbf{ArtNr} & \textbf{Artikelbezeichnung} & \textbf{VPE} & \textbf{Menge}\\ +\hline +} + +\tablehead{% +\hline +\textbf{ArtNr} & \textbf{Artikelbezeichnung} & \textbf{VPE} & \textbf{Menge}\\ +\hline +} + +\tabletail{% +\hline +} + +\begin{supertabular}{|l|p{11.8cm}|r|r|} +\input ordersatz_items + +\end{supertabular} + +\end{sffamily} + +\closing{Mit freundlichen Grüßen} + +\end{letter} + +\end{document} diff --git a/ordersatz_pos.php b/ordersatz_pos.php new file mode 100644 index 0000000..be16e98 --- /dev/null +++ b/ordersatz_pos.php @@ -0,0 +1,209 @@ + + +  + +
Bei Abschluß wird ein Fax zu Metro und eine Kopie per Mail an den Koch geschickt. +

+EOC; + +function get_title($id) +{ + global $db; + + $query = sprintf('SELECT name FROM metro_ordersatz WHERE id = %d', $id); + $sth = $db->query($query); + $row = $sth->fetch(); + if ($row) return 'Ordersatz für ' . $row['name']; + else return 'Unbekannter Ordersatz'; +} + +# INSERT INTO metro_ordersatz_pos (ordersatz,artikel,sys_user,sys_edit) SELECT ORDERID,id,'joey',now() FROM metro_artikel; +# DELETE FROM metro_ordersatz_pos WHERE ordersatz = ORDERID AND anzahl IS NULL +$mask = array( + 'table' => 'metro_ordersatz', + 'join' => array('metro_ordersatz_pos ON ordersatz = metro_ordersatz.id', + 'metro_artikel ON artikel = metro_artikel.id'), + 'title' => get_title($_SESSION['ordersatz']), + 'where' => sprintf('ordersatz = %d AND owner = %d AND done IS NULL', $_SESSION['ordersatz'], $_SESSION['sys']['uid']), + 'list' => array( + 'id' => array( + 'name' => 'ID', + 'sql' => 'metro_artikel.id', + 'visible' => false, + ), + 'anzahl' => array( + 'name' => 'Anzahl', + 'width' => 60, + 'specs' => "ClassName: 'alignrightpad', filterUI: 't'", + ), + 'artnr' => array( + 'name' => 'Artnr', + 'width' => 60, + 'specs' => "filterUI: 't'", + ), + 'menge' => array( + 'name' => 'Menge', + 'width' => 60, + 'specs' => "ClassName: 'alignrightpad', filterUI: 't'", + ), + 'bezeichnung' => array( + 'name' => 'Bezeichnung', + 'width' => 260, + 'specs' => "filterUI: 't'", + ), + 'hersteller' => array( + 'name' => 'Hersteller', + 'width' => 80, + 'specs' => "filterUI: 't'", + ), + 'vpe' => array( + 'name' => 'Einheit', + 'width' => 70, + 'specs' => "ClassName: 'aligncenter', filterUI: 's'", + 'control' => "new Rico.TableColumn.lookup(".grid_lookup_sql('metro_vpe','id','name').", 0, '')", + ), + 'abteilung' => array( + 'name' => 'Abteilung', + 'width' => 80, + 'specs' => "ClassName: 'aligncenter', filterUI: 's'", + 'control' => "new Rico.TableColumn.lookup(".grid_lookup_sql('metro_abteilung','id','name').", 0, '')", + ), + 'gang' => array( + 'name' => 'Gang', + 'width' => 50, + 'sql' => 'abteilung', + 'specs' => "ClassName: 'aligncenter', filterUI: 's'", + 'control' => "new Rico.TableColumn.lookup(".grid_lookup_sql('metro_abteilung','id','gang').", 0, '')", + ), + ), + 'edit' => array( + 'buttons' => array( + 'type' => 'html', + 'code' => $buttons, + 'sql' => false, + ), + ), + 'callbacks' => array( + 'cellsave' => cb_cellsave, + 'pdf' => cb_pdf, + 'send' => cb_send, + ), + 'files' => array( + 'download' => process_download, + ), + ); + +function cb_cellsave() +{ + global $db; + + if ($_POST['value'] == 0) + $sql = sprintf("UPDATE metro_ordersatz_pos SET anzahl = NULL, sys_user = %s, sys_edit = now() WHERE ordersatz = %d AND artikel = %d", + $db->quote($_SESSION['sys']['login']), + $_SESSION['ordersatz'], $_POST['id']); + else + $sql = sprintf("UPDATE metro_ordersatz_pos SET anzahl = %d, sys_user = %s, sys_edit = now() WHERE ordersatz = %d AND artikel = %d", + $_POST['value'], $db->quote($_SESSION['sys']['login']), + $_SESSION['ordersatz'], $_POST['id']); + + $sth = $db->query($sql); + error_log($sql); +} + + +function cb_pdf() +{ + $tmpdir = mk_tempdir(); + $result = ordersatz_write($_SESSION['ordersatz'], $tmpdir, false); + + if ($result !== true) + return array('error' => $result); + + return array('tmpdir' => substr($tmpdir,strlen($_SESSION['sys']['basedir']))); +} + +function process_download() +{ + if (strpos($_GET['tmpdir'], '..') !== false) + return false; + + $fname = $_SESSION['sys']['basedir'] . $_GET['tmpdir'] . '/ordersatz.pdf'; + + if (!file_exists($fname) || !is_file($fname)) + return 'File not found'; + + send_file($fname); + rm_tempdir($_SESSION['sys']['basedir'] . $_GET['tmpdir']); +} + +function cb_send() +{ + $tmpdir = mk_tempdir(); + $result = ordersatz_write($_SESSION['ordersatz'], $tmpdir, true); + + if ($result !== true) + return array('error' => $result); + + $fname = $tmpdir . '/ordersatz.pdf'; + + rm_tempdir($tmpdir); +} + +?> diff --git a/utils.php b/utils.php new file mode 100644 index 0000000..1829a8d --- /dev/null +++ b/utils.php @@ -0,0 +1,123 @@ + ordersatz.out 2>&1 && dvips ordersatz >> ordersatz.out 2>&1 && ps2pdf ordersatz.ps", $ret); + + if ($ret !== 0) + return "Probleme beim Compilieren des Ordersatzes"; + + if (!file_exists('ordersatz.ps')) + return "Postscript-Datei nicht erstellt"; + + if ($send) { + $cmd = sprintf("faxspool -f joey@finlandia.infodrom.org %s %s > /dev/null 2>&1", + FAXNUMBER, + ordersatz.ps); + error_log($cmd); + # system($cmd); + +# $fname = store_file($field, $info); + + + $message = sprintf("Hallo %s!\n\nDer angehänge Ordersatz wurde gerade an Metro Oldenburg verschickt.\n\n", + $satz[0]['koch']); + + mail_attach($satz[0]['email'], + 'Ordersatz ' . $satz[0]['name'], + $satz[0]['email'], + 'Infodrom ' . $satz[0]['koch'], + array($dir . '/ordersatz.pdf'), + $message); + } + + return true; +} + +?> \ No newline at end of file diff --git a/vpe.php b/vpe.php new file mode 100644 index 0000000..c4e54a7 --- /dev/null +++ b/vpe.php @@ -0,0 +1,36 @@ + 'metro_vpe', + 'title' => 'Verpackungseinheiten', + 'list' => array( + 'id' => array( + 'name' => 'ID', + 'visible' => false, + ), + 'short' => array( + 'name' => 'Kurz', + 'width' => 50, + ), + 'name' => array( + 'name' => 'Name', + 'width' => 150, + ), + ), + 'edit' => array( + 'short' => array( + 'name' => 'Kurzname', + 'type' => 'text', + 'size' => 5, + 'required' => true, + ), + 'name' => array( + 'name' => 'Name', + 'type' => 'text', + 'size' => 25, + 'required' => true, + ), + ), + ); + +?> -- 2.20.1