3 define('MODULE', 'metro');
4 define('TEMPLATE', 'ordersatz.tex');
5 define('FNAME_VARS', 'ordersatz_vars.tex');
6 define('FNAME_ITEMS', 'ordersatz_items.tex');
7 define('FAXNUMBER','2002-364');
8 define('ERROR_SAFT','joey@finlandia');
9 define('ERROR_MAIL','joey@finlandia.infodrom.org');
15 $query = sprintf('SELECT count(*) AS count FROM metro_ordersatz WHERE id = %d AND done IS NULL', $id);
16 $sth = $db->query($query);
18 return $row['count'] == 0;
23 $tmpdir = sprintf("%sarchive/%s/%s",
24 $_SESSION['sys']['basedir'],
32 function rm_tempdir($dir)
34 system(sprintf("rm -rf %s", $dir));
37 function latexspecialchars($string)
39 return preg_replace_callback("/([\^\%~\\\\#\$%&_\{\}])/",
49 "\\"=>"\\textbackslash",
53 return $map[$matches[0]];
58 function latex_encode($text)
60 return latexspecialchars(utf8_decode($text));
63 function ordersatz_archive($id, $title, $filename)
67 $parts = pathinfo($filename);
69 $base = $_SESSION['sys']['basedir'] . 'archive/' . MODULE;
72 return 'Basis-Verzeichnis nicht vorhanden';
77 if (!is_dir($base.$path))
78 if (mkdir($base.$path) === false)
79 return 'Kann Verzeichnis nicht anlegen: ' . $path;
81 $path .= '/' . date('m');
82 if (!is_dir($base.$path))
83 if (mkdir($base.$path) === false)
84 return 'Kann Verzeichnis nicht anlegen: ' . $path;
87 $parts['filename'] = utf8_encode($parts['filename']);
88 $path .= '/' . $parts['filename'];
91 for ($i=0; $i < $max; $i++) {
93 if ($i > 0) $fname .= '('.$i.')';
94 if (!empty($parts['extension']))
95 $fname .= '.' . $parts['extension'];
97 if (!is_file($base.$fname)) {
98 if (copy($filename, $base.$fname) === false)
99 return 'Kann Datei nicht speichern';
101 chmod($base.$fname, 0640);
106 $sql = sprintf("INSERT INTO metro_files (ordersatz,date,title,path,sys_user,sys_edit) " .
107 "VALUES (%d,now(),%s,%s,%s,now())",
111 $db->quote($_SESSION['sys']['login']));
112 $sth = $db->query($sql);
117 function ordersatz_finish($id)
121 $sql = sprintf("DELETE FROM metro_ordersatz_pos WHERE ordersatz = %d AND anzahl IS NULL",
123 $sth = $db->query($sql);
125 $sql = sprintf("UPDATE metro_ordersatz SET done = now(), sys_edit = now(), sys_user = %s WHERE id = %d",
126 $db->quote($_SESSION['sys']['login']),
128 $sth = $db->query($sql);
131 function ordersatz_write($id, $dir, $send)
135 $weekdays = array('Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag');
137 $fname = sprintf("%smasks/%s/%s",
138 $_SESSION['sys']['basedir'],
142 if (!file_exists($fname))
143 return "Vorlage nicht gefunden";
145 copy($fname, $dir . '/ordersatz.tex');
148 $sql = sprintf("SELECT name,koch,email,telefon,datum,uhrzeit,owner FROM metro_ordersatz WHERE id = %d",
150 $satz = query_db($sql);
152 $f = fopen(FNAME_VARS, 'w');
153 fwrite($f, sprintf('\newcommand{\koch}{%s}'."\n", latex_encode($satz[0]['koch'])));
154 fwrite($f, sprintf('\newcommand{\reise}{%s}'."\n", latex_encode($satz[0]['name'])));
155 fwrite($f, sprintf('\newcommand{\telefon}{%s}'."\n", latex_encode($satz[0]['telefon'])));
156 fwrite($f, sprintf('\newcommand{\uhrzeit}{%s}'."\n", latex_encode($satz[0]['uhrzeit'])));
158 $d = explode('-', $satz[0]['datum']);
159 $time = mktime(10,0,0,$d[1], $d[2], $d[0]);
160 fwrite($f, sprintf('\newcommand{\datum}{%s, %d.%d.%d}'."\n", $weekdays[date('w', $time)], $d[2], $d[1], $d[0]));
163 $sql = sprintf("SELECT artnr,gang,metro_vpe.short AS vpname,menge,bezeichnung,hinweis,hersteller,anzahl " .
164 "FROM metro_ordersatz_pos " .
165 "JOIN metro_artikel ON artikel = metro_artikel.id " .
166 "JOIN metro_abteilung ON abteilung = metro_abteilung.id " .
167 "JOIN metro_vpe ON vpe = metro_vpe.id " .
168 "WHERE ordersatz = %d AND anzahl IS NOT NULL " .
169 "ORDER BY sort,gang,menge,bezeichnung",
172 $result = query_db($sql);
174 if (count($result) == 0)
175 return "Keine Artikel zur Bestellung ausgewählt";
177 $f = fopen(FNAME_ITEMS, 'w');
180 while (++$i < count($result)) {
183 $bez = latex_encode($row['bezeichnung']);
184 if (strlen($row['menge']))
185 $bez = latex_encode($row['menge']) . ' ' . $bez;
186 if (strlen($row['hersteller']))
187 $bez .= ' (' . latex_encode($row['hersteller']) . ')';
188 if (strlen($row['hinweis']))
189 $bez .= sprintf("\\newline\\textbf{%s}", latex_encode($row['hinweis']));
191 fwrite($f, sprintf('\order%s{%d}{%s}{%s}{%s}{%s}'."\n",
192 ($i+1 < count($result) && $result[$i+1]['gang'] != $row['gang']) ? '[l]' : '',
194 ($row['artnr'] && $row['artnr'] != 4711) ? (int)$row['artnr'] : '',
196 latex_encode($row['vpname']),
197 latex_encode($row['gang'])));
202 system("latex ordersatz > ordersatz.out 2>&1 && dvips ordersatz >> ordersatz.out 2>&1 && pdflatex ordersatz >> ordersatz.out", $ret);
205 $fname = sprintf("ordersatz-%d-%d.tar.bz2", $id, time());
206 $cmd = sprintf("tar cfj %s ordersatz.tex ordersatz_vars.tex ordersatz_items.tex ordersatz.out && " .
207 "mpack -s 'Probleme beim Compilieren des Ordersatzes %d' -d ordersatz.out %s %s && " .
208 "sendfile -Q -c='Probleme beim Compilieren des Ordersatzes %d' %s %s",
210 $id, $fname, ERROR_MAIL,
211 $id, $fname, ERROR_SAFT);
213 return "Probleme beim Compilieren des Ordersatzes";
216 if (!file_exists('ordersatz.ps'))
217 return "Postscript-Datei nicht erstellt";
220 $ret = ordersatz_archive($id, 'Ordersatz '.$satz[0]['name'], $dir . '/ordersatz.pdf');
225 if (empty($satz[0]['email']))
226 $satz[0]['email'] = 'joey@infodrom.org';
228 $cmd = sprintf("faxspool -f %s %s %s > /dev/null 2>&1",
234 $message = utf8_decode(sprintf("Hallo %s!\n\nDer angehängte Ordersatz wurde gerade an Metro Oldenburg verschickt.\n" .
235 "Eine Bestätigung über den Versand kommt per Mail.\n\n",
238 mail_attach($satz[0]['email'],
239 mb_encode_mimeheader('Ordersatz ' . $satz[0]['name'],'latin1'),
241 mb_encode_mimeheader('Infodrom ' . $satz[0]['koch'],'latin1'),
242 array($dir . '/ordersatz.pdf'),
245 ordersatz_finish($id);