Klärungsbedarf vorhanden * (Bsp.: Wöchentlicher Dauerauftrag wird auf übernächste Woche verschoben, wenn * nächste Woche an dem normalen nächsten Termin ein Feiertag ist ...) * Es wird zur Zeit auch noch nicht geprüft, ob der nächste Termin nicht schon längst verstrichen ist! */ // Execution-Time for script set_time_limit(0); error_reporting(E_ALL ^ (E_DEPRECATED | E_NOTICE | E_STRICT)); $phpVersion = substr(phpversion(), 0, 3); // diese Art der Bearbeitung schafft leider nur ca. einen Auftrag pro SEKUNDE, // mit set_time_limit (300) können ca. 250 Aufträge bearbeitet werden //set_time_limit (300); include_once("../include/dbglobal.inc.php"); //$hq_id = $HTTP_GET_VARS["hq_id"]; //if ($hq_id == ""): //// writeLog_("../log/check_jb_permanent_standing_", "Fehler: 'hq_id' fehlt!"); //// exit(); // $hq_id = HQ_ID_DEFAULT; //endif; include_once("../include/inc_check_publicholiday.inc.php"); include_once("../include/caglobal.inc.php"); include_once("../include/global.inc.php"); include_once("../include/email/htmlMimeMail.php"); $ph = array(); // $hq_id = 3; // $ph = getPublicHolidays(getDateTime("year"), "1", "0"); //print_r($ph); // $ph_new = array(); // // Neuer Kalender ab heute bis zum Ende nächsten Jahres mit allen Werktagen // for ($i = 1; $tmp_timestamp < mktime(0, 0, 0, 12, 31, date("Y") + 1); $i++): // $tmp_timestamp = mktime(0, 0, 0, date("m"), date("d") + $i, date("Y")); // if (!isPublicHoliday(date("Y", $tmp_timestamp), date("m", $tmp_timestamp), date("d", $tmp_timestamp)) && date("w", $tmp_timestamp) != 6) // $ph_new[] = array(date("Y", $tmp_timestamp), date("m", $tmp_timestamp), date("d", $tmp_timestamp)); // endfor; // $ph = $ph_new; //print_r($ph); die(); $no_continuation_list = array("17519468"); // "get_saved_tour.php" holt die Daten eines gespeicherten Jobs $jb_id // voher muss aber die jobList initialisiert werden (macht sonst javascript) $jobList = array(); // Einzelmodus $jb_id = ""; if (isset($argv[1])) $jb_id = $argv[1]; $recipients = array("ca@assecutor.de"); if ($jb_id == "") { // Sicherstellen, dass auch wirklich nur ein Prozess läuft... if ($argc > 0): $cnt = 0; exec("ps -fA", $output); for ($i = 0; $i < count($output); $i++): $pos = strpos ($output[$i], $argv[0]); if (!($pos === false)) { $cnt++; $cur_pid = trim(substr($output[$i], 9, 5)); if ($cur_pid != getmypid()) $pid = $cur_pid; } endfor; if ($cnt > 1): $mysql_process_list = shell_exec('echo "SHOW PROCESSLIST;" | mysql -h172.16.0.123 -P3391 -u root -p%Fidewz37% | grep -v Sleep 2>&1') . "\n"; $system_process_list = shell_exec('ps aux | sort -nrk 3,3 2>&1') . "\n"; echo $mysql_process_list . "\n"; echo $system_process_list . "\n"; exec("kill $pid"); echo "[" . date("Y-m-d H:i:s") . "] " . "$PHP_SELF: [" . $argv[0] . "] lief schon als \$pid = " . $pid . ". Dieser Prozess wurde nun gekillt ...!\n" . $mysql_process_list . "\n" . $system_process_list . "\n"; $mailObj = new htmlMimeMail(); $mailObj->setFrom("support@assecutor.de"); // $mailObj->setBcc("ca@assecutor.de"); $mailObj->setSubject("Doppelter check_jb_permanent.php"); $mailObj->setText("$PHP_SELF: [" . $argv[0] . "] lief schon als \$pid = " . $pid . ". Dieser Prozess wurde nun gekillt ...!\n"); $mailResult = $mailObj->send($recipients, 'smtp'); exit(); endif; endif; // if (date("H") != "00"): $mailObj = new htmlMimeMail(); $mailObj->setFrom("auto-mailer@assecutor.de"); // $mailObj->setBcc("ca@assecutor.de"); $mailObj->setSubject("check_jb_permanent.php wurde neu gestartet"); $mailObj->setText("$PHP_SELF: [" . $argv[0] . "] wurde neu gestartet...\n"); $mailResult = $mailObj->send($recipients, 'smtp'); // endif; // $yesterday = getdate(mktime(0, 0, 0, date("m"), date("d") - 1, date("Y"))); $yesterday = getdate(mktime(0, 0, 0, date("m"), date("d") - 2, date("Y"))); $jb_finishtime_start = $yesterday['year'] . "-" . sprintf("%02d", $yesterday['mon']) . "-" . sprintf("%02d", $yesterday['mday']) . " 00:00:01"; // $jb_finishtime_start = "2008-02-20 00:00:01"; getDb2Connection(); // Try to connect request server because of performance $db_conn = getDbConnectionSpecial($dbhostStatistic, $dbname2, $dblogin2, $dbpassword2); $dirty_jobs_sql = ""; $sqlquery = "SELECT gdc_obj_id FROM genericdatacontainer WHERE gdc_obj_type = 'jb' AND gdc_gen_fieldname = 'jb_invtext_dirty' and gdc_content = '1'"; writeLog_("../log/check_jb_permanent_invtext_", "Querying for forgotten finished jobs to rebuild `jb_invtext` [$sqlquery]"); $res = $db->query($sqlquery); while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): if ($dirty_jobs_sql != "") $dirty_jobs_sql .= ","; $dirty_jobs_sql .= $row["gdc_obj_id"]; endwhile; $res->free(); // Endless loop while (TRUE): echo "[" . date("Y-m-d H:i:s") . "] updating keepalive (memory_get_usage() = " . memory_get_usage() . ")\n"; updateStmt("keepalive", "ka_process", "standing_orders", array("ka_lastexecutiontime", getDateTime("0")),""); $today = getdate(); $now = $today['year'] . "-" . sprintf("%02d", $today['mon']) . "-" . sprintf("%02d", $today['mday']) . " " . sprintf("%02d", $today['hours']) . ":" . sprintf("%02d", $today['minutes']) . ":" . sprintf("%02d", $today['seconds']); $jb_finishtime_today = $today['year'] . "-" . sprintf("%02d", $today['mon']) . "-" . sprintf("%02d", $today['mday']) . " 00:00:01"; //******************************************************************************** // Dinge, die zu einer bestimmten Uhrzeit passieren sollen // Diese sind in eine Schleife eingebaut, die für mindestens 5 Minuten Verzögerung sorgt for ($i = 0; $i < 5; $i++): //******************************************************************************** // Neue Funktion 27.06.2013: Binary Logs auf test_sb aufräumen //$mysql_db = mysql_connect("172.16.0.102:3391", $dblogin, $dbpassword) or die (mysql_error($mysql_db)); //$purge_query = "PURGE MASTER LOGS BEFORE '" . date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 14, date("Y"))) . " 00:00:00'"; //mysql_query($purge_query, $mysql_db) or die ('SET NAMES latin1' . ": " . mysql_error($mysql_db)); //mysql_close($mysql_db); $yesterday = getdate(mktime(0, 0, 0, date("m"), date("d") - 1, date("Y"))); // writeLog_("../log/check_jb_permanent_invtext_", "Deleting finished commands in messageforum [$sqlquery]"); //******************************************************************************** // Neue Funktion 13.08.2011: Lager-Mail an Knapp (Stuttgart, EINE PRO TAG) //// $autoExportDKT = "acapella7890"; //// include("../tools/auto_export_stkat_DKT.php"); // $last_execution = $db->getOne("SELECT ka_lastexecutiontime FROM keepalive WHERE ka_process = 'standing_orders'"); // list($jt_y, $jt_m, $jt_d, $jt_h, $jt_i, $jt_s) = getValsFromDate($jb_finishtime_today); // list($le_y, $le_m, $le_d, $le_h, $le_i, $le_s) = getValsFromDate($last_execution); // if (mktime($jt_h, $jt_i, $jt_s, $jt_m, $jt_d, $jt_y) // > mktime($le_h, $le_i, $le_s, $le_m, $le_d, $le_y)): // $system_result = ""; // $cmd = "php ../tools/auto_export_stkat_DKT.php acapella7890 >> ../log/auto_export_stkat_DKT.stdout+err 2>&1 &"; // $ausgabe = system($cmd, $system_result); // writeLog_("../log/check_jb_permanent_invtext_", "Calling auto_export_stkat_DKT.php: ausgabe='$ausgabe'"); // else: // writeLog_("../log/check_jb_permanent_invtext_", "auto_export_stkat_DKT.php not called: '$jb_finishtime_today' <= '$last_execution'"); // endif; // updateStmt("keepalive", "ka_process", "standing_orders", array("ka_lastexecutiontime", getDateTime("0")),""); // Neue Funktion 21.08.2023: TSZ für Kundenpreis und Frachtvergütung müssen in allen Aufträgen des heutigen Tages überprüft werden if (date("H:i") == "00:15"): $csc_id_payer_cashArr = array(); $sqlquery = "SELECT hq_id, par_value FROM parameter WHERE par_key = 'CSC_ID_PAYER_CASH' ORDER BY hq_id"; $res = $db2->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): $csc_id_payer_cashArr[] = $row['par_value']; endwhile; $res->free(); $sqlquery = "SELECT jb_id, csc_id_payer, csc_id_payer_cash, hq_id, jb_ordertime, vht_id, jb_markup FROM job WHERE jb_ordertime >= '" . date("Y-m-d 00:00:00") . "' AND jb_ordertime <= '" . date("Y-m-d H:i:s", mktime(0, 0, 0, date("m"), date("d") + 3, date("Y"))) . "' AND jb_status IN (1,8,9)"; writeLog_("../log/check_markup_", $sqlquery); $result = $db2->query($sqlquery); if (DB::isError($result)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); while ($row = ($phpVersion >= "8.0" ? $result->fetch_assoc() : $result->fetchRow())): writeLog_("../log/check_markup_", "*** " . $row['jb_id'] . ", \$row[\"csc_id_payer\"] = " . $row["csc_id_payer"] . ", \$row[\"csc_id_payer_cash\"] = " . $row["csc_id_payer_cash"] . ", \$row[\"hq_id\"] = " . $row["hq_id"] . ", \$row[\"jb_ordertime\"] = " . $row["jb_ordertime"] . ", \$row[\"vht_id\"] = " . $row["vht_id"] . ", \$row[\"jb_markup\"] = " . $row["jb_markup"]); $csc_id_payer = $row['csc_id_payer']; if (in_array($csc_id_payer, $csc_id_payer_cashArr)): if ($row["csc_id_payer_cash"] != 0) $csc_id_payer = $row['csc_id_payer_cash']; endif; $cs_id = getFieldValueFromId("costcenter", "csc_id", $csc_id_payer, "cs_id"); $srvt_name = $db->getOne("SELECT mt_value FROM metatype WHERE mt_sort = '" . $row['vht_id'] . "' AND mt_type = 'vehicletype'"); $jb_markup_man = $db->getOne("SELECT jbprc_price FROM jobprice WHERE jb_id = " . $row['jb_id'] . " AND mt_sort = 8"); if ($jb_markup_man == "") { $jb_markup = getFuelMarkup($srvt_name, $cs_id, $row['hq_id'], $row['jb_ordertime']); writeLog_("../log/check_markup_", $row['jb_id'] . ", \$row[\"jb_markup\"] = " . $row["jb_markup"] . ", \$jb_markup = " . $jb_markup); if ($jb_markup != $row["jb_markup"]) { writeLog_("../log/check_markup_", "UPDATE job SET jb_markup = " . $jb_markup . " WHERE jb_id = " . $row['jb_id']); $db->query("UPDATE job SET jb_markup = " . $jb_markup . " WHERE jb_id = " . $row['jb_id']); recalc_jb_price($row['jb_id'], $jb_markup); } } $jb_cr_markup_man = $db->getOne("SELECT jbprc_price FROM jobprice WHERE jb_id = " . $row['jb_id'] . " AND mt_sort = 9"); if ($jb_cr_markup_man == "") { $jb_cr_markup_cur = $db->getOne("SELECT jbprc_price FROM jobprice WHERE jb_id = " . $row['jb_id'] . " AND mt_sort = 1"); $jb_cr_markup = getFuelMarkupCr($srvt_name, $cs_id, $row['hq_id'], $row['jb_ordertime']); writeLog_("../log/check_markup_", $row['jb_id'] . ", \$jb_cr_markup_cur = " . $jb_cr_markup_cur . ", \$jb_cr_markup = " . $jb_cr_markup); if ($jb_cr_markup != $jb_cr_markup_cur) { writeLog_("../log/check_markup_", "DELETE FROM jobprice WHERE jb_id = " . $row['jb_id'] . " AND mt_sort = 1"); $db->query("DELETE FROM jobprice WHERE jb_id = " . $row['jb_id'] . " AND mt_sort = 1"); writeLog_("../log/check_markup_", "INSERT INTO jobprice (jb_id, mt_sort, jbprc_price) VALUES (" . $row['jb_id'] . ", 1, " . $jb_cr_markup . ")"); $db->query("INSERT INTO jobprice (jb_id, mt_sort, jbprc_price) VALUES (" . $row['jb_id'] . ", 1, " . $jb_cr_markup . ")"); recalc_jb_cr_price($row['jb_id']); } } endwhile; $result->free(); endif; if (date("H:i") == "01:00" || $dirty_jobs_sql != ""): //******************************************************************************** // Weitere Funktion: // Wenn zwischenzeitlich Kommissionsnummern eingetragen wurden, dann werden diese // vom PDAServer nicht im Rechnungstext eingetragen. Es muss also (einmal am Tag) // der Rechnungstext aller eledigten Aufträge neu erzeugt werden! // Das wird der Einfachheit halber gleich hier erledigt. echo "[" . date("Y-m-d H:i:s") . "] checking finished jobs (memory_get_usage() = " . memory_get_usage() . ")\n"; // Alle Aufträge seit dem letzten Mal finden, die erledigt sind (aber keine Unteraufträge) $where_clause = "((jb_storno != 3 AND jb_storno != 4) OR jb_storno IS NULL) " . " AND job.jb_status = 2 AND (jb_finishtime BETWEEN '$jb_finishtime_start' AND '$jb_finishtime_today')" . // " AND job.jb_status = 2 AND (jb_finishtime BETWEEN '2019-04-01 00:00:00' AND '$jb_finishtime_today')" . " AND jb_export_time IS NULL AND (job.jb_id_parent IS NULL OR job.jb_id_parent <= 0)"; if ($dirty_jobs_sql != "") $where_clause = "job.jb_id IN (" . $dirty_jobs_sql . ")"; $sqlquery = "SELECT DISTINCT job.jb_id, job.hq_id, job.jb_finishtime, job.jb_freetext_2, job.jb_cr_price FROM job, tour WHERE " . $where_clause . " AND job.jb_id = tour.jb_id AND tour.tr_commission_no != \"\"" . " ORDER BY job.jb_id"; // $sqlquery = "SELECT job.jb_id, job.hq_id, job.jb_finishtime, job.jb_freetext_2 FROM job WHERE ((jb_storno != 3 AND jb_storno != 4) OR jb_storno IS NULL) " . // " AND job.jb_status = 2 AND (jb_finishtime BETWEEN '$jb_finishtime_start' AND '$jb_finishtime_today') ORDER BY job.jb_id"; writeLog_("../log/check_jb_permanent_invtext_", "Querying for finished jobs to rebuild `jb_invtext` [$sqlquery]"); $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery' : " . $res->getMessage()); $rows = array(); while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): if ($row["jb_id"] != ""): $rows[] = $row; if ($dirty_jobs_sql == "") insertStmt("genericdatacontainer", array("gdc_obj_type", "jb", "gdc_obj_id", $row["jb_id"], "gdc_gen_fieldname", "jb_invtext_dirty", "gdc_content", "1", "gdc_context", date("Y-m-d H:i:s"))); endif; endwhile; $res->free(); foreach ($rows as $cur_row) { $hq_id = $cur_row["hq_id"]; writeLog_("../log/check_jb_permanent_invtext_", "Writing new invoice text in job " . $cur_row["jb_id"] . " (jb_cr_price: '" . $cur_row["jb_cr_price"] . "', jb_finishtime: '". $cur_row["jb_finishtime"] . "', \$jb_finishtime_start: '$jb_finishtime_start', \$jb_finishtime_today = '$jb_finishtime_today', memory_get_usage() = " . memory_get_usage() . ")"); $jb_cr_price_total = $cur_row["jb_cr_price"]; $jb_hiddenFreetext_1 = $db->getOne("SELECT gdc_content FROM genericdatacontainer WHERE gdc_obj_type = 'jb' AND gdc_obj_id = " . $cur_row["jb_id"] . " AND gdc_gen_fieldname = 'jb_hiddenFreetext_1'"); $jb_cr_serviceprice = $db->getOne("SELECT gdc_content FROM genericdatacontainer WHERE gdc_obj_type = 'jb' AND gdc_obj_id = " . $cur_row["jb_id"] . " AND gdc_gen_fieldname = 'jb_cr_serviceprice'"); // Sondervereinbarungen holen!!! $tmp_freetext_2Arr = explode("²", $cur_row["jb_freetext_2"]); // Unteraufträge holen! list ($tmp_add_jb_ids, $tmp_add_sids, $tmp_add_prices) = getJobChildren($cur_row["jb_id"], "job", "false"); $jb_toll = $db->getOne("SELECT gdc_content FROM genericdatacontainer WHERE gdc_obj_type = 'jb' AND gdc_obj_id = " . $cur_row["jb_id"] . " AND gdc_gen_fieldname = 'jb_toll'"); mk_jb_invtext($cur_row["jb_id"], true, $tmp_freetext_2Arr[0], $tmp_freetext_2Arr[1], $tmp_freetext_2Arr[2], $tmp_freetext_2Arr[3], $tmp_add_sids, $tmp_add_prices); // $dummy = $db->query("UPDATE job SET jb_freetext_2 = '' WHERE jb_id = " . $cur_row["jb_id"]); // deleteStmt("genericdatacontainer", "gdc_obj_type = 'jb' AND gdc_obj_id = " . $cur_row["jb_id"] . " AND gdc_gen_fieldname = 'jb_invtext_dirty'"); updateStmt("genericdatacontainer", "", "", array("gdc_content", "0", "gdc_context", date("Y-m-d H:i:s")), "gdc_obj_id = " . $cur_row["jb_id"] . " AND gdc_obj_type = 'jb' AND gdc_gen_fieldname = 'jb_invtext_dirty'"); // Set execution time for keepalive (in order to avoid being called anew while still running (making invoice text can take long time!) // updateStmt("keepalive", "ka_process", "standing_orders", array("ka_lastexecutiontime", getDateTime("0")),""); } $dirty_jobs_sql = ""; //******************************************************************************** // Neue Funktion 21.12.2010: Tabellen 'commandexec' und 'messageforum' aufräumen echo "[" . date("Y-m-d H:i:s") . "] cleaning up commandexechistory (memory_get_usage() = " . memory_get_usage() . ")\n"; // Vorher commandexechistory aufräumen (sollte eigentlich nicht nötig sein) $sqlquery = "DELETE phoenix_pda.commandexechistory.* FROM phoenix_pda.commandexec, phoenix_pda.commandexechistory WHERE phoenix_pda.commandexec.cmde_id = phoenix_pda.commandexechistory.cmde_id"; writeLog_("../log/check_jb_permanent_invtext_", "[$sqlquery]"); $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery' : " . $res->getMessage()); echo "[" . date("Y-m-d H:i:s") . "] moving finished commands to commandexechistory (memory_get_usage() = " . memory_get_usage() . ")\n"; // jetzt die eigentliche Prozedur $createtime_limit = date("Y-m-d H:i:s", mktime(date("H"), date("i"), date("s"), date("m") - 6, date("d"), date("Y"))); $where_clause = "WHERE cmde_mode = '0' OR cmde_exec_timelimit < '" . $jb_finishtime_today . "' OR cmde_exec_time < '" . $createtime_limit . "'"; $sqlquery = "INSERT INTO phoenix_pda.commandexechistory (cmde_id, cr_id, hq_id, cmd_command, cmde_exec_time, cmde_exec_timelimit, cmde_mode, cmde_param) " . "SELECT cmde_id, cr_id, hq_id, cmd_command, cmde_exec_time, cmde_exec_timelimit, cmde_mode, cmde_param FROM phoenix_pda.commandexec $where_clause"; writeLog_("../log/check_jb_permanent_invtext_", "Moving finished commands to commandexechistory [$sqlquery]"); $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery' : " . $res->getMessage()); $sqlquery = "DELETE FROM phoenix_pda.commandexec $where_clause"; writeLog_("../log/check_jb_permanent_invtext_", "Deleting finished commands in commandexec [$sqlquery]"); $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery' : " . $res->getMessage()); echo "[" . date("Y-m-d H:i:s") . "] moving finished commands to messageforumhistory (memory_get_usage() = " . memory_get_usage() . ")\n"; $createtime_limit = date("Y-m-d H:i:s", mktime(date("H"), date("i"), date("s"), date("m"), date("d") - 14, date("Y"))); $where_clause = "WHERE mf_state = 2 OR mf_createtime < '" . $createtime_limit . "' OR mf_expiration < NOW()"; $sqlquery = "INSERT INTO phoenix_log.messageforumhistory (mf_id, hq_id, mf_type, mf_createtime, mf_expiration, mf_delivery, mf_acknowledge, usr_id_sender, usr_id_receiver, mf_usr_type, mf_state, mf_prio, mf_subject, mf_body, mf_pre_id) " . "SELECT mf_id, hq_id, mf_type, mf_createtime, mf_expiration, mf_delivery, mf_acknowledge, usr_id_sender, usr_id_receiver, mf_usr_type, mf_state, mf_prio, mf_subject, mf_body, mf_pre_id FROM phoenix_log.messageforum $where_clause"; writeLog_("../log/check_jb_permanent_invtext_", "Moving finished commands to messageforumhistory [$sqlquery]"); $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery' : " . $res->getMessage()); $sqlquery = "DELETE FROM phoenix_log.messageforum $where_clause"; writeLog_("../log/check_jb_permanent_invtext_", "Deleting finished commands in messageforum [$sqlquery]"); $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery' : " . $res->getMessage()); echo "[" . date("Y-m-d H:i:s") . "] cleaning up locating and log (memory_get_usage() = " . memory_get_usage() . ")\n"; //******************************************************************************** // Neue Funktion 09.10.2015: Tabellen 'locating' und 'log' aufräumen $sqlquery = "DELETE FROM phoenix_log.locating WHERE loc_created < '" . date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 60, date("Y"))) . "'"; $res = $db->query($sqlquery); writeLog_("../log/check_jb_permanent_invtext_", "Deleting entries in locating older than 3 months [$sqlquery]"); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery' : " . $res->getMessage()); for ($hour = 0; $hour < 24; $hour++): $sqlquery = "DELETE FROM phoenix_log.log WHERE logo_id IN (33, 113, 101, 103, 29, 30, 31, 160, 156) AND log_createtime < '" . date("Y-m-d H:i:s", mktime($hour, 59, 59, date("m"), date("d") - 61, date("Y"))) . "'" . " AND log_createtime > '" . date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 63, date("Y"))) . "'"; $res = $db->query($sqlquery); writeLog_("../log/check_jb_permanent_invtext_", "Deleting entries in log (logo_ids 33, 113, 101, 103, 29, 30, 31) older than 3 months [$sqlquery]"); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery' : " . $res->getMessage()); endfor; //echo "[" . date("Y-m-d H:i:s") . "] calling ../tools/deleteDuplicateCr_sids.php (memory_get_usage() = " . memory_get_usage() . ")\n"; // //******************************************************************************** // // Neue Funktion 12.04.2016: Dubletten-Aufräumung // writeLog_("../log/check_jb_permanent_invtext_", "calling ../tools/deleteDuplicateCr_sids.php"); // $system_result = ""; // $cmd = "php ../tools/deleteDuplicateCr_sids.php >> ../log/check_jb_permanent_invtext_" . date("Ym") . ".log 2>&1"; // $ausgabe = system($cmd, $system_result); //******************************************************************************** // Neue Funktion 30.06.2021: Spezial-Behandlung für STB979666 "Dachdecker Einkauf" //SELECT job.jb_id AS Auftragsr, job.csc_id, jb_ordertime AS Auftragszeit, job.csc_id_payer, costcenter.csc_name AS Kostenstelle_Zahler, // tour.csc_id, csc1.csc_name AS Kostenstelle_Abholer, usr_account AS Erfasser //FROM job, costcenter, customer, tour, costcenter AS csc1, customer AS cs1, user //WHERE jb_storno IS NULL AND jb_ordertime > "2021-06-01 00:00:00" AND job.csc_id_payer = costcenter.csc_id AND costcenter.cs_id = customer.cs_id AND customer.cs_eid = "STB979666" // AND job.jb_id = tour.jb_id AND tour.csc_id = csc1.csc_id AND cs1.cs_id = csc1.cs_id AND cs1.cs_eid = "STB979666" AND tour.tr_sort = 1 AND emp_id = user.usr_id AND usr_type = 2 // AND job.csc_id_payer != tour.csc_id $sqlquery = "SELECT DISTINCT job.jb_id, tour.csc_id FROM job, costcenter, customer, tour, costcenter AS csc1, customer AS cs1, user, tourservice WHERE jb_storno IS NULL AND jb_ordertime > '2021-07-01 00:00:00' AND job.csc_id_payer = costcenter.csc_id AND costcenter.cs_id = customer.cs_id AND customer.cs_eid = 'STB979666' AND job.jb_id = tour.jb_id AND tour.csc_id = csc1.csc_id AND cs1.cs_id = csc1.cs_id AND cs1.cs_eid = 'STB979666' AND tour.tr_sort = 1 AND emp_id = user.usr_id AND usr_type = 2 AND (job.csc_id_payer = 865206 OR tourservice.csc_id = 865206) AND tourservice.jb_id = job.jb_id"; writeLog_("../log/check_jb_permanent_invtext_", $sqlquery); $result = $db2->query($sqlquery); if (DB::isError($result)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); while ($row = ($phpVersion >= "8.0" ? $result->fetch_assoc() : $result->fetchRow())): $sqlquery = "UPDATE job SET csc_id_payer = " . $row["csc_id"] . " WHERE jb_id = " . $row["jb_id"] . " AND csc_id_payer = 865206"; writeLog_("../log/check_jb_permanent_invtext_", "[$sqlquery]"); $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery' : " . $res->getMessage()); $sqlquery = "UPDATE tourservice SET csc_id = " . $row["csc_id"] . " WHERE jb_id = " . $row["jb_id"] . " AND csc_id = 865206"; writeLog_("../log/check_jb_permanent_invtext_", "[$sqlquery]"); $res = $db->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery' : " . $res->getMessage()); endwhile; $result->free(); //******************************************************************************** // Neue Funktion 29.11.2023: Filter aus Aufträgen löschen, wenn sie zuvor aus der Filterliste gelöscht worden sind $sql_query = "SELECT par_value FROM parameter WHERE par_key = 'FILTER_TO_BE_DELETED'"; writeLog_("../log/check_jb_permanent_invtext_", $sql_query); $filter_to_be_deleted = $db->getOne($sql_query); if (trim($filter_to_be_deleted) != "") { $filters = array_filter(explode(",", $filter_to_be_deleted)); if (count($filters) > 0) { $sqlQueries = array( "SELECT jb_id, jb_cr_filter FROM job WHERE LENGTH(jb_tourname) > 0 AND ", "SELECT jb_id, jb_cr_filter FROM job WHERE (jb_ordertime >= NOW()) AND ((jb_storno != 3 AND jb_storno != 4) OR jb_storno IS NULL) AND jb_status != 2 AND (jb_permanent IN (4, 5, 6, 7, 8, 9, 10, 11) OR (jb_permanent IN (1, 2, 3)" . " AND jb_permanent2 != '0000000')) AND (jb_id_copy_permanent IS NULL OR jb_id_copy_permanent = 0) AND (jp_permenddat >= NOW() OR jp_permenddat IS NULL OR jp_permenddat = '0000-00-00 00:00:00') AND " ); foreach ($filters as $filter) { if (trim($filter) != "") { $fLen = strlen($filter) + 1; $filter_clauses = array( array( "jb_cr_filter = '" . $filter . "'", "UPDATE job SET jb_cr_filter = '', jb_modify = jb_modify WHERE jb_id = "), array( "jb_cr_filter LIKE '%," . $filter . ",%'", "UPDATE job SET jb_cr_filter = REPLACE(jb_cr_filter, '," . $filter . ",', ','), jb_modify = jb_modify WHERE jb_id = "), array( "LEFT(jb_cr_filter, " . $fLen . ") = '" . $filter . ",'", "UPDATE job SET jb_cr_filter = REPLACE(jb_cr_filter, '" . $filter . ",', ''), jb_modify = jb_modify WHERE jb_id = "), array( "RIGHT(jb_cr_filter, " . $fLen . ") = '," . $filter . "'", "UPDATE job SET jb_cr_filter = REPLACE(jb_cr_filter, '," . $filter . "', ''), jb_modify = jb_modify WHERE jb_id = ") ); foreach ($sqlQueries as $sqlQuery) { foreach ($filter_clauses as $filter_clause) { $sql_query = $sqlQuery . $filter_clause[0]; writeLog_("../log/check_jb_permanent_invtext_", $sql_query); $res = $db2->query($sql_query); if (DB::isError($res)) die ("$PHP_SELF: '$sqlQuery'" . $res->getMessage()); while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): $sql_query = $filter_clause[1] . $row["jb_id"] . " AND jb_cr_filter = '" . $row["jb_cr_filter"] . "'"; writeLog_("../log/check_jb_permanent_invtext_", $sql_query); $db->query($sql_query); endwhile; $res->free(); } } } } $sql_query = "UPDATE parameter SET par_value = '' WHERE par_key = 'FILTER_TO_BE_DELETED'"; writeLog_("../log/check_jb_permanent_invtext_", $sql_query); $db->query($sql_query); } } $jb_finishtime_start = $jb_finishtime_today; //******************************************************************************** // Neue Funktion 03.01.2015: // Anfang des Jahres job2 umbennen und neu erzeugen; erst um 01:30 Uhr, um sicherzugehen, dass dieses Skript auch wirklich läuft elseif (date("d") == "02" && date("m") == "01" && date("H:i") == "01:30"): $sqlquery1 = "DROP TABLE IF EXISTS job2_" . (date("Y") - 1); // $result = $db2->query($sqlquery1); // if (DB::isError($result)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); $sqlquery2 = "ALTER TABLE job2 RENAME job2_" . (date("Y") - 1); // $result = $db2->query($sqlquery2); // if (DB::isError($result)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); $sqlquery3 = "CREATE TABLE job2 (\n" . " jb_id int(10) NOT NULL default '0',\n" . " jb2_history_rawdata blob NOT NULL,\n" . " jb2_history_hq blob NOT NULL,\n" . " jb2_history_cs blob NOT NULL,\n" . " jb2_history_mail blob NOT NULL,\n" . " UNIQUE KEY jb_id (jb_id)\n" . ") ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci\n"; // $result = $db2->query($sqlquery3); // if (DB::isError($result)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); $mailObj = new htmlMimeMail(); $mailObj->setFrom("support@assecutor.de"); $mailObj->setSubject("Tabelle job2 wurde neu angelegt"); $mailObj->setText("Und die alte Tabelle job2 wurde umbenannt in job2_" . (date("Y") - 1) . ".\n\n SQL-Statements:\n\n$sqlquery1\n\n$sqlquery2\n\n$sqlquery3\n\nAnpassung der Replikation nicht vergessen!"); // $mailResult = $mailObj->send(array("admin@assecutor.de"), 'smtp'); $mailResult = $mailObj->send(array("ca@assecutor.de"), 'smtp'); writeLog_("../log/check_jb_permanent_invtext_", "Tabelle job2 wurde neu angelegt"); //******************************************************************************** // Neue Funktion 22.06.2018: // Jeden Montag eine Hennig-Statistik-Mail // elseif (date("w") == 1 && date("H:i") == "04:59"): // $date_from = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 7, date("Y"))) . " 00:00:00"; // $date_mail_from = substr($date_from, 8, 2) . "." . substr($date_from, 5, 2) . "." . substr($date_from, 0, 4); // $date_to = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 1, date("Y"))) . " 23:59:59"; // $date_mail_to = substr($date_to, 8, 2) . "." . substr($date_to, 5, 2) . "." . substr($date_to, 0, 4); // $sqlquery = // "SELECT job.cr_sid AS Fahrzeugnr, tour.jb_id AS Auftragsnr, tourarticle.tr_sort AS Stationsnr, CONCAT('=\"', tourarticle.trat_serialno, '\"') AS Scancode, // IFNULL(LEFT(tourarticleprocess.tratp_createtime, 10), '') AS Datum // FROM customer, costcenter, job, tour, tourarticle // LEFT JOIN tourarticleprocess ON tourarticle.trat_id = tourarticleprocess.trat_id // WHERE customer.cs_eid = 'STE900684' AND customer.cs_id = costcenter.cs_id AND costcenter.csc_id = job.csc_id_payer AND job.jb_id = tour.jb_id AND tour.tr_id = tourarticle.tr_id // AND trat_serialno != '' AND jb_status = 2 AND jb_storno IS NULL AND jb_ordertime >= '" . $date_from . "' AND jb_ordertime <= '" . $date_to . "'"; // writeLog_("../log/check_jb_permanent_invtext_", $sqlquery); // $result = $db2->query($sqlquery); // if (DB::isError($result)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); // $csv_txt = "Fahrzeugnr;Auftragsnr;Stationsnr;Scancode;Datum\n"; // while ($row = ($phpVersion >= "8.0" ? $result->fetch_assoc() : $result->fetchRow())): // $csv_txt .= $row["Fahrzeugnr"] . ";" . $row ["Auftragsnr"] . ";" . $row ["Stationsnr"] . ";" . $row ["Scancode"] . ";" . $row ["Datum"] . "\n"; // endwhile; // $result->free(); // // $tmp_filename = "STE900684_" . substr($date_to, 0, 10) . ".csv"; // $tmp_fullfilename = "../temp/" . $tmp_filename; // file_put_contents($tmp_fullfilename, $csv_txt); // $mailObj = new htmlMimeMail(); // $mailObj->setFrom("auto-mailer@assecutor.de"); // $mailObj->setBcc("support@assecutor.de"); // $mailObj->setSubject("Scancodes für STE900684 von " . $date_mail_from . " bis " . $date_mail_to); // $mailObj->setText("Im Anhang die Liste der Scancodes aller erledigten Aufträge von STE900684 in der letzten Woche.\n\n"); // $mailObj->addAttachment($mailObj->getFile($tmp_fullfilename), $tmp_filename); //// $mailResult = $mailObj->send(array("ca@assecutor.de"), 'smtp'); // $mailResult = $mailObj->send(array("essen@stadtbote.de"), 'smtp'); // unlink($tmp_fullfilename); // writeLog_("../log/check_jb_permanent_invtext_", "Hennig-Mail versandt: \$mailResult='$mailResult'"); //******************************************************************************** // Neue Funktion 06.08.2018: // Jeden Ersten im Monat eine STH913068-Statistik-Mail elseif (date("d") == 1 && date("H:i") == "05:15"): // elseif (date("d") == 9 && date("H:i") == "20:08"): (nur zum Testen) $date_from = date("Y-m-d", mktime(0, 0, 0, date("m") - 1, 1, date("Y"))) . " 00:00:00"; $date_mail_from = substr($date_from, 8, 2) . "." . substr($date_from, 5, 2) . "." . substr($date_from, 0, 4); $date_to = date("Y-m-d", mktime(0, 0, 0, date("m"), 0, date("Y"))) . " 23:59:59"; $date_mail_to = substr($date_to, 8, 2) . "." . substr($date_to, 5, 2) . "." . substr($date_to, 0, 4); // $sqlquery = // "SELECT jb_ordertime AS Auftragsdatum, tour.jb_id AS Auftragsnr, CONCAT(REPLACE(ROUND(jb_totalprice, 2), '.', ','), ' €') AS Preis, // csc_name AS Kostenstellen_Nr, ad_street AS Straße, tr_hsno AS Hausnr, ad_zipcode AS PLZ, cr_sid AS Kurier, tr_commission_no AS Kommissionsnr, // CASE jb_serviceprice WHEN 0 THEN '' ELSE CONCAT(REPLACE(ROUND(jb_serviceprice, 2), '.', ','), ' €') END AS Servicezeit // FROM customer, costcenter, job, tour, address // WHERE customer.cs_eid = 'STH913068' AND customer.cs_id = costcenter.cs_id AND costcenter.csc_id = job.csc_id_payer AND tour.ad_id = address.ad_id // AND job.jb_id = tour.jb_id AND jb_status = 2 AND jb_storno IS NULL AND jb_ordertime >= '" . $date_from . "' AND jb_ordertime <= '" . $date_to . "' AND tr_sort = 1"; // writeLog_("../log/check_jb_permanent_invtext_", $sqlquery); // $result = $db2->query($sqlquery); // if (DB::isError($result)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); // $csv_txt = "Auftragsdatum;Auftragsnr;Preis;Kostenstellen_Nr;Straße;Hausnr;PLZ;Kurier;Kommissionsnr;Servicezeit\n"; // while ($row = ($phpVersion >= "8.0" ? $result->fetch_assoc() : $result->fetchRow())): // $csv_txt .= $row["Auftragsdatum"] . ";" . $row ["Auftragsnr"] . ";" . $row ["Preis"] . ";" . $row ["Kostenstellen_Nr"] // . ";" . $row ["Straße"] . ";" . $row ["Hausnr"] . ";" . $row ["PLZ"] . ";" . $row ["Kurier"] . ";" . $row ["Kommissionsnr"] . ";" . $row ["Servicezeit"] . "\n"; // endwhile; // $result->free(); // // $tmp_filename = "STH913068_" . substr($date_to, 0, 10) . ".csv"; // $tmp_fullfilename = "../temp/" . $tmp_filename; // file_put_contents($tmp_fullfilename, $csv_txt); // $mailObj = new htmlMimeMail(); // $mailObj->setFrom("auto-mailer@assecutor.de"); // $mailObj->setBcc("support@assecutor.de"); // $mailObj->setSubject("Monatsmail für STH913068 von " . $date_mail_from . " bis " . $date_mail_to); // $mailObj->setText("Im Anhang die Liste aller erledigten Aufträge von STH913068 im letzten Monat.\n\n"); // $mailObj->addAttachment($mailObj->getFile($tmp_fullfilename), $tmp_filename); //// $mailResult = $mailObj->send(array("ca@assecutor.de"), 'smtp'); // $mailResult = $mailObj->send(array("hannover@stadtbote.de"), 'smtp'); // unlink($tmp_fullfilename); // writeLog_("../log/check_jb_permanent_invtext_", "FedEx-Mail versandt: \$mailResult='$mailResult'"); // //******************************************************************************** // // Neue Funktion 12.04.2019: (nicht mehr ab 01.12.2022) // // Jeden Ersten im Monat eine STB979550-Statistik-Mail // $sqlquery = // "SELECT cs.cs_eid, ad.ad_zipcode, ad.ad_city, (CASE tr_commission_no WHEN '' THEN '(fehlt)' ELSE tr_commission_no END) AS tr_commission_no // FROM job AS jb, costcenter AS csc, customer AS cs, company AS cmp, tour AS tr, address AS ad // WHERE jb.jb_status = '2' AND (isnull( jb.jb_storno ) OR jb.jb_storno = '0' OR jb.jb_storno = '1' OR jb.jb_storno = '3') // AND jb.jb_ordertime >= '" . $date_from . "' AND jb.jb_ordertime <= '" . $date_to . "' // AND jb.csc_id_payer = csc.csc_id AND csc.cs_id = cs.cs_id AND cs.cmp_id = cmp.cmp_id AND cs.cs_eid = 'STB979550' // AND tr.jb_id = jb.jb_id AND tr.ad_id = ad.ad_id AND tr_sort > 1 // ORDER BY cs.cs_eid, ad.ad_zipcode, ad.ad_city"; // writeLog_("../log/check_jb_permanent_invtext_", $sqlquery); // // $prev_cs_eid = ""; // $prev_ad_zipcode = ""; // $prev_ad_city = ""; // $prev_cnt = 0; // $prev_tr_commission_nos = ""; // $result = $db2->query($sqlquery); // if (DB::isError($result)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); // $csv_txt = "Zahler;PLZ;Ort;Anzahl_Stopps;Kommissionsnummern\n"; // while ($row = ($phpVersion >= "8.0" ? $result->fetch_assoc() : $result->fetchRow())): // if ($prev_ad_zipcode != $row["ad_zipcode"] || $prev_ad_city != $row["ad_city"]) { // if ($prev_cs_eid != "") // $csv_txt .= $prev_cs_eid . ";" . $prev_ad_zipcode . ";" . $prev_ad_city . ";" . $prev_cnt . ";" . $prev_tr_commission_nos . "\n"; // $prev_cs_eid = $row["cs_eid"]; // $prev_ad_zipcode = $row["ad_zipcode"]; // $prev_ad_city = $row["ad_city"]; // $prev_cnt = 1; // $prev_tr_commission_nos = chr(160) . $row["tr_commission_no"]; // } else { // $prev_tr_commission_nos .= " | " . $row["tr_commission_no"]; // $prev_cnt++; // } // } // $csv_txt .= $prev_cs_eid . ";" . $prev_ad_zipcode . ";" . $prev_ad_city . ";" . $prev_cnt . ";" . $prev_tr_commission_nos . "\n"; // $result->free(); // // $tmp_filename = "STB979550_" . substr($date_to, 0, 10) . ".csv"; // $tmp_fullfilename = "../temp/" . $tmp_filename; // file_put_contents($tmp_fullfilename, $csv_txt); // $mailObj = new htmlMimeMail(); // $mailObj->setFrom("auto-mailer@assecutor.de"); // $mailObj->setBcc("support@assecutor.de"); // $mailObj->setSubject("Monatsmail für STB979550 von " . $date_mail_from . " bis " . $date_mail_to); // $mailObj->setText("Im Anhang die Auswertungstabelle für alle erledigten Aufträge von STB979550 im letzten Monat.\n\n"); // $mailObj->addAttachment($mailObj->getFile($tmp_fullfilename), $tmp_filename); //// $mailResult = $mailObj->send(array("ca@assecutor.de"), 'smtp'); // $mailResult = $mailObj->send(array("verkauf-berlin@stadtbote.de"), 'smtp'); // unlink($tmp_fullfilename); // writeLog_("../log/check_jb_permanent_invtext_", "BMW-Mail versandt: \$mailResult='$mailResult'"); // //******************************************************************************** // // Neue Funktion 24.01.2022: // // Jeden Ersten im Monat eine Statistik-Mail über erstmalige Kundenlogins // $date_from = date("Y-m-d", mktime(0, 0, 0, date("m") - 1, 1, date("Y"))) . " 00:00:00"; // $date_mail_from = substr($date_from, 8, 2) . "." . substr($date_from, 5, 2) . "." . substr($date_from, 0, 4); // $date_from_before = date("Y-m-d", mktime(0, 0, 0, date("m") - 1, 1, date("Y") - 1)) . " 00:00:00"; // // $sqlquery = " // SELECT DISTINCT phoenix_log.log.usr_id FROM phoenix_log.log // WHERE log_createtime > '" . $date_from_before . "' AND log_createtime < '" . $date_from . "' AND logo_id IN (1, 25)"; // // writeLog_("../log/check_jb_permanent_invtext_", $sqlquery); // trace_execution_time_start(); // $res = $db_conn->query($sqlquery); // writeLog_("../log/check_jb_permanent_invtext_", trace_execution_time_stop() . " (query time)"); // if (DB::isError($res)) // reportDie ("$PHP_SELF: '$sqlquery' : " . $res->getMessage()); // $excluded_userids = ""; // while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): // $excluded_userids .= $row["usr_id"] . ","; // endwhile; // $res->free(); // // $sqlquery = " // SELECT *, COUNT(*) AS cnt FROM // ( // SELECT phoenix_log.log.usr_id, usr_account, usr_firstname, usr_name, usr_modify, cs_eid, cmp_comp, cmp_comp2, jb_id, log_createtime // FROM phoenix_log.log, phoenix.user, phoenix.employee, phoenix.costcenter, phoenix.customer, phoenix.company // WHERE logo_id IN (1, 25) AND usr_type = 2 AND customer.hq_id = 3 AND phoenix_log.log.usr_id = phoenix.user.usr_id AND log_createtime > '" . $date_from . "' // AND phoenix.employee.usr_id = phoenix.user.usr_id AND phoenix.employee.csc_id = phoenix.costcenter.csc_id AND phoenix.costcenter.cs_id = phoenix.customer.cs_id AND phoenix.customer.cmp_id = phoenix.company.cmp_id // AND NOT (phoenix.user.usr_id IN // (" . //// SELECT DISTINCT phoenix_log.log.usr_id FROM phoenix_log.log //// WHERE log_createtime > '" . $date_from_before . "' AND log_createtime < '" . $date_from . "' AND logo_id IN (1, 25) // substr($excluded_userids, 0, strlen($excluded_userids) - 1) // . ")) // ORDER BY usr_id, log_createtime DESC // ) AS honk // GROUP BY usr_id // ORDER BY usr_id"; // // writeLog_("../log/check_jb_permanent_invtext_", $sqlquery); // trace_execution_time_start(); // $res = $db_conn->query($sqlquery); // writeLog_("../log/check_jb_permanent_invtext_", trace_execution_time_stop() . " (query time)"); // // if (DB::isError($res)) // reportDie ("$PHP_SELF: '$sqlquery' : " . $res->getMessage()); // $csv_txt = "Nutzer-ID;Login;Vorname;Name;Letzte Änderung;Kundennummer;Firma;Firma2;Letzte Auftragsnummer;Letztes Erfassungsdatum;Anzahl Aufträge\n"; // while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): // $csv_txt .= $row["usr_id"] . ";" . $row["usr_account"] . ";" . $row["usr_firstname"] . ";" . $row["usr_name"] . ";" . $row["usr_modify"] . ";" . $row["cs_eid"] . ";" . $row["cmp_comp"] . ";" . $row["cmp_comp2"] . ";" . $row["jb_id"] . ";" . $row["log_createtime"] . ";" . $row["cnt"] . "\n"; // endwhile; // $res->free(); // $tmp_filename = "Neue_Nutzer_" . substr($date_from, 0, 10) . ".csv"; // $tmp_fullfilename = "../temp/" . $tmp_filename; // file_put_contents($tmp_fullfilename, $csv_txt); // $mailObj = new htmlMimeMail(); // $mailObj->setFrom("auto-mailer@assecutor.de"); // $mailObj->setBcc("support@assecutor.de"); // $mailObj->setSubject("Neue Nutzer seit dem " . $date_mail_from); // $mailObj->setText("Im Anhang die Auswertungstabelle für neue Nutzer im letzten Monat.\n\n"); // $mailObj->addAttachment($mailObj->getFile($tmp_fullfilename), $tmp_filename); //// $mailResult = $mailObj->send(array("ca@assecutor.de"), 'smtp'); // $mailResult = $mailObj->send(array("Jana.Langlotz@stadtbote.de"), 'smtp'); // unlink($tmp_fullfilename); // writeLog_("../log/check_jb_permanent_invtext_", "Mail über neue Nutzer versandt: \$mailResult='$mailResult'"); //******************************************************************************** // Neue Funktion 13.09.2022: // Täglich eine Kontroll-Mail über geänderte Konserven/Daueraufträge elseif (date("H:i") == "03:00"): $sql_date = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 1, date("Y"))); // $ctl_lists['1']['short'] = "HB"; // $ctl_lists['1']['send'] = array("Rajko.Hill@stadtbote.de"); //// $ctl_lists['1']['send'] = array("ca@assecutor.de"); // $ctl_lists['1']['cc'] = "Nadine.Nehm@stadtbote.de"; //// $ctl_lists['1']['cc'] = "annacker@gmx.net"; // $ctl_lists['1']['categories'] = array('named_tours'); $ctl_lists['2']['short'] = "HH"; $ctl_lists['2']['send'] = array("hamburg@stadtbote.de"); // $ctl_lists['2']['send'] = array("ca@assecutor.de"); $ctl_lists['2']['cc'] = array(); $ctl_lists['2']['categories'] = array('named_tours', 'permanent'); $ctl_lists['3']['short'] = "B"; $ctl_lists['3']['send'] = array("verkauf-berlin@stadtbote.de"); // $ctl_lists['3']['send'] = array("ca@assecutor.de"); $ctl_lists['3']['cc'] = array(); $ctl_lists['3']['categories'] = array('named_tours'); $ctl_lists['4']['short'] = "H"; $ctl_lists['4']['send'] = array("alexandra.cordes@stadtbote.de"); // $ctl_lists['4']['send'] = array("ca@assecutor.de"); $ctl_lists['4']['cc'] = array(); // $ctl_lists['4']['cc'] = "alexandra.hoefers@stadtbote.de"; $ctl_lists['4']['categories'] = array('named_tours'); // $ctl_lists['6']['short'] = "DD"; // $ctl_lists['6']['send'] = array("steffen.schicht@stadtbote.de"); //// $ctl_lists['6']['send'] = array("ca@assecutor.de"); // $ctl_lists['6']['cc'] = array(); // $ctl_lists['6']['categories'] = array('named_tours'); // $ctl_lists['9']['short'] = "M"; // $ctl_lists['9']['send'] = array("marco.scherer@stadtbote.de"); //// $ctl_lists['9']['send'] = array("ca@assecutor.de"); // $ctl_lists['9']['cc'] = "anja.dormann@stadtbote.de"; // $ctl_lists['9']['categories'] = array('named_tours'); $categories['named_tours']['clause'] = "NOT (jb_tourname IS NULL) AND jb_tourname != ''"; $categories['named_tours']['name'] = "Konserven"; $categories['permanent']['clause'] = "(jb_permanent IN (4, 5, 6, 7, 8, 9, 10, 11) OR (jb_permanent IN (1, 2, 3) AND jb_permanent2 != '0000000'))"; $categories['permanent']['name'] = "Dauertouren"; foreach ($ctl_lists as $ctl_hq_id => $ctl_details) { foreach($ctl_details['categories'] as $category) { $sqlquery = "SELECT cs_eid AS Zahler, CONCAT(CHAR(160), cmp_comp) AS Name, CONCAT(CHAR(160), cmp_comp2) AS Name2, CONCAT(CHAR(160), csc_name) AS Kostenstelle, job.jb_id AS Auftragsnr," . " CONCAT(CHAR(160), jb_tourname) AS Tourenname, log_createtime, CONCAT(CHAR(160), usr_firstname, ' ', usr_name) AS Nutzer, logo_description" . " FROM costcenter, job, customer, company, phoenix_log.log, user" . " WHERE job.csc_id_payer = costcenter.csc_id AND costcenter.cs_id = customer.cs_id AND customer.cmp_id = company.cmp_id AND " . $categories[$category]['clause'] . " AND job.hq_id = " . $ctl_hq_id . " AND LEFT(jb_modify, 10) = '" . $sql_date . "' AND phoenix_log.log.jb_id = job.jb_id AND logo_id = 2 AND LEFT(log_createtime, 10) = '" . $sql_date . "'" . " AND phoenix_log.log.usr_id = user.usr_id" . " ORDER BY cs_eid, csc_name, jb_tourname, job.jb_id, log_createtime"; writeLog_("../log/check_jb_permanent_invtext_", $sqlquery); $result = $db2->query($sqlquery); if (DB::isError($result)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); $csv_txt = "Zahler;Name;Name2;Kostenstelle;Auftragsnr;Tourenname;Änderungsdatum;Nutzer;Änderungstext\n"; while ($row = ($phpVersion >= "8.0" ? $result->fetch_assoc() : $result->fetchRow())) { $csv_txt .= '"' . $row["Zahler"] . '";"' . $row["Name"] . '";"' . $row["Name2"] . '";"' . $row["Kostenstelle"] . '";"' . $row["Auftragsnr"] . '";"' . $row["Tourenname"] . '";"' . $row["log_createtime"] . '";"' . $row["Nutzer"] . '";"' . $row["logo_description"] . '"' . "\n"; } $result->free(); $tmp_filename = $categories[$category]['name'] . "-Updates_" . $ctl_details['short'] . "_" . $sql_date . ".csv"; $tmp_fullfilename = "../temp/" . $tmp_filename; file_put_contents($tmp_fullfilename, $csv_txt); $mailObj = new htmlMimeMail(); $mailObj->setFrom("auto-mailer@assecutor.de"); if (count($ctl_details['cc']) > 0) $mailObj->setCc($ctl_details['cc']); $mailObj->setBcc("support@assecutor.de"); $mailObj->setSubject("Geänderte " . $categories[$category]['name'] . " vom " . date("d.m.Y", mktime(0, 0, 0, date("m"), date("d") - 1, date("Y")))); $mailObj->setText("Im Anhang eine Liste der geänderten " . $categories[$category]['name'] . " vom gestrigen Tage.\n\n"); $mailObj->addAttachment($mailObj->getFile($tmp_fullfilename), $tmp_filename); // $mailResult = $mailObj->send(array("ca@assecutor.de"), 'smtp'); $mailResult = $mailObj->send($ctl_details['send'], 'smtp'); unlink($tmp_fullfilename); writeLog_("../log/check_jb_permanent_invtext_", $categories[$category]['name'] . "-Mail versandt: \$mailResult='$mailResult'"); } } //******************************************************************************** // Neue Funktion 04.11.2011: Überwachungs-Mail (Gütertaxi, EINE PRO TAG) elseif (date("H:i") == "04:00"): // $last_execution = $db->getOne("SELECT ka_lastexecutiontime FROM keepalive WHERE ka_process = 'standing_orders'"); // list($jt_y, $jt_m, $jt_d, $jt_h, $jt_i, $jt_s) = getValsFromDate($jb_finishtime_today); // list($le_y, $le_m, $le_d, $le_h, $le_i, $le_s) = getValsFromDate($last_execution); // if (mktime($jt_h, $jt_i, $jt_s, $jt_m, $jt_d, $jt_y) // > mktime($le_h, $le_i, $le_s, $le_m, $le_d, $le_y)): $sqlquery = "SELECT hq_id FROM headquarters WHERE hq_id IN (101,102,103,104,105,106,107,108,109,110,111,112)"; $result = $db2->query($sqlquery); if (DB::isError($result)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); while ($row = ($phpVersion >= "8.0" ? $result->fetch_assoc() : $result->fetchRow())): $hq_id = $row["hq_id"]; $system_result = ""; $cmd = "php ../tools/auto_trigger_check_metafield_hq.php acapella7890 $hq_id >> ../log/auto_trigger_check_metafield_hq.stdout+err 2>&1 &"; $ausgabe = system($cmd, $system_result); writeLog_("../log/check_jb_permanent_invtext_", "Calling auto_trigger_check_metafield_hq.php $hq_id: ausgabe='$ausgabe'"); endwhile; $result->free(); // else: // writeLog_("../log/check_jb_permanent_invtext_", "auto_trigger_check_metafield_hq.php not called: '$jb_finishtime_today' <= '$last_execution'"); // endif; // updateStmt("keepalive", "ka_process", "standing_orders", array("ka_lastexecutiontime", getDateTime("0")),""); // Neue Funktion 14.02.2022: Angaben in der Ko.-Nr. der Aufträge von STB981135 (vormals STB975894) (Tims Kanadische Backwaren) werden in Calculatorposten umgedingst // Ab dem 22.11.2023 kommt STB931592 (Zeit für Brot) hinzu foreach(array("STB981135", "STB931592") AS $cs_eid) { $sqlquery = "SELECT tour.jb_id, tr_id, tr_sort, tr_commission_no, tr_remark FROM job, tour, customer AS cs, costcenter AS csc WHERE LEFT (jb_ordertime, 10) = '" . date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 1, date("Y"))) . "'" . " AND cs_eid = '" . $cs_eid . "' AND cs.cs_id = csc.cs_id AND csc.csc_id = job.csc_id_payer AND job.jb_id = tour.jb_id ORDER BY tour.jb_id, tr_sort"; //echo $sqlquery . "\n"; writeLog_("../log/check_jb_permanent_invtext_", "[$sqlquery]"); $result = $db->query($sqlquery); if (DB::isError($result)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); $error_text = ""; $prev_jb_id = ""; $post_jb_ids = array(); $post_sqlqueries = array(); while ($row = ($phpVersion >= "8.0" ? $result->fetch_assoc() : $result->fetchRow())): //print_r($row); if ($prev_jb_id != $row["jb_id"]): $sqlquery = "DELETE FROM jobcalculator WHERE jb_id = " . $row["jb_id"]; //echo $sqlquery . "\n"; writeLog_("../log/check_jb_permanent_invtext_", "[$sqlquery]"); $theResult = $db->query($sqlquery); if (DB::isError($theResult)): reportDie ("$PHP_SELF: '$sqlquery': " . $theResult->getMessage()); endif; $post_jb_ids[] = $row["jb_id"]; $prev_jb_id = $row["jb_id"]; endif; $tr_commission_no = trim($row["tr_commission_no"]); if ($tr_commission_no != "" && $row["tr_sort"] > 1): $tr_commission_no_corr = str_replace(".", " ", $tr_commission_no); $tr_commission_no_corr = str_replace("/", " ", $tr_commission_no_corr); while (!(strpos($tr_commission_no_corr, " ") === false)): $tr_commission_no_corr = str_replace(" ", " ", $tr_commission_no_corr); endwhile; $tr_commission_no_arr = explode(" ", $tr_commission_no_corr); //print_r($tr_commission_no_arr); if (($cs_eid == "STB981135" && count($tr_commission_no_arr) == 2 && strval($tr_commission_no_arr[0]) === strval(intval($tr_commission_no_arr[0])) && strval($tr_commission_no_arr[1]) === strval(intval($tr_commission_no_arr[1]))) || ($cs_eid == "STB931592" && count($tr_commission_no_arr) == 1 && strval($tr_commission_no_arr[0]) === strval(intval($tr_commission_no_arr[0])))): $srv_name = "Stopps"; $srvt_name = ""; if ($cs_eid == "STB981135") { $srv_name = "Körbe"; $srvt_name = "geliefert"; } $post_sqlqueries[] = "INSERT INTO jobcalculator (jb_id, tr_sort, jbc_amount, srv_name, srvt_name, jbc_price, jbc_totalprice) VALUES (" . $row["jb_id"] . ", " . $row["tr_sort"] . ", " . $tr_commission_no_arr[0] . ", '$srv_name', '$srvt_name', 0.0, 0.0)"; if ($cs_eid == "STB981135") { $srvt_name = "abgeholt"; $post_sqlqueries[] = "INSERT INTO jobcalculator (jb_id, tr_sort, jbc_amount, srv_name, srvt_name, jbc_price, jbc_totalprice) VALUES (" . $row["jb_id"] . ", " . $row["tr_sort"] . ", " . $tr_commission_no_arr[1] . ", '$srv_name', '$srvt_name', 0.0, 0.0)"; } $second_val = ""; if ($cs_eid == "STB981135") { $second_val = $tr_commission_no_arr[1]; } $sqlquery = "INSERT INTO jobcalculator (jb_id, tr_sort, jbc_amount, srv_name, srvt_name, jbc_price, jbc_totalprice) VALUES (" . $row["jb_id"] . ", " . $row["tr_sort"] . ", 0, $tr_commission_no_arr[0], '$second_val', 0.0, 0.0)"; //echo $sqlquery . "\n"; writeLog_("../log/check_jb_permanent_invtext_", "[$sqlquery]"); $theResult = $db->query($sqlquery); if (DB::isError($theResult)): reportDie ("$PHP_SELF: '$sqlquery': " . $theResult->getMessage()); endif; else: $error_text .= $row["jb_id"] . "/" . $row["tr_sort"] . ": Ungültiger Wert \"" . $tr_commission_no . "\" im Kommissionsnummernfeld.\n"; endif; elseif ($row["tr_sort"] > 1): $error_text .= $row["jb_id"] . "/" . $row["tr_sort"] . ": Kommissionsnummernfeld leer.\n"; elseif ($tr_commission_no != ""): $error_text .= $row["jb_id"] . "/" . $row["tr_sort"] . ": Kommissionsnummernfeld in 1. Station muss leer sein.\n"; endif; $tr_remark = trim($row["tr_remark"]); if (!(strpos($tr_remark, "[*") === false)): $tr_commission_no_ori = substr($tr_remark, strpos($tr_remark, "[*") + 2, strpos($tr_remark, "*]") - strpos($tr_remark, "[*") - 2); $tr_remark = str_replace($tr_commission_no_ori, trim($tr_commission_no_ori . " " . $tr_commission_no), $tr_remark); $sqlquery = "UPDATE tour SET tr_commission_no = '" . $tr_commission_no_ori . "', tr_remark = '" . $tr_remark . "' WHERE tr_id = " . $row["tr_id"]; //echo $sqlquery . "\n"; writeLog_("../log/check_jb_permanent_invtext_", "[$sqlquery]"); $theResult = $db->query($sqlquery); endif; endwhile; if ($error_text != ""): $mailObj = new htmlMimeMail(); $mailObj->setFrom("auto-mailer@assecutor.de"); // $mailObj->setBcc("support@assecutor.de"); $mailObj->setSubject("Fehler in den Aufträgen von " . $cs_eid); $mailObj->setText($error_text); $mailResult = $mailObj->send(array("ca@assecutor.de"), 'smtp'); endif; if ($prev_jb_id != ""): $system_result = ""; $cmd = "php ../tools/cron_export_zfbg.php acapella7890 " . date("Y m d", mktime(0, 0, 0, date("m"), date("d") - 1, date("Y"))) . " >> ../log/check_jb_permanent_invtext_" . date("Ym") . ".log 2>&1"; if ($cs_eid == "STB981135") { $cmd = "php ../tools/cron_export_tkbg.php acapella7890 " . date("Y m d", mktime(0, 0, 0, date("m"), date("d") - 1, date("Y"))) . " >> ../log/check_jb_permanent_invtext_" . date("Ym") . ".log 2>&1"; } writeLog_("../log/check_jb_permanent_invtext_", $cmd); // echo $cmd . "\n"; $ausgabe = system($cmd, $system_result); foreach ($post_jb_ids as $jb_id) { $sqlquery = "DELETE FROM jobcalculator WHERE jb_id = " . $jb_id; //echo $sqlquery . "\n"; writeLog_("../log/check_jb_permanent_invtext_", "[$sqlquery]"); $theResult = $db->query($sqlquery); if (DB::isError($theResult)): reportDie ("$PHP_SELF: '$sqlquery': " . $theResult->getMessage()); endif; } foreach ($post_sqlqueries as $sqlquery) { //echo $sqlquery . "\n"; writeLog_("../log/check_jb_permanent_invtext_", "[$sqlquery]"); $theResult = $db->query($sqlquery); if (DB::isError($theResult)): reportDie ("$PHP_SELF: '$sqlquery': " . $theResult->getMessage()); endif; } else: writeLog_("../log/check_jb_permanent_invtext_", "no jobs were processed, no need to call cron for \$cs_eid = " . $cs_eid); endif; } // Am dritten Werktag if (is3rdOr4thWorkDay(3)): $system_result = ""; $cmd = "php ../tools/cron_sustainability_customer_report.php acapella7890 >> ../log/cron_sustainability_customer_report.stdout+err 2>&1 &"; $ausgabe = system($cmd, $system_result); writeLog_("../log/check_jb_permanent_invtext_", "cron_sustainability_customer_report.php: ausgabe='$ausgabe'"); endif; // elseif (date("H:i") == "16:45" || date("H:i") == "16:46" || date("H:i") == "16:47" || date("H:i") == "16:48" || date("H:i") == "16:49"): // Einmal bitte wöchentlich die Exportierten, die im Zeitraum von Dienstag bis Montag erledigt wurden. Der Bericht erstellt in der Nacht auf Dienstag if (date("w") == "2"): // Dienstag $system_result = ""; $cmd = "php ../tools/statistic_special_cartage.php acapella7890 \"\" \"" . date("Y-m-d H:i:s", mktime(0, 0, 0, date("n"), date("j") - 7, date("Y"))) . "\" \"" . date("Y-m-d H:i:s", mktime(23, 59, 59, date("n"), date("j") - 1, date("Y"))) . "\"" . " >> ../log/statistic_special_cartage.stdout+err 2>&1 &"; $ausgabe = system($cmd, $system_result); writeLog_("../log/check_jb_permanent_invtext_", $cmd); endif; // Einmal Exportierte, die erledigt worden vom 01.-15., erstellt in einem Bericht in der Nacht vom 20. auf den 21., sowie vom 16. - Ultimo, erstellt in einem Bericht in der Nacht vom 06. auf den 07. des Folgemonats. if (date("j") == 21): // Am 21. des Monats $system_result = ""; $cmd = "php ../tools/statistic_special_cartage.php acapella7890 \"\" \"" . date("Y-m-d H:i:s", mktime(0, 0, 0, date("n"), 1, date("Y"))) . "\" \"" . date("Y-m-d H:i:s", mktime(23, 59, 59, date("n"), 15, date("Y"))) . "\"" . " >> ../log/statistic_special_cartage.stdout+err 2>&1 &"; $ausgabe = system($cmd, $system_result); writeLog_("../log/check_jb_permanent_invtext_", $cmd); endif; if (date("j") == 7): // Am 7. des Monats $system_result = ""; $cmd = "php ../tools/statistic_special_cartage.php acapella7890 \"\" \"" . date("Y-m-d H:i:s", mktime(0, 0, 0, date("n") - 1, 16, date("Y"))) . "\" \"" . date("Y-m-d H:i:s", mktime(23, 59, 59, date("n"), 0, date("Y"))). "\"" . " >> ../log/statistic_special_cartage.stdout+err 2>&1 &"; $ausgabe = system($cmd, $system_result); writeLog_("../log/check_jb_permanent_invtext_", $cmd); endif; // ab 05.12.2024: Neue Mails am 4. Werktag des Monats if (is3rdOr4thWorkDay(4)): // Am 4. Werktag des Monats foreach (array("1","2","3","4","5","6","7","8","11") as $hq_id) { $system_result = ""; $cmd = "cd /srv/htdocs/stadtbote/tools/; php auto_trigger_sales_customer_report.php acapella7890 hq " . $hq_id . " >> ../log/auto_trigger_sales_customer_report.stdout+err 2>&1 &"; $ausgabe = system($cmd, $system_result); writeLog_("../log/check_jb_permanent_invtext_", $cmd); } endif; elseif (date("H:i") == "07:02" /* && $last_exec_loc != date("Y-m-d") */ ): $sqlquery = "SELECT hq_id FROM headquarters WHERE hq_id IN (5)"; $result = $db2->query($sqlquery); if (DB::isError($result)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); while ($row = ($phpVersion >= "8.0" ? $result->fetch_assoc() : $result->fetchRow())): $hq_id = $row["hq_id"]; $system_result = ""; $cmd = "php ../tools/auto_trigger_locating_STF.php acapella7890 5 65824 >> ../log/auto_trigger_locating_STF.stdout+err 2>&1 &"; $ausgabe = system($cmd, $system_result); // $last_exec_loc = date("Y-m-d"); writeLog_("../log/check_jb_permanent_invtext_", "auto_trigger_locating_STF.php: ausgabe='$ausgabe', hq_id = $hq_id"); endwhile; $result->free(); // $sqlquery = "SELECT jb_id, jb_markup FROM job, costcenter WHERE job.csc_id_payer = costcenter.csc_id AND cs_id = 306066 AND jb_export_time IS NULL and (jb_storno IS NULL OR (jb_storno != 2 and jb_storno != 4)) AND jb_markup > 0"; // $result = $db2->query($sqlquery); // if (DB::isError($result)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); // while ($row = ($phpVersion >= "8.0" ? $result->fetch_assoc() : $result->fetchRow())): // $jb_id_tmp = $row["jb_id"]; // $mailObj = new htmlMimeMail(); // $mailObj->setFrom("support@assecutor.de"); //// $mailObj->setBcc("ca@assecutor.de"); // $mailObj->setSubject("Auftrag Nr. " . $row["jb_id"] . " hat einen TZ von " . $row["jb_markup"] . "%"); // $mailObj->setText("Kunde STB918648 hat eigentlich einen TZ von 0%"); // $mailResult = $mailObj->send($recipients, 'smtp'); // writeLog_("../log/check_jb_permanent_invtext_", "Mail zu Auftrag Nr. " . $row["jb_id"] . " wurde versandt, result = " . $mailResult); // endwhile; // $result->free(); elseif (date("H:i") == "17:00"): if (mktime(0, 0, 0, date("m"), date("d"), date("Y")) < mktime(0, 0, 0, 9, 11, 2025) && floor(date("U") / 3600 / 24) % 2 == 1): $system_result = ""; $cmd = "php ../sysadmin/mf_msg2all.php >> ../log/mf_msg2all.stdout+err 2>&1 &"; $ausgabe = system($cmd, $system_result); writeLog_("../log/check_jb_permanent_invtext_", "mf_msg2all: ausgabe='$ausgabe'"); endif; elseif (date("H:i") == "19:30"): $system_result = ""; $cmd = "cd /srv/www/sb/tools; php auto_export_PDF_STB_H_SINGLE.php acapella7890 824381 >> ../log/auto_export_PDF_STB_H_SINGLE.stdout+err 2>&1 &"; $ausgabe = system($cmd, $system_result); writeLog_("../log/check_jb_permanent_invtext_", "auto_export_PDF_STB_H_SINGLE.php: ausgabe='$ausgabe', hq_id = $hq_id"); elseif ( date("H:i") == "05:00" || date("H:i") == "05:30" || date("H:i") == "06:00" || date("H:i") == "06:30" || date("H:i") == "07:00" || date("H:i") == "07:30" || date("H:i") == "08:00" || date("H:i") == "08:30" || date("H:i") == "09:00" || date("H:i") == "09:30" || date("H:i") == "10:00" || date("H:i") == "10:30" || date("H:i") == "11:00" || date("H:i") == "11:30" || date("H:i") == "12:00" || date("H:i") == "12:30" || date("H:i") == "13:00" || date("H:i") == "13:30" || date("H:i") == "14:00" || date("H:i") == "14:30" || date("H:i") == "15:00" || date("H:i") == "15:30" || date("H:i") == "16:00" || date("H:i") == "16:30" || date("H:i") == "17:01" || date("H:i") == "17:30" || date("H:i") == "18:00" || date("H:i") == "18:30" || date("H:i") == "19:00" || date("H:i") == "19:31" || date("H:i") == "20:00" || date("H:i") == "20:30" || date("H:i") == "21:00" || date("H:i") == "21:30"): echo "[" . date("Y-m-d H:i:s") . "] checking for jobs to correct jb_finishtime (memory_get_usage() = " . memory_get_usage() . ")\n"; //******************************************************************************** // Neue Funktion 03.01.2017: Aufträge mit "0000-00-00 00:00:00"-Zeiten reparieren // $sqlquery = // "SELECT" . // " max_tr_modify AS Erledigung_korrekt, jb_id AS Auftragsnr, jb_finishtime AS Erledigung_kaputt" . // " FROM (" . // " SELECT job.jb_id, cr_sid, jb_totalprice, cs_eid, cmp_comp, jb_ordertime, jb_finishtime, MAX(tr_modify) AS max_tr_modify, jb_modify" . // " FROM tour, job, costcenter, customer, company" . // " WHERE (jb_export_time IS NULL AND jb_status = 2 AND jb_storno IS NULL AND jb_incomplete = 0 AND jb_totalprice > 0)" . // " AND tour.jb_id = job.jb_id AND costcenter.csc_id = job.csc_id_payer AND costcenter.cs_id = customer.cs_id AND customer.cmp_id = company.cmp_id" . // " AND jb_modify > '2016-12-01'" . // " GROUP BY jb_id ORDER BY max_tr_modify" . // ") AS honk" . // " WHERE" . // " TIMESTAMPDIFF(WEEK, jb_ordertime,jb_finishtime) > 50" . // " OR TIMESTAMPDIFF(WEEK, jb_finishtime,jb_ordertime) > 50" . // " OR TIMESTAMPDIFF(WEEK, jb_finishtime, jb_ordertime) IS NULL"; $sqlquery = "SELECT job.jb_id, jb_finishtime, tr_finishtime, jb_id_parent FROM tour, job WHERE" . " (jb_export_time IS NULL AND jb_status = 2 AND jb_storno IS NULL " /* AND jb_incomplete = 0 */ . " AND (jb_totalprice > 0 OR" . " LEFT (jb_ordertime, 10) = '" . date("Y-m-d") . "')) AND" . // because of automatic finish-mails also change jobs with totalprice = 0 if they are from today " tour.jb_id = job.jb_id AND jb_finishtime = '0000-00-00 00:00:00'" . " AND jb_modify > '2016-12-01'" . " ORDER BY jb_id, tr_finishtime DESC"; writeLog_("../log/check_jb_permanent_invtext_", "Checking for jobs to correct jb_finishtime [$sqlquery]"); $res = $db_conn->query($sqlquery); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery' : " . $res->getMessage()); $jb_id_prev = 0; while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): if ($jb_id_prev != $row["jb_id"]): $jb_id_sql = $row["jb_id"]; $correct_finishtime = $row["tr_finishtime"]; if ($row["jb_id_parent"] == -1): $jb_id_child = ""; $jb_id_child = $db->getOne("SELECT jb_id FROM job WHERE jb_id_parent = " . $row["jb_id"] . " AND jb_finishtime = '0000-00-00 00:00:00'"); $jb_id_child2 = ""; if ($jb_id_child != ""): $jb_id_sql .= " OR jb_id = " . $jb_id_child; $jb_id_child2 = $db->getOne("SELECT jb_id FROM job WHERE jb_id_parent = " . $jb_id_child . " AND jb_finishtime = '0000-00-00 00:00:00'"); if ($jb_id_child2 != ""): $jb_id_sql .= " OR jb_id = " . $jb_id_child2; endif; endif; elseif ($row["jb_id_parent"] > 0): $correct_finishtime = $db->getOne("SELECT jb_finishtime FROM job WHERE jb_id = " . $row["jb_id_parent"]); endif; writeLog_("../log/check_jb_permanent_invtext_", "Correcting jb_finishtime = '" . $row["jb_finishtime"] . "': " . "[UPDATE job SET jb_finishtime = '" . $correct_finishtime . "', jb_modify = jb_modify WHERE jb_id = " . $jb_id_sql . "]" ); $db->query("UPDATE job SET jb_finishtime = '" . $correct_finishtime . "', jb_modify = jb_modify WHERE jb_id = " . $jb_id_sql); $jb_id_prev = $row["jb_id"]; endif; endwhile; $res->free(); //echo "[" . date("Y-m-d H:i:s") . "] checking for rogue cr_sids (memory_get_usage() = " . memory_get_usage() . ")\n"; // // Neue Funktion 02.09.2024: Dubletten-Aufräumung (../tools/deleteDuplicateCr_sids.php) ersetzt durch Versand einer Mail // // 26.08.2025: Das Übel wird jetzt an der Wurzel beseitigt, so dass es jetzt gar nicht erst entstehen kann //// $sqlquery = "SELECT cr_sid FROM courier WHERE cr_sid != '' GROUP BY cr_sid HAVING COUNT(*) > 1"; // $sqlquery = "SELECT courier.cr_id, cr_sid FROM courier LEFT JOIN couriervehicle ON courier.cr_id = couriervehicle.cr_id WHERE cr_sid != '' AND couriervehicle.cr_id IS NULL"; // writeLog_("../log/check_jb_permanent_invtext_", "checking for rogue cr_sids: \$sqlquery = [" . $sqlquery . "]"); // $result = $db2->query($sqlquery); // if (DB::isError($result)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); // $cr_sids = ""; // $cr_ids = ""; // while ($row = ($phpVersion >= "8.0" ? $result->fetch_assoc() : $result->fetchRow())): // $cr_sids .= "'" . trim($row['cr_sid']) . "' (cr_id=" . $row['cr_id'] . "),"; // $cr_ids .= $row['cr_id'] . ","; //// $cr_ids .= $db->getOne("SELECT courier.cr_id FROM courier LEFT JOIN couriervehicle ON courier.cr_id = couriervehicle.cr_id WHERE cr_sid = '" . $row['cr_sid'] ."' AND couriervehicle.cr_id IS NULL") . "',"; // endwhile; // $res->free(); // if ($cr_ids != ""): // $cr_sids = substr($cr_sids, 0, -1); // $cr_ids = substr($cr_ids, 0, -1); //// echo "duplicate cr_sids: " . $cr_sids . "\n"; // writeLog_("../log/check_jb_permanent_invtext_", "cr_sids from courier with no entry in couriervehicle: " . $cr_sids); // writeLog_("../log/check_jb_permanent_invtext_", "cr_ids where the cr_sid is to be deleted: " . $cr_ids); // $sqlquery = "UPDATE courier SET cr_sid = '' WHERE cr_id IN (" . $cr_ids . ")"; // writeLog_("../log/check_jb_permanent_invtext_", "Deleting rogue cr_sids: [" . $sqlquery . "]"); // $db->query($sqlquery); // // $sqlquery = "UPDATE courier SET cr_sid = '' WHERE cr_mobile_pda = '' AND cr_sid IN (" . $cr_sids . ")"; // // mysql_query($sqlquery) or die ($sqlquery); // // echo mysql_affected_rows() . " duplicate cr_sids deleted\n"; // $mailObj = new htmlMimeMail(); // $mailObj->setFrom("support@assecutor.de"); // $mailObj->setSubject("Potentielle Kurier-Dubletten entdeckt"); // $mailObj->setText("Folgende SIDs sind in courier, aber nicht in courier_vehicle: " . $cr_sids . ", das Feld cr_sid wurde in folgenden cr_ids gelöscht: " . $cr_ids . ".\n" . "UPDATE courier SET cr_sid = '' WHERE cr_id IN (" . $cr_ids . ")" . "\n"); // $mailResult = $mailObj->send(array("admin@assecutor.de"), 'smtp'); //// $mailResult = $mailObj->send(array("ca@assecutor.de"), 'smtp'); // endif; elseif (date("H:i") == "22:00"): // Und noch einer... // // alle Vorgänger-Daueraufträge von HTM18156 bis zum 01.06.2013 zurück holen // $sqlquery = "SELECT jb_id, jb_id_copy_permanent FROM job, customer AS cs, costcenter AS csc WHERE jb_ordertime > " . // "'2013-05-16 00:00:00' AND NOT (jb_id_copy_permanent IS NULL) AND cs_eid = 'HTM18156' AND cs.cs_id = csc.cs_id AND csc.csc_id = job.csc_id_payer"; // $res = $db->query($sqlquery); // if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery': " . $res->getMessage()); // $permanent_jobs = array(); // while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): // $permanent_jobs[$row['jb_id_copy_permanent']] = array($row['jb_id']); // endwhile; // $res->free(); // Alle unerledigten Aufträge von HTM18156 des heutigen Tages ab 22:00 Uhr auf erledigt setzen ("Schablonen-Daueraufträge") $sqlquery = "SELECT jb_id, cr_id, job.hq_id, jb_ordertime, jb_tourname FROM job, customer AS cs, costcenter AS csc WHERE LEFT (jb_ordertime, 10) = '" . date("Y-m-d") . "' AND cs_eid = 'HTM18156' AND cs.cs_id = csc.cs_id AND csc.csc_id = job.csc_id_payer AND jb_status != 2"; writeLog_("../log/check_jb_permanent_standing_", "[$sqlquery]"); $result = $db2->query($sqlquery); if (DB::isError($result)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); $cmd_exec_limit = date("Y-m-d H:i:s", mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y") + 1)); while ($row = ($phpVersion >= "8.0" ? $result->fetch_assoc() : $result->fetchRow())): //print_r($row); $jb_finishtime_man = date("Y-m-d H:i:s"); $sqlquery = "UPDATE job SET jb_status = 2, jb_finishtime = '$jb_finishtime_man' WHERE jb_id = '" . $row["jb_id"] . "'"; writeLog_("../log/check_jb_permanent_standing_", "[$sqlquery]"); $theResult = $db->query($sqlquery); if (DB::isError($theResult)) reportDie ("$PHP_SELF: '$sqlquery': " . $theResult->getMessage()); $sqlquery = "INSERT INTO phoenix_pda.commandexec (cr_id, hq_id, cmd_command, cmde_exec_time, cmde_exec_timelimit, cmde_mode, cmde_param) VALUES ('" . $row["cr_id"] . "', '" . $row["hq_id"] . "', '3', '$now', '$cmd_exec_limit', '1', '" . $row["jb_id"] . "')"; writeLog_("../log/check_jb_permanent_standing_", "[$sqlquery]"); $theResult = $db->query($sqlquery); if (DB::isError($theResult)) reportDie ("$PHP_SELF: '$sqlquery': " . $theResult->getMessage()); // // finde den ältesten Vorgänger // $jb_id_prev = $row["jb_id"]; // while(array_key_exists($jb_id_prev, $permanent_jobs)): // solange bis der Vorgänger selbst keinen weiteren Vorgänger hat // $jb_id_follow = $jb_id_prev; // $jb_id_prev = $permanent_jobs[$jb_id_prev][0]; // jb_id des Vorgängers // endwhile; // // den ältesten Vorgänger fortsetzen ////echo "copy_job($jb_id_prev, " . $jb_finishtime_man . ", " . $row["hq_id"] . ", " . $row ["jb_ordertime"] . ")\n"; // copy_job($jb_id_prev, $jb_finishtime_man, $row["hq_id"], $row ["jb_ordertime"]); // // Kette wieder reparieren // $jb_id_new = getFieldValueFromId("job", "jb_id", $jb_id_prev, "jb_id_copy_permanent"); // updateStmt("job", "jb_id", $row["jb_id"], array("jb_id_copy_permanent", $jb_id_new, "jb_tourname", NULL)); // writeLog_("../log/check_jb_permanent_standing_", $row["jb_id"] . ": " . "jb_id_copy_permanent=$jb_id_new, jb_tourname=NULL"); // updateStmt("job", "jb_id", $jb_id_new, array("jb_tourname", $row["jb_tourname"])); // writeLog_("../log/check_jb_permanent_standing_", $jb_id_new . ": " . "jb_tourname='" . $row["jb_tourname"] . "'"); // updateStmt("job", "jb_id", $jb_id_prev, array("jb_id_copy_permanent", $jb_id_follow)); // writeLog_("../log/check_jb_permanent_standing_", $jb_id_prev . ": " . "jb_id_copy_permanent=$jb_id_follow"); endwhile; $result->free(); elseif (date("H:i") == "23:45"): //******************************************************************************** // 02.08.2020: Kurierer in Quarantäne müssen nach 14 Tagen rehabilitiert werden $cr_quarantinePar = getParameterValue("0", "CR_QUARANTINE", "0"); $cr_quarantineArrArr = array_filter(explode(";", $cr_quarantinePar)); $cr_quarantines = array(); foreach($cr_quarantineArrArr AS $cr_quarantineArr) { $cr_quarantines[] = array_filter(explode(",", $cr_quarantineArr)); $cr_quarantines[count($cr_quarantines) - 1][2] = 0; } writeLog_("../log/check_jb_permanent_invtext_", "Quarantine control: \$cr_quarantinePar = '" . $cr_quarantinePar . "'"); $cr_group_clause = ""; $sqlquery = "SELECT grp_id FROM groups WHERE grp_name = 'Quarantäne'"; $result = $db2->query($sqlquery); if (DB::isError($result)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); while ($row = ($phpVersion >= "8.0" ? $result->fetch_assoc() : $result->fetchRow())): $sqlquery = "SELECT cr_id, cr_group FROM courier WHERE cr_group LIKE '%," . $row["grp_id"] . ",%'"; $theResult = $db2->query($sqlquery); if (DB::isError($theResult)) reportDie ("$PHP_SELF: '$sqlquery': " . $theResult->getMessage()); while ($theRow = ($phpVersion >= "8.0" ? $theResult->fetch_assoc() : $theResult->fetchRow())): $found = false; for ($i = 0; $i < count($cr_quarantines); $i++) { if ($theRow["cr_id"] == $cr_quarantines[$i][0]) { $found = true; if (strtotime($cr_quarantines[$i][1]) + (14 * 24 * 60 * 60) < time()) { $theRow["cr_group"] = str_replace($row["grp_id"] . ',' , '', $theRow["cr_group"]); if ($theRow["cr_group"] == ',') $theRow["cr_group"] = ''; $db->query("UPDATE courier SET cr_group = '" . $theRow["cr_group"] . "' WHERE cr_id = " . $theRow["cr_id"]); array_splice($cr_quarantines, $i, 1); writeLog_("../log/check_jb_permanent_invtext_", "Quarantine ended: \$cr_id = " . $theRow["cr_id"] . " (" . $cr_quarantines[$i][1] . ")"); } else { $cr_quarantines[$i][2] = 1; } } } if (!$found) { $cr_quarantines[] = array($theRow["cr_id"], date("Y-m-d"), 1); writeLog_("../log/check_jb_permanent_invtext_", "Quarantine started: \$cr_id = " . $theRow["cr_id"] . " (" . date("Y-m-d") . ")"); } endwhile; $theResult->free(); endwhile; $result->free(); $cr_quarantinePar = ""; foreach($cr_quarantines AS $cr_quarantine) { if ($cr_quarantine[2] == 1) { if ($cr_quarantinePar != "") $cr_quarantinePar .= ";"; $cr_quarantinePar .= $cr_quarantine[0] . "," . $cr_quarantine[1]; } else { writeLog_("../log/check_jb_permanent_invtext_", "Quarantine vanished: \$cr_id = " . $cr_quarantine[0] . " (" . $cr_quarantine[1] . ")"); } } $db->query("UPDATE parameter SET par_value = '" . $cr_quarantinePar . "' WHERE par_key = 'CR_QUARANTINE'"); //******************************************************************************** writeLog_("../log/check_jb_permanent_invtext_", "exiting..."); exit(); endif; echo "[" . date("Y-m-d H:i:s") . "] sleeping (memory_get_usage() = " . memory_get_usage() . ")\n"; $sleep_time = 59 - date("s") - 1; writeLog_("../log/check_jb_permanent_invtext_", "sleeping " . ($i + 1) . "/5"); sleep($sleep_time); writeLog_("../log/check_jb_permanent_invtext_", "waking up"); while (date("s") != "00") { writeLog_("../log/check_jb_permanent_invtext_", "date(\"s\") = " . date("s")); // Warte 0.25 Sekunden usleep(250000); } writeLog_("../log/check_jb_permanent_invtext_", "continuing"); endfor; //******************************************************************************** // Dauerauftragsfortsetzung (ALLE 500 SEC) echo "[" . date("Y-m-d H:i:s") . "] querying for finished jobs to be continued (memory_get_usage() = " . memory_get_usage() . ")\n"; $today_date = $today['year'] . "-" . sprintf("%02d", $today['mon']) . "-" . sprintf("%02d", $today['mday']); // JB_ID nicht angegeben -> kein expliziter Aufruf // Alle Daueraufträge finden, die erledigt sind // $sqlquery = "SELECT job.jb_id, job.jb_finishtime, job.hq_id FROM job FORCE INDEX (jb_storno_2) WHERE ((jb_storno != 3 AND jb_storno != 4) OR jb_storno IS NULL) " . // " AND job.jb_status = 2 AND jb_permanent IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) AND (jb_id_copy_permanent IS NULL OR jb_id_copy_permanent = 0) " . // " AND (job.jp_permenddat >= '$today_date" . " 00:00:00' OR job.jp_permenddat IS NULL OR job.jp_permenddat = '0000-00-00 00:00:00')" . // " ORDER BY job.jb_id"; $no_continuation_list_sql = implode(",", $no_continuation_list); if ($no_continuation_list_sql != "") $no_continuation_list_sql = " AND jb_id NOT IN (" . $no_continuation_list_sql . ")"; $sqlquery = "(SELECT job.jb_id, job.jb_finishtime, job.hq_id FROM job WHERE (jb_storno != 3 AND jb_storno != 4)" . " AND job.jb_status = 2 AND jb_permanent IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) AND (jb_id_copy_permanent IS NULL OR jb_id_copy_permanent = 0)" . " AND (job.jp_permenddat >= '$today_date" . " 00:00:00' OR job.jp_permenddat IS NULL)$no_continuation_list_sql" . " AND jb_finishtime > '" . date("Y-m-d H:i:s", mktime(0, 0, 0, date("m") - 2, date("d"), date("Y"))) . "')" . " UNION " . "(SELECT job.jb_id, job.jb_finishtime, job.hq_id FROM job WHERE jb_storno IS NULL" . " AND job.jb_status = 2 AND jb_permanent IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) AND (jb_id_copy_permanent IS NULL OR jb_id_copy_permanent = 0)" . " AND (job.jp_permenddat >= '$today_date" . " 00:00:00' OR job.jp_permenddat IS NULL)$no_continuation_list_sql" . " AND jb_finishtime > '" . date("Y-m-d H:i:s", mktime(0, 0, 0, date("m") - 2, date("d"), date("Y"))) . "')" . " ORDER BY jb_id"; writeLog_("../log/check_jb_permanent_standing_", "Querying for finished jobs to be continued [$sqlquery]"); trace_execution_time_start(); $res = $db_conn->query($sqlquery); writeLog_("../log/check_jb_permanent_standing_", trace_execution_time_stop() . " (query time)"); if (DB::isError($res)) reportDie ("$PHP_SELF: '$sqlquery' : " . $res->getMessage()); while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): writeLog_("../log/check_jb_permanent_standing_", $row["jb_id"] . " is to be continued"); if ($row["jb_id"] != ""): // writeCmd($row["jb_id"]); // $jobList = array(); $hq_id = $row["hq_id"]; copy_job($row["jb_id"], $row["jb_finishtime"], $row["hq_id"]); // Aufruf des Batch // $ausgabe = system("..\jobs\check_jb_permanent.cmd " . $row["jb_id"] . " " . $row["jb_finishtime"] . " >>..\log\check_jb_permanent.stdout", $result); // echo "Result:", $result; // echo "Ausgabe:", $ausgabe; endif; // Set execution time for keepalive (in order to avoid being called anew while still running (making invoice text can take long time!) // updateStmt("keepalive", "ka_process", "standing_orders", array("ka_lastexecutiontime", getDateTime("0")),""); endwhile; $res->free(); writeLog_("../log/check_jb_permanent_standing_", "no more jobs to be continued"); //******************************************************************************** // Nachfolgendes NUR EINMAL AM TAG // if ($jb_finishtime_today > $jb_finishtime_start && $jb_finishtime_today < $now): // endif; // updateStmt("keepalive", "ka_process", "standing_orders", array("ka_lastexecutiontime", getDateTime("0")),""); //******************************************************************************** // NACHFOLGENDES WIEDER ALLE 5 MIN. // Noch eine weitere Funktion: // Javascript-Arrays mit selten veränderlichen Variablen werden in eine extra .js-Datei geschrieben, die // mind. einmal am Tag upgedatet werden sollte // $sqlquery = "SELECT hq_id FROM headquarters"; //writeLog_("../log/check_jb_permanent_invtext_", $sqlquery); // $result = $db2->query($sqlquery); // if (DB::isError($result)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); // while ($row = ($phpVersion >= "8.0" ? $result->fetch_assoc() : $result->fetchRow())): // $hq_id = $row["hq_id"]; //echo "[" . date("Y-m-d H:i:s") . "] updating job_options_" . $hq_id . ".js\n"; //writeLog_("../log/check_jb_permanent_invtext_", "include(\"../jobs/job_options.js.inc.php\"), \$hq_id = " . $hq_id); // include("../jobs/job_options.js.inc.php"); // endwhile; // $result->free(); $system_result = ""; $cmd = "php ../tools/mk_job_options.js.inc.php >> ../log/mk_job_options.js.inc.stdout+err 2>&1 &"; writeLog_("../log/check_jb_permanent_invtext_", "Calling mk_job_options.js.inc.php"); $ausgabe = system($cmd, $system_result); echo "[" . date("Y-m-d H:i:s") . "] checking jb_sales_tax_rate (memory_get_usage() = " . memory_get_usage() . ")\n"; // Und noch einer: Wenn aus einer alten Konserve Auftrag erzeugt wird, dann manchmal noch mit 16% // Deshalb hier checken und auf 16% setzen $sqlquery = "SELECT jb_id FROM job WHERE jb_sales_tax_rate = 16 AND jb_finishtime > '2007-01-01 00:00:00' AND jb_export_time IS NULL"; writeLog_("../log/check_jb_permanent_invtext_", $sqlquery); $theResult = $db2->query($sqlquery); if (DB::isError($theResult)) reportDie ("$PHP_SELF: '$sqlquery': " . $theResult->getMessage()); while ($row = ($phpVersion >= "8.0" ? $theResult->fetch_assoc() : $theResult->fetchRow())): $sqlquery = "UPDATE job SET jb_sales_tax_rate = 19 WHERE jb_id = '" . $row["jb_id"] . "'"; $result = $db->query($sqlquery); if (DB::isError($result)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); endwhile; $theResult->free(); echo "[" . date("Y-m-d H:i:s") . "] updating cr_sid (memory_get_usage() = " . memory_get_usage() . ")\n"; // Und noch einer... // ... muss eigentlich im Code gecheckt werden, aber erst einmal so ... *urgh* $sqlquery = "UPDATE job SET cr_sid = '' WHERE cr_sid = '0'"; writeLog_("../log/check_jb_permanent_invtext_", $sqlquery); $result = $db->query($sqlquery); if (DB::isError($result)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); // Und noch einer... (nur HT) if (getParameterValue("0", "CLEANUP_TABLE_COURIER", "0") == "1"): $availabletime_limit = date("Y-m-d H:i:s", mktime(date("H"), date("i"), date("s"), date("m"), date("d") - 1, date("Y"))); $sqlquery = "UPDATE courier SET cr_sid = '' WHERE cr_sid <> '0' AND cr_sid <> '' AND cr_available = 0 AND cr_availabletime < '$availabletime_limit'"; $result1 = $db->query($sqlquery); if (DB::isError($result1)) myDie ("$PHP_SELF: '$sqlquery': " . $result1->getMessage()); writeLog_("../log/check_jb_permanent_invtext_", "Deleting cr_sids with availability until yesterday [$sqlquery]"); endif; echo "[" . date("Y-m-d H:i:s") . "] checking global jobs (memory_get_usage() = " . memory_get_usage() . ")\n"; // Und noch einer... // Unvermittelte globale Aufträge in Zuzuweisende zurückschicken // 18.08.2025: Die Ablaufzeit für jb_globaljob wurde von 60 auf 15 Minuten reduziert $sqlquery = "SELECT jb_id FROM job WHERE jb_globaljob = 1 AND jb_status = 0 AND (DATE_SUB(NOW(), INTERVAL 15 MINUTE) >= jb_modify)"; writeLog_("../log/check_jb_permanent_invtext_", $sqlquery); $theTheResult = $db2->query($sqlquery); if (DB::isError($theTheResult)) reportDie ("$PHP_SELF: '$sqlquery': " . $theTheResult->getMessage()); while ($row = ($phpVersion >= "8.0" ? $theTheResult->fetch_assoc() : $theTheResult->fetchRow())): $sqlquery = "UPDATE job SET jb_globaljob = 0, jb_status = 9 WHERE jb_id = '" . $row["jb_id"] . "'"; $result = $db->query($sqlquery); if (DB::isError($result)) reportDie ("$PHP_SELF: '$sqlquery': " . $result->getMessage()); endwhile; $theTheResult->free(); // MEGA abgeschaltet am 17.06. // // Und noch einer... // // Ab dem 01.08. erhalten Aufträge eines bestimmten Kunden (MEGA) einen Mindestfuhrlohn über den Calculator // // Die Fahrzeugzuschläge und der Servicepreis müssen dabei berücksichtigt werden, da der Mindestfuhrlohn sich nur auf den Entfernungspreis bezieht // $jb_cr_price_minimum = 18; // Erhöhung von 13 auf 18 am 19.08.2023 // $sqlquery = "SELECT job.jb_id, cr_sid, job.hq_id, vht_id, jb_payment, jb_type, emp_id, jb_invmode, jb_sales_tax_rate, jb_sales_tax_rate_sign, jb_markup, trs_price, trs_discount, jb_serviceprice" . // " FROM costcenter, customer, job LEFT JOIN tourservice ON job.jb_id = tourservice.jb_id AND trs_srv_name = 'Grundpreis'" . // " WHERE job.csc_id_payer = costcenter.csc_id AND costcenter.cs_id = customer.cs_id AND cs_eid IN (" . getParameterValue("0", "JB_CR_PRICE_MINIMUM", "0") . ")" . // " AND csc_name = '- Ad hoc Pkw bis XL-Bus'" . // " AND jb_finishtime > '2020-08-10' AND jb_status = 2" . // " AND jb_storno IS NULL" . // " AND jb_export_time IS NULL" . // " AND ((trs_price IS NULL AND jb_fixprice = 0.0) OR jb_totalprice < (" . $jb_cr_price_minimum . " + trs_price * ((100 - trs_discount) / 100) + jb_serviceprice)) AND (jb_id_parent IS NULL OR jb_id_parent != - 1)"; //writeLog_("../log/check_jb_permanent_invtext_", $sqlquery); // $theTheResult = $db2->query($sqlquery); // if (DB::isError($theTheResult)) reportDie ("$PHP_SELF: '$sqlquery': " . $theTheResult->getMessage()); // while ($row = ($phpVersion >= "8.0" ? $theTheResult->fetch_assoc() : $theTheResult->fetchRow())): //writeLog_("../log/check_jb_permanent_invtext_", $row["jb_id"] . " erhält automatischen Unterauftrag"); // $tmp_add_jb_ids = ""; // $tmp_add_sids = $row["cr_sid"]; // $tmp_add_prices = sprintf("%01.2f", $jb_cr_price_minimum + $row["trs_price"] * ((100 - $row["trs_discount"]) / 100) + $row["jb_serviceprice"]); // saveJobChildren($row["jb_id"], // array("hq_id", $row["hq_id"], "vht_id", $row["vht_id"], "jb_payment", $row["jb_payment"], // "jb_status", "2", "jb_autoranking", "0", "jb_type", $row["jb_type"], "emp_id", $row["emp_id"], // "jb_postage", 0, "jb_invmode", $row["jb_invmode"], "jb_freetext_1", "", // "jb_sales_tax_rate", $row["jb_sales_tax_rate"], "jb_sales_tax_rate_sign", $row["jb_sales_tax_rate_sign"]), // $tmp_add_jb_ids, $tmp_add_sids, $tmp_add_prices, $row["jb_markup"], 0, 0); // $db->query("UPDATE job SET cr_sid = 'B1555', cr_id = 10857, cr_id_order = 10857 WHERE jb_id = " . $row["jb_id"]); // endwhile; // $theTheResult->free(); $sqlquery = "SELECT tr_id, tr_commission_no FROM job AS jb, tour AS tr WHERE jb.jb_id = tr.jb_id AND jb_status IN (8, 9) AND tr_commission_no LIKE '%\t%'"; writeLog_("../log/check_jb_permanent_invtext_", $sqlquery); $theTheResult = $db2->query($sqlquery); if (DB::isError($theTheResult)) reportDie ("$PHP_SELF: '$sqlquery': " . $theTheResult->getMessage()); while ($row = ($phpVersion >= "8.0" ? $theTheResult->fetch_assoc() : $theTheResult->fetchRow())): writeLog_("../log/check_jb_permanent_invtext_", "\$row['tr_id'] = " . $row["tr_id"] . ", \$tr_commission_no = '" . $row["tr_commission_no"] . "'"); $sqlquery = "UPDATE tour SET tr_commission_no = '" . str_replace("\t", " ", $row["tr_commission_no"]) . "', tr_modify = tr_modify WHERE tr_id = " . $row["tr_id"]; writeLog_("../log/check_jb_permanent_invtext_", "[" . $sqlquery . "]"); $db->query($sqlquery); endwhile; $theTheResult->free(); // BWV nachträgliche Preiskorrektur $currentTime = getDateTime("0"); $sqlquery = "SELECT jb_id, jb_finishtime, hq_id, cr_id, cr_sid, jb_cr_price, gdc_content AS jb_cr_price_retour FROM job AS jb, genericdatacontainer AS gdc" . " WHERE jb_id = gdc_obj_id AND gdc_obj_type = 'jb' AND gdc_gen_fieldname = 'jb_cr_price_retour' AND gdc_context = '' AND DATE_ADD(jb_finishtime, INTERVAL 60 MINUTE) <= '" . $currentTime . "'"; writeLog_("../log/check_jb_permanent_invtext_", $sqlquery); $theTheResult = $db2->query($sqlquery); if (DB::isError($theTheResult)) reportDie ("$PHP_SELF: '$sqlquery': " . $theTheResult->getMessage()); while ($row = $theTheResult->fetch_assoc()): writeLog_("../log/check_jb_permanent_invtext_", "\$row['jb_id'] = " . $row["jb_id"] . ", \$jb_finishtime = '" . $row["jb_finishtime"] . ", \$cr_id = '" . $row["cr_id"] . ", \$jb_cr_price_retour = '" . $row["jb_cr_price_retour"] . "'"); $jb_id_follow = $db->getOne("SELECT jb_id FROM job WHERE cr_id = " . $row["cr_id"] . " AND jb_longhaul = 1 AND jb_status = 1 AND jb_id != " . $row["jb_id"]); if ($jb_id_follow == "") { $jb_cr_price_retourArr = explode("|", $row["jb_cr_price_retour"]); $sqlquery = "UPDATE job SET jb_cr_price = " . $jb_cr_price_retourArr[0] . " WHERE jb_id = " . $row["jb_id"]; writeLog_("../log/check_jb_permanent_invtext_", "[" . $sqlquery . "]"); $db->query($sqlquery); $sqlquery = "UPDATE jobprice SET jbprc_price = " . $jb_cr_price_retourArr[1] . " WHERE jb_id = " . $row["jb_id"] . " AND mt_sort = 10"; writeLog_("../log/check_jb_permanent_invtext_", "[" . $sqlquery . "]"); $db->query($sqlquery); $gdc_context = "No follow-up"; $pda_changes_text .= "#" . $row["jb_id"] . ", Frachtvergütung alt " . str_replace(".", ",", sprintf("%01.2f", $row["jb_cr_price"])) . " EUR, neu " . str_replace(".", ",", sprintf("%01.2f", $jb_cr_price_retourArr[0])) . " EUR\n"; writeToLogDB("192",$row["hq_id"],$row["jb_id"],0,$row["cr_id"],$row["cr_sid"],"","\$jb_cr_price_old=" . $row["jb_cr_price"]); $pdaCommandExecTime = getdate(mktime(date("H"), date("i"), date("s") + 20, date("m"), date("d"), date("Y"))); $pdaCommandExecTimeMySQL = $pdaCommandExecTime['year'] . "-" . sprintf("%02d", $pdaCommandExecTime['mon']) . "-" . sprintf("%02d", $pdaCommandExecTime['mday']) . " " . sprintf("%02d", $pdaCommandExecTime['hours']) . ":" . sprintf("%02d", $pdaCommandExecTime['minutes']) . ":" . sprintf("%02d", $pdaCommandExecTime['seconds']); $pdaCommandExpireTimeFromNow = getdate(mktime(date("H") + 36, date("i"), date("s"), date("m"), date("d"), date("Y"))); $jb_ordertime_vals = getValsFromDate(getFieldValueFromId("job", "jb_id", $row["jb_id"], "jb_ordertime")); $pdaCommandExpireTimeFromOrdertime = getdate(mktime($jb_ordertime_vals[3] + 36, $jb_ordertime_vals[4], $jb_ordertime_vals[5], $jb_ordertime_vals[1], $jb_ordertime_vals[2], $jb_ordertime_vals[0])); if ($pdaCommandExpireTimeFromNow > $pdaCommandExpireTimeFromOrdertime): $pdaCommandExpireTime = $pdaCommandExpireTimeFromNow; else: $pdaCommandExpireTime = $pdaCommandExpireTimeFromOrdertime; endif; $pdaCommandExpireTimeMySQL = $pdaCommandExpireTime['year'] . "-" . sprintf("%02d", $pdaCommandExpireTime['mon']) . "-" . sprintf("%02d", $pdaCommandExpireTime['mday']) . " " . sprintf("%02d", $pdaCommandExpireTime['hours']) . ":" . sprintf("%02d", $pdaCommandExpireTime['minutes']) . ":" . sprintf("%02d", $pdaCommandExpireTime['seconds']); writeLog_("../log/check_jb_permanent_invtext_", $row["hq_id"] . ", " . $row["cr_id"] . ", " . "7" . ", " . "1" . ", " . $pda_changes_text . ", " . $pdaCommandExecTimeMySQL . ", " . $pdaCommandExpireTimeMySQL); insertPDACommand($row["hq_id"], $row["cr_id"], "7", "1", $pda_changes_text, $pdaCommandExecTimeMySQL, $pdaCommandExpireTimeMySQL); } else { $gdc_context = "Follow-up: " . $jb_id_follow; } $sqlquery = "UPDATE genericdatacontainer SET gdc_context = '" . $gdc_context . "|" . $currentTime . "' WHERE gdc_obj_type = 'jb' AND gdc_gen_fieldname = 'jb_cr_price_retour' AND gdc_obj_id = " . $row["jb_id"]; writeLog_("../log/check_jb_permanent_invtext_", "[" . $sqlquery . "]"); $db->query($sqlquery); endwhile; $theTheResult->free(); // /* // 835489 //STE900608 // //203463 //STHH927621 // //823978 //STF909226 // //819825 //STDD908923 // //833194 //STB975597 // 835016 //STS910215 // 832514 //STHB922142 // 819783 //STH910930 // 823862 //STE900608 // */ // foreach (array(835489, 835016, 832514, 819783, 823862) as $cs_id_tmp) { // $system_result = ""; // $cmd = "php ../tools/auto_response.php acapella7890 $cs_id_tmp >> ../log/auto_response.stdout+err 2>&1 &"; // $ausgabe = system($cmd, $system_result); // writeLog_("../log/check_jb_permanent_invtext_", "Calling auto_response.php $cs_id_tmp: ausgabe='$ausgabe'"); // } /******************************************************************************* abgeschaltet am 16.06.2010 // Und noch einer... // Alle erledigten und fertigen Aufträge von HTN40261 und HTN40260 in den benannten Zeiträumen automatisch auf unfertig setzen // Ab 21.10.2009 lauten die Kundennummern HTN40335 und HTN40336 $sqlquery = "SELECT jb_id FROM job WHERE hq_id = 110 AND jb_status = 2 AND jb_incomplete != 1 AND " . // "(csc_id_payer = 49135 OR csc_id_payer = 49136) AND (" . "(csc_id_payer = 50330 OR csc_id_payer = 50331) AND (" . // "(jb_finishtime > '2009-03-13 00:00:00' AND jb_finishtime < '2009-03-18 23:59:59' AND '$now' > '2009-03-13 00:00:00' AND '$now' < '2009-03-18 23:59:59') OR" . // "(jb_finishtime > '2009-04-15 00:00:00' AND jb_finishtime < '2009-04-20 23:59:59' AND '$now' > '2009-04-15 00:00:00' AND '$now' < '2009-04-20 23:59:59') OR" . // "(jb_finishtime > '2009-05-15 00:00:00' AND jb_finishtime < '2009-05-20 23:59:59' AND '$now' > '2009-05-15 00:00:00' AND '$now' < '2009-05-20 23:59:59') OR" . // "(jb_finishtime > '2009-06-15 00:00:00' AND jb_finishtime < '2009-06-18 23:59:59' AND '$now' > '2009-06-15 00:00:00' AND '$now' < '2009-06-18 23:59:59') OR" . // "(jb_finishtime > '2009-07-15 00:00:00' AND jb_finishtime < '2009-07-20 23:59:59' AND '$now' > '2009-07-15 00:00:00' AND '$now' < '2009-07-20 23:59:59') OR" . // "(jb_finishtime > '2009-08-13 00:00:00' AND jb_finishtime < '2009-08-19 23:59:59' AND '$now' > '2009-08-13 00:00:00' AND '$now' < '2009-08-19 23:59:59') OR" . // "(jb_finishtime > '2009-09-14 00:00:00' AND jb_finishtime < '2009-09-18 23:59:59' AND '$now' > '2009-09-14 00:00:00' AND '$now' < '2009-09-18 23:59:59') OR" . // "(jb_finishtime > '2009-10-14 00:00:00' AND jb_finishtime < '2009-10-20 23:59:59' AND '$now' > '2009-10-14 00:00:00' AND '$now' < '2009-10-20 23:59:59') OR" . // "(jb_finishtime > '2009-11-13 00:00:00' AND jb_finishtime < '2009-11-18 23:59:59' AND '$now' > '2009-11-13 00:00:00' AND '$now' < '2009-11-18 23:59:59') OR" . // "(jb_finishtime > '2009-12-14 00:00:00' AND jb_finishtime < '2009-12-18 23:59:59' AND '$now' > '2009-12-14 00:00:00' AND '$now' < '2009-12-18 23:59:59') OR" . // "(jb_finishtime > '2010-01-15 00:00:00' AND jb_finishtime < '2010-01-18 23:59:59' AND '$now' > '2010-01-15 00:00:00' AND '$now' < '2010-01-18 23:59:59') OR" . // "(jb_finishtime > '2010-02-15 00:00:00' AND jb_finishtime < '2010-02-18 23:59:59' AND '$now' > '2010-02-15 00:00:00' AND '$now' < '2010-02-18 23:59:59') OR" . // "(jb_finishtime > '2010-03-15 00:00:00' AND jb_finishtime < '2010-03-18 23:59:59' AND '$now' > '2010-03-15 00:00:00' AND '$now' < '2010-03-18 23:59:59') OR" . // "(jb_finishtime > '2010-04-15 00:00:00' AND jb_finishtime < '2010-04-19 23:59:59' AND '$now' > '2010-04-15 00:00:00' AND '$now' < '2010-04-19 23:59:59') OR" . // "(jb_finishtime > '2010-05-14 00:00:00' AND jb_finishtime < '2010-05-18 23:59:59' AND '$now' > '2010-05-14 00:00:00' AND '$now' < '2010-05-18 23:59:59') OR" . // "(jb_finishtime > '2010-06-15 00:00:00' AND jb_finishtime < '2010-06-18 23:59:59' AND '$now' > '2010-06-15 00:00:00' AND '$now' < '2010-06-18 23:59:59') OR" . "(jb_finishtime > '2010-07-15 00:00:00' AND jb_finishtime < '2010-07-19 23:59:59' AND '$now' > '2010-07-15 00:00:00' AND '$now' < '2010-07-19 23:59:59') OR" . "(jb_finishtime > '2010-08-13 00:00:00' AND jb_finishtime < '2010-08-18 23:59:59' AND '$now' > '2010-08-13 00:00:00' AND '$now' < '2010-08-18 23:59:59') OR" . "(jb_finishtime > '2010-09-15 00:00:00' AND jb_finishtime < '2010-09-19 23:59:59' AND '$now' > '2010-09-15 00:00:00' AND '$now' < '2010-09-19 23:59:59') OR" . "(jb_finishtime > '2010-10-15 00:00:00' AND jb_finishtime < '2010-10-19 23:59:59' AND '$now' > '2010-10-15 00:00:00' AND '$now' < '2010-10-19 23:59:59') OR" . "(jb_finishtime > '2010-11-15 00:00:00' AND jb_finishtime < '2010-11-18 23:59:59' AND '$now' > '2010-11-15 00:00:00' AND '$now' < '2010-11-18 23:59:59') OR" . "(jb_finishtime > '2010-12-15 00:00:00' AND jb_finishtime < '2010-12-19 23:59:59' AND '$now' > '2010-12-15 00:00:00' AND '$now' < '2010-12-19 23:59:59'))"; $theTheTheResult = $db2->query($sqlquery); if (DB::isError($theTheTheResult)) reportDie ("$PHP_SELF: '$sqlquery': " . $theTheTheResult->getMessage()); while ($row = ($phpVersion >= "8.0" ? $theTheTheResult->fetch_assoc() : $theTheTheResult->fetchRow())): $sqlquery = "UPDATE job SET jb_incomplete = 1 WHERE jb_id = '" . $row["jb_id"] . "'"; $theTheTheresult = $db->query($sqlquery); if (DB::isError($theTheTheresult)) reportDie ("$PHP_SELF: '$sqlquery': " . $theTheTheresult->getMessage()); endwhile; $theTheTheResult->free(); *******************************************************************************/ // Set execution time for keepalive // updateStmt("keepalive", "ka_process", "standing_orders", array("ka_lastexecutiontime", getDateTime("0")),""); // 500 Sekunden warten... // sleep(500); endwhile; // Endless loop } else { /* Abfrage nach dauerhafter Änderung nicht, wenn keine echte Änderung */ /* Bei Storno ib_id_copy_permanent berücksichtigen wg. Löschen der Dauerauftragsregel */ /* Manuelle / automatische Vermittlung berücksichtigen*/ // $jb_id angegeben -> expliziter Aufruf $jb_ids = array($jb_id); $jb_multi = "0"; if (isset($argv[2])) $jb_multi = $argv[2]; $jb_multi_factor = 1; if (isset($argv[3])) $jb_multi_factor = $argv[3]; //echo $jb_id . ", " . $jb_multi . ", " . $jb_multi_factor . "\n"; if ($jb_multi_factor > 0) { if (isset($argv[4])) { $cr_id_orders = array_filter(explode(",", $argv[4])); } if (isset($cr_id_orders[0]) && $cr_id_orders[0] != "") { $cr_id_check_jb_permanent = getFieldValueFromId("couriervehicle", "crvh_sid", $cr_id_orders[0], "cr_id"); updateStmt("job", "jb_id", $jb_id, array("cr_id_permanent", $cr_id_orders[0], "cr_sid", $cr_id_orders[0], "cr_id_order", $cr_id_check_jb_permanent, "cr_id", $cr_id_check_jb_permanent)); } for ($i_multi = 2; $i_multi <= $jb_multi_factor; $i_multi++) { //echo "\$jb_multi_factor=" . $jb_multi_factor . ", " . "\$i_multi=" . $i_multi . "\n"; $hq_id = $db->getOne("SELECT hq_id FROM job WHERE jb_id = " . $jb_id); initJobList(); $check_jb_permanent_flag = true; $_get_tr_commission_no = true; if (getParameterValue("0", "MASK_STANDING_KEEP_COMMISSION", $hq_id) != "1") $_get_tr_commission_no = false; //echo "vor get_saved_tour.php\n"; include("../jobs/get_saved_tour.php"); //echo "nach get_saved_tour.php\n"; $jobListOri = $jobList; // jetzt wird das Senden eines jobs "simuliert", // woraufhin der Auftrag neu gespeichert wird $toursubmit = "Senden"; // Senden simulieren $csc_id_orderer = '0'; // Zentralenmodus $getPriceOnly = 0; // Keine Nur-Preisabfrage $jb_id_ori_copy = $jb_id; // jetzt neuer Auftrag $jb_id = ""; // jetzt neuer Auftrag // Als emp_id (eingebender Mitarbeiter) wird 0 eingetragen, // da niemand angemeldet ist // Natürlich kein neuer Multi-Auftrag $jb_multi_ori = $jb_multi; $jb_multi = "0"; $jb_multi_factor_ori = $jb_multi_factor; $jb_multi_factor = "1"; //echo "vor job_options.php\n"; $cr_id_order = ""; // Müll entfernen include("../jobs/job_options.php"); //echo "nach job_options.php\n"; $jb_multi = $jb_multi_ori; $jb_multi_factor = $jb_multi_factor_ori; updateStmt("job", "jb_id", $jb_id, array("jb_status", $db->getOne("SELECT jb_status FROM job WHERE jb_id = " . $jb_id_ori_copy))); if (isset($cr_id_orders[$i_multi - 1]) && $cr_id_orders[$i_multi - 1] != "") { $cr_sid_check_jb_permanent = $cr_id_orders[$i_multi - 1]; $cr_id_check_jb_permanent = getFieldValueFromId("couriervehicle", "crvh_sid", $cr_sid_check_jb_permanent, "cr_id"); updateStmt("job", "jb_id", $jb_id, array("cr_id_permanent", $cr_sid_check_jb_permanent, "cr_sid", $cr_sid_check_jb_permanent, "cr_id_order", $cr_id_check_jb_permanent, "cr_id", $cr_id_check_jb_permanent)); } if ($jb_multi == "1") updateStmt("job", "jb_id", $jb_id, array("jb_id_copy_permanent", $jb_id_ori_copy)); $jb_ids[] = $jb_id; // jetzt neuer Auftrag $jb_id = $jb_id_ori_copy; // jetzt neuer Auftrag } } //print_r($jb_ids); //echo "\$jb_multi = " . $jb_multi . "\n"; if ($jb_multi == "1") { // Nur den angegebenen Auftrag verarzten if (($jb_id_new = copy_job($jb_ids[0], $db->getOne("SELECT jb_finishtime FROM job WHERE jb_id = " . $jb_ids[0]), $db->getOne("SELECT hq_id FROM job WHERE jb_id = " . $jb_ids[0]))) != 0) { $cmd = "php ../jobs/check_jb_permanent.php " . $jb_id_new . " " . $jb_multi . " " . $jb_multi_factor . " " . $argv[4] . " >> " . "../log/check_jb_permanent_multi_" . date("Ym") . ".log" . " 2>&1 &"; echo $cmd . "\n"; exec($cmd); } } } function copy_job($jb_id, $jb_finishtime, $hq_id_job = 0 /*, $jb_ordertime_override = "0000-00-00 00:00:00" */) { global $db, $jobList, $ph, $hq_id, $no_continuation_list, $ph, $jb_multi, $jb_multi_factor, $jb_hiddenFreetext_1, $phpVersion, $db_geo; if ($hq_id_job != 0) $hq_id = $hq_id_job; $ph = getPublicHolidays(getDateTime("year"), "1", "0"); // writeLog_("../log/check_jb_permanent_standing_", "Duplicating job " . $jb_id . ", finishtime " . $jb_finishtime); // echo $jb_id . "
\n"; initJobList(); $check_jb_permanent_flag = true; $_get_tr_commission_no = true; if (getParameterValue("0", "MASK_STANDING_KEEP_COMMISSION", $hq_id) != "1") $_get_tr_commission_no = false; // Wenn dieser Dauerauftrag temporär geändert worden war, dann gibt es einen Vorgänger, der den ungeänderten Dauerauftrag enthält und // statt des geänderten als Vorlage genommen werden soll $jb_id_permanent_pre1 = $db->getOne("SELECT gdc_content FROM genericdatacontainer WHERE gdc_obj_type = 'jb' AND gdc_obj_id = " . $jb_id . " AND gdc_gen_fieldname = 'jb_id_permanent_pre'"); $jb_id_copy_real = $jb_id; if ($jb_id_permanent_pre1 != ""): writeLog_("../log/check_jb_permanent_standing_", "temporary change was made in " . $jb_id . ", so instead predecessor " . $jb_id_permanent_pre1 . " is taken as source for continuation"); $jb_id = $jb_id_permanent_pre1; endif; //writeLog_("../log/check_jb_permanent_standing_", "vor get_saved_tour"); include("../jobs/get_saved_tour.php"); //writeLog_("../log/check_jb_permanent_standing_", "nach get_saved_tour"); $jb_id = $jb_id_copy_real; if ($jb_id_permanent_pre1 != ""): list($jahr, $monat, $tag, $stunde, $minute) = getValsFromDate($db->getOne("SELECT jb_ordertime FROM job WHERE jb_id = " . $jb_id)); //writeLog_("../log/check_jb_permanent_standing_", "$jahr, $monat, $tag, $stunde, $minute " . $db->getOne("SELECT jb_ordertime FROM job WHERE jb_id = " . $jb_id)); endif; // Auftragsnummern der Unteraufträge entfernen: Kinderaufträge werden neu angelegt (d.h. kopiert) $tmp_add_jb_ids = ""; // Daten der Unteraufträge entfernen: Unteraufträge verschwinden in der Kopie $tmp_add_sids = ""; $tmp_add_prices = ""; //echo "$jb_id, $csc_id, $vht_id, $jb_weight, $jb_ordertime, $jb_reserv, 3, $vht_id, " . // "$cr_id_order, $jb_waitstorno, $jb_waittime, $jb_fixprice, $csc_id_payer \n"; //echo "'$jobList'\n"; //echo "'$jb_discount'" . " " . "'$jb_discount_rate'"; // 14.10.2015 Aufgrund von unaufgeklärten Doppelverlängerungen wird hier noch einmal extra auf jb_id_copy_permanent abgefragt $jb_id_copy_permanent = $db->getOne("SELECT jb_id_copy_permanent FROM job WHERE jb_id = '$jb_id'"); if ($jb_id_copy_permanent != "") writeLog_("../log/check_jb_permanent_standing_", "jb_id = $jb_id is not continued because a successor already exists: jb_id_copy_permanent = $jb_id_copy_permanent"); // Ist aktueller Job ein Dauerauftrag? if ((in_array($jb_permanent, array(4, 5, 6, 7, 8, 9, 10, 11)) || (in_array($jb_permanent, array(1, 2, 3)) && $jb_permanent2 != "0000000")) && $jb_id_copy_permanent == "") { //echo "$jb_id '$jb_permanent'\n"; // gültiger Dauerauftragsparameter vorhanden writeLog_("../log/check_jb_permanent_standing_", "* Continuing: jb_id = $jb_id, jb_permanent = $jb_permanent, jb_finishtime = $jb_finishtime, jb_ordertime = $jahr-$monat-$tag $stunde:$minute:00, jb_permanent2 = $jb_permanent2, jp_permenddat = $jp_permenddat, CSC_ID_PAYER_CASH = " . CSC_ID_PAYER_CASH . ", \$CSC_ID_PAYER_CASH_VAR = " . $CSC_ID_PAYER_CASH_VAR); // Auswertung des Dauerauftrags-Parameters: // Neuberechnung des Reservierungsdatums (benötigen Kalenderfunktionen) // if ($jb_ordertime_override != "0000-00-00 00:00:00") // list($jahr, $monat, $tag, $stunde, $minute) = getValsFromDate($jb_ordertime_override); //// STB975496 Lichtenberger Fleisch- und Wurstproduktion auch an Feiertagen! // if ($cs_id == 834928) // $ph = array(); // Ab 21.10.2019: Seit jb_permanent = 9 (feiertags) darf $ph natürlich nicht mehr zurückgesetzt werden! // if ($cs_id == 305826): // STB916864 St. Hedwig Kliniken Berlin GmbH _nur_ an Feiertagen, Samstagen und Sonntagen // $ph_new = array(); // Ab 19.12.2018: Keine Feiertage mehr für STB916864 // // Neuer Kalender ab heute bis zum Ende nächsten Jahres mit allen Werktagen // for ($i = 1; $tmp_timestamp < mktime(0, 0, 0, 12, 31, date("Y") + 1); $i++): // $tmp_timestamp = mktime(0, 0, 0, date("m"), date("d") + $i, date("Y")); // if (!isPublicHoliday(date("Y", $tmp_timestamp), date("m", $tmp_timestamp), date("d", $tmp_timestamp)) && date("w", $tmp_timestamp) != 6 && date("w", $tmp_timestamp) != 0) // $ph_new[] = array(date("Y", $tmp_timestamp), date("m", $tmp_timestamp), date("d", $tmp_timestamp)); // endfor; // $ph = $ph_new; // endif; $tempDate = getNextOrderDate($jahr, $monat, $tag, $jb_permanent, $jb_permanent2, true); $jb_ordertime_old = ""; // Alten Tag, Monat, Jahr für log_file speichern // Überprüfen, ob der Dauerauftrag nicht schon an seinem Enddatum angekomen ist! list($endejahr, $endemonat, $endetag, $dummy1, $dummy2, $dummy3) = getValsFromDate($jp_permenddat); if (mktime(0, 0, 0, $tempDate[1], $tempDate[2], $tempDate[0]) < mktime($dummy1, $dummy2, $dummy3, $endemonat, $endetag, $endejahr) || trim($jp_permenddat) == "") { $jobListOri = $jobList; $jahr = $tempDate[0]; // ermittelten Tag, Monat, Jahr setzen $monat = sprintf("%02d", $tempDate[1]); $tag = sprintf("%02d", $tempDate[2]); $cr_id_order = $cr_id_permanent; // Kurier löschen bzw. usrsprünglichen Wunschkurier wieder einstellen // jb_status wird daher = 9 gesetzt (kein Kurier eingetragen) //echo "$jahr.$monat.$tag
"; // Treibstoffzuschlag updaten // Neu ab 23.01.2024: Manuelle TSZs entfernen wird jetzt in get_saved_tour gemacht und nicht mehr hier $jb_markup_man = $db->getOne("SELECT jbprc_price FROM jobprice WHERE jb_id = " . $jb_id . " AND mt_sort = 8"); $cs_id = $db->getOne("SELECT cs_id FROM costcenter WHERE csc_id = " . $csc_id_payer); if ($jb_markup_man == "") writeLog_("../log/check_jb_permanent_standing_", "Manual markup will be updated: " . "\$jb_id (old) = " . $jb_id . ", \$jb_markup_man = " . $jb_markup_man . ", \$job_csc_id_payer = " . $job_csc_id_payer . ", (\$csc_id_payer = " . $csc_id_payer . "), \$cs_id_payer = " . $cs_id_payer . ", (\$cs_id = " . $cs_id . "), \$vht_id = " . $vht_id . ", \$srvt_name = " . $srvt_name . ", \$jb_markup = " . $jb_markup); // if (getParameterValue("0", "MASK_CHECK_MARKUP_PERMANENT", $hq_id) == "1"): // $jb_markup_old = getFieldValueFromId("job", "jb_id", $jb_id, "jb_markup"); //// if ($jb_markup_old == 0): // $job_csc_id_payer = getFieldValueFromId("job", "jb_id", $jb_id, "csc_id_payer"); // $cs_id_payer = getFieldValueFromId("costcenter", "csc_id", $job_csc_id_payer, "cs_id"); // $vht_id = getFieldValueFromId("job", "jb_id", $jb_id, "vht_id"); // $srvt_name = $db->getOne("SELECT mt_value FROM metatype WHERE mt_sort = '" . $vht_id . "' AND mt_type = 'vehicletype'"); // $jb_markup = getFuelMarkup($srvt_name, $cs_id_payer, $hq_id, "$jahr-$monat-$tag $stunde:$minute:00"); // writeLog_("../log/check_jb_permanent_standing_", "Markup updated: " . "\$jb_id (old) = " . $jb_id . ", \$jb_markup_old = " . $jb_markup_old . ", \$job_csc_id_payer = " . $job_csc_id_payer . // ", (\$csc_id_payer = " . $csc_id_payer . "), \$cs_id_payer = " . $cs_id_payer . ", (\$cs_id = " . $cs_id . "), \$vht_id = " . $vht_id . ", \$srvt_name = " . $srvt_name . ", \$jb_markup = " . $jb_markup); //// endif; // endif; // 31.05.2025 PZM-Preis? if ($jb_fixprice == 0 && $db->getOne("SELECT cs_invmode FROM customer WHERE cs_id = " . $cs_id) == 0) { $addr_params = ""; $sqlquery = "SELECT tr_hsno, ad_zipcode, ad_city, ad_street, ad_country FROM tour AS tr, address AS ad WHERE jb_id = " . $jb_id . " AND tr.ad_id = ad.ad_id ORDER BY tr_sort"; $res = $db->query($sqlquery); if (DB::isError($res)) die ("$PHP_SELF: '$sqlquery': " . $res->getMessage()); while ($row = ($phpVersion >= "8.0" ? $res->fetch_assoc() : $res->fetchRow())): if ($row['ad_country'] == "" || $row['ad_country'] == "D") $row['ad_country'] = "DE"; $addr_params .= ($addr_params != "" ? "|" : "") . urlencode($row['ad_street']) . ";" . urlencode($row['tr_hsno']) . ";" . urlencode($row['ad_zipcode']) . ";" . urlencode($row['ad_city']) . ";" . urlencode($row['ad_country']); endwhile; $res->free(); $params = "hq_id=" . $hq_id . "&cs_id=" . $cs_id . "&vht_id=" . $vht_id . "&jb_markup=&jb_ordertime=" . urlencode("$jahr-$monat-$tag $stunde:$minute:00") ."&mode=zone&a=" . $addr_params; //echo "https://bwv-test.assecutor.de/include/ajaxReqKmPrice.php?" . $params;die(); $result = file_get_contents("https://bwv-test.assecutor.de/include/ajaxReqKmPrice.php?" . $params); writeLog_("../log/check_jb_permanent_standing_", "PZM-Preis will be updated: \$params = " . $params); writeLog_("../log/check_jb_permanent_standing_", "PZM-Preis will be updated: \$result = " . $result); eval("$" . $result); if ($retValue[0] != "ERROR") { $jb_fixprice = $retValue[5]; $jb_cr_price = $retValue[6]; $km_price_params = $retValue[2] . "|" . $retValue[3] . "|" . $retValue[4] . "|" . $retValue[7] . "|" . $retValue[8]; } } // jetzt wird das Senden eines jobs mit dem neuen Datum "simuliert", // woraufhin der Auftrag neu gespeichert wird $toursubmit = "Senden"; // Senden simulieren $csc_id_orderer = '0'; // Zentralenmodus $getPriceOnly = 0; // Keine Nur-Preisabfrage $jb_id_ori = $jb_id; $jb_id = ""; // jetzt neuer Auftrag // Als emp_id (eingebender Mitarbeiter) wird 0 eingetragen, // da niemand angemeldet ist if ($hq_id == 1 || $hq_id == 9) // nur Stadtbote Bremen und ab 26.06.2018 auch München $jb_globaljob = 0; // darf natürlich niemals an alle Kuriere gehen!!! $jb_status_manual = 0; // manuelle Vermittlung ja/nein abhängig von hq_id! if (getParameterValue("0", "MASK_MANUAL_DISPOSITION", $db->getOne("SELECT hq_id FROM job WHERE jb_id = '$jb_id_ori'")) == "1"): $jb_status_manual = 1; endif; // 28.11.2022: Wenn `Manuelle Disposition´ geklickt, dann soll das übernommen werden if ($db->getOne("SELECT jb_id FROM phoenix_log.log WHERE jb_id = " . $jb_id_ori . " AND logo_id IN (1, 25) AND logo_description LIKE '%Manuelle Disposition%'") == $jb_id_ori) $jb_status_manual = 1; // Natürlich kein neuer Multi-Auftrag $jb_multi_ori = $jb_multi; $jb_multi = "0"; $jb_multi_factor_ori = $jb_multi_factor; $jb_multi_factor = 1; // Auftragsherkunft ist natürlich "Dauerauftrag" $jb_origin = 5; include("../jobs/job_options.php"); $jb_multi_factor = $jb_multi_factor_ori; $jb_multi = $jb_multi_ori; if ($jb_multi == "1"): updateStmt("job", "jb_id", $jb_id, array("jb_status", $db->getOne("SELECT jb_status FROM job WHERE jb_id = " . $jb_id_ori))); endif; $jb_tourname = getFieldValueFromId("job", "jb_id", $jb_id_ori, "jb_tourname"); updateStmt("job", "jb_id", $jb_id_ori, array("jb_id_copy", $jb_id, "jb_id_copy_permanent", $jb_id, "jb_tourname", NULL)); updateStmt("job", "jb_id", $jb_id, array("cr_id_permanent", $cr_id_permanent, "jb_tourname", $jb_tourname)); if (trim("$cr_id_permanent") != "" && trim("$cr_id_permanent") != "0") updateStmt("job", "jb_id", $jb_id, array("cr_sid", $cr_id_permanent)); // überprüfen, ob sich die tx_id nicht zwischenzeitlich geändert hat... $cmp_tx_id = $db->getOne("SELECT cmp.tx_id FROM company AS cmp, customer AS cs WHERE cs.hq_id = '$hq_id' AND cmp.cmp_id = cs.cmp_id AND cs.cs_id = $csc_id_payer"); if ($cmp_tx_id > 0): //echo "SELECT cmp.tx_id FROM company AS cmp, customer AS cs WHERE cs.hq_id = '$hq_id' AND cmp.cmp_id = cs.cmp_id AND cs.cs_id = $csc_id_payer"; //echo "csc_id_payer: '$csc_id_payer'"; //echo "cmp_tx_id: '$cmp_tx_id'"; //echo "jb_sales_tax_rate: " . $db->getOne("SELECT tx_value FROM tax WHERE tx_id = '$cmp_tx_id'"); //echo "jb_sales_tax_rate_sign: " . $db->getOne("SELECT tx_sign FROM tax WHERE tx_id = '$cmp_tx_id'"); updateStmt("job", "jb_id", $jb_id, array("jb_sales_tax_rate", $db->getOne("SELECT tx_value FROM tax WHERE tx_id = '$cmp_tx_id'"), "jb_sales_tax_rate_sign", $db->getOne("SELECT tx_sign FROM tax WHERE tx_id = '$cmp_tx_id'"))); endif; // // evtl. vorhandene Kommissionsnummern entfernen!!! // // (nat. nur wenn so gewünscht...) // if (getParameterValue("0", "MASK_STANDING_KEEP_COMMISSION", $hq_id) != "1"): // $sqlquery = "UPDATE tour SET tr_commission_no = '' WHERE jb_id = " . $jb_id; // $res = $db->query($sqlquery); // if (DB::isError($res)) // reportDie ("$PHP_SELF: '$sqlquery' : " . $res->getMessage()); // endif; if ($cs_id == 18260 && $hq_id == 109): // HTM18156 $max_tour = $db->getOne("SELECT MAX(tr_sort) FROM tour WHERE jb_id = '$jb_id'"); if ($max_tour >= 16): for ($i = 2; $i <= $max_tour; $i++): updateStmt("tour", "jb_id", $jb_id, array("ad_id", 3209, "csc_id", 44549, "tr_comp", ($i - 1), "tr_comp2", NULL, "tr_hsno", ".", "tr_remark", "", "tr_person", "", "tr_phone", ""), "tr_sort=" . $i); endfor; endif; endif; writeLog_("../log/check_jb_permanent_standing_", "Continuation: jb_id = $jb_id, jb_permanent = $jb_permanent, jb_ordertime = $jb_ordertime, jb_permanent2 = $jb_permanent2, jp_permenddat = $jp_permenddat, cr_id_permanent = [$cr_id_permanent], hq_id = [$hq_id],MASK_STANDING_KEEP_COMMISSION = [" . getParameterValue("0", "MASK_STANDING_KEEP_COMMISSION", $hq_id) . "], " . ", MASK_COURIER_IMMEDIATE = [" . getParameterValue("0", "MASK_COURIER_IMMEDIATE", $hq_id) . "]: $statusMessageTxt"); return $jb_id; } else { $no_continuation_list[] = $jb_id; writeLog_("../log/check_jb_permanent_standing_", "NO CONTINUATION (finishdate reached): jb_id = $jb_id, jb_permanent = $jb_permanent, jb_permanent2 = $jb_permanent2, jp_permenddat = $jp_permenddat, jb_ordertime = $jb_ordertime: $statusMessageTxt"); } } else { $no_continuation_list[] = $jb_id; } return 0; } //function delCmd() { // $fileHandle = @fopen("../log/call_check_jb_permanent.cmd", 'w'); // @fclose($fileHandle); // return; //} //function writeCmd($jb_id) { // $fileHandle = @fopen("../log/call_check_jb_permanent.cmd", 'a'); // @fwrite($fileHandle, "call check_jb_permanent.cmd " . $jb_id . "\n"); // @fclose($fileHandle); // return; //} function initJobList() { global $jobList; $tmpJobList = array(); $tmpJobListJoin = array(); for ($i = 0; $i < 6; $i++): $tmpJobList[$i] = array(); for ($j = 0; $j < 9; $j++) $tmpJobList[$i][$j] = ""; $tmpJobListJoin[$i] = implode("²", $tmpJobList[$i]); endfor; $jobList = implode("¹", $tmpJobListJoin); } // Funktion wird in get_saved_tour.php benötigt function setJobList($tourNo, $fldNo, $newVal) { global $jobList; //echo "$tourNo, $fldNo, $newVal
\n"; $tmpJobListJoin = explode("¹", $jobList); $tmpJobList = explode("²", $tmpJobListJoin[$tourNo - 1]); $tmpJobList[$fldNo] = $newVal; $tmpJobListJoin[$tourNo - 1] = implode("²", $tmpJobList); $jobList = implode("¹", $tmpJobListJoin); } function is3rdOr4thWorkDay($whichone) { global $ph; $jb_permanent = 1; $jb_permanent2 = "1111100"; $ph = array(); // muss leer sein für getNextOrderDate() $tempDate = array(date("Y"), date("n"), date("j")); writeLog_("../log/check_jb_permanent_invtext_", "\$today = " . weekDayNameMapping(date("l")) . ", " . $tempDate[2] . "." . $tempDate[1] . "." . $tempDate[0]); $tempDate[1] -= 1; do { $lastUltimo = mktime(0, 0, 0, $tempDate[1] + 1, 0, $tempDate[0]); $tempDate = array(date("Y", $lastUltimo), date("n", $lastUltimo), date("j", $lastUltimo)); writeLog_("../log/check_jb_permanent_invtext_", "\$lastUltimo = " . weekDayNameMapping(date("l", mktime(0, 0, 0, $tempDate[1], $tempDate[2], $tempDate[0]))) . ", " . $tempDate[2] . "." . $tempDate[1] . "." . $tempDate[0]); for($i = 0; $i <= $whichone - 1; $i++) { $tempDate = getNextOrderDate($tempDate[0], $tempDate[1], $tempDate[2], $jb_permanent, $jb_permanent2); while (feiertag($tempDate[0], $tempDate[1], $tempDate[2])) $tempDate = getNextOrderDate($tempDate[0], $tempDate[1], $tempDate[2], $jb_permanent, $jb_permanent2); } } while (mktime(23, 59, 59, $tempDate[1], $tempDate[2], $tempDate[0]) < time()); writeLog_("../log/check_jb_permanent_invtext_", "\$is3rdOr4thWorkDay(". $whichone .") = " . weekDayNameMapping(date("l", mktime(0, 0, 0, $tempDate[1], $tempDate[2], $tempDate[0]))) . ", " . $tempDate[2] . "." . $tempDate[1] . "." . $tempDate[0]); if ($tempDate[0] == date("Y") && $tempDate[1] == date("n") && $tempDate[2] == date("j")) writeLog_("../log/check_jb_permanent_invtext_", "Heute ist der " . $whichone . ". Werktag des Monats!"); return ($tempDate[0] == date("Y") && $tempDate[1] == date("n") && $tempDate[2] == date("j")); } ?>