12806260, // "ST020" => 12806260, // "ST030" => 12806260, "ST040" => 12805634, "STH01" => 12806264, "STH04" => 12805632, "STL01" => 12806268, "STE01" => 12806267, "STE04" => 12806262, "STE05" => 12806265 ); $tr_sortA = array( 'STBX_SAME' => 2, 'STBX_TIMED' => 2, 'STBX_NEXT' => 2 ); $hq_prefixes = array( "ST0" => 11, "STS" => 11, "STH" => 4, "STL" => 8, "STE" => 7 ); $track_idA = array(); $jb_id_line = 0; $prefix = ""; //if (!isset($argv[1]) || $argv[1] == ""): // die("missing parameter\n"); //else: // foreach ($edi_files AS $edi_file) { writeLog("processing " . $edi_file); $level = 0; $cnt = -1; $curelem = ""; $cdatabuf = ""; $curtext = ""; $em_msg_id = ""; $ec_inv_no = ""; $ec_weight = ""; $ec_amount = ""; $ec_type = ""; $ec_type_real = ""; $track_id = ""; $ad_street = ""; $ad_zipcode = ""; $ad_city = ""; $ad_country = ""; $tr_hsno = ""; $tr_comp = ""; $tr_person1 = ""; $tr_person = ""; $tr_phone = ""; $ep_ven_no = ""; $xml_contents = edi2xml("../temp/edifact/" . $edi_file); if ($xml_contents != "error") { $parser = xml_parser_create('UTF-8'); xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'iso-8859-1'); xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 0); xml_set_element_handler($parser, "startElement", "endElement"); xml_set_character_data_handler($parser, "cdata"); xml_set_default_handler ($parser, "defHandler"); xml_parse($parser, $xml_contents); xml_parser_free($parser); writeToDB("edi_message", $fields = "em_msg_id", $values = "'" . $em_msg_id . "'"); } // print_r($IFTMIN); // } // Aufträge in Scanliste wieder sichtbar machen foreach($jb_idA[$hq_id] AS $type => $jb_id_tmp) { if ($tr_sortA[$type] > 2): $dummy = file ("http://www.assecutor.de/stadtbote/tools/check_address.php?jb_id=$jb_id_tmp&hq_id=$hq_id&remote_addr=212.79.60.67"); sort_zipcode($jb_id_tmp, $hq_id); exec_query("UPDATE phoenix.job SET jb_status = 999 WHERE jb_id = " . $jb_id_tmp, 0); else: exec_query("UPDATE phoenix.job SET jb_status = 998 WHERE jb_id = " . $jb_id_tmp, 0); endif; } exec_query("UPDATE phoenix.job SET jb_ordertime = '" . date("Y") . "-01-01 01:01:01' WHERE jb_id IN " . $jb_id_sql[$hq_id], 0); // Gewichte- und Volumenmail senden exec_query("UPDATE phoenix.job SET jb_version = jb_version - 1 WHERE jb_id = " . $jb_idA[$hq_id]['STBX_NEXT'], 1); $row = get_first_row("SELECT jb_version FROM phoenix.job WHERE jb_id = " . $jb_idA[$hq_id]['STBX_NEXT']); writeLog("jb_version = " . $row[0]); if ($row[0] == 0) send_csv_mail($jb_idA[$hq_id]['STBX_NEXT']); // Alte Tracking-IDs in Sendungsverfolgung löschen $prefix_add = ""; if ($prefix == "ST0"): $prefix = "ST"; $prefix_add = "0"; endif; $prefixes = array( $prefix . "01" . $prefix_add => "", $prefix . "02" . $prefix_add => "", $prefix . "03" . $prefix_add => "" ); foreach ($prefixes AS $prefix => $val) { $row = get_first_row("SELECT MIN(trat_serialno) FROM phoenix.tourarticle where left(trat_serialno, 5) = '$prefix' AND trat_modify > '" . date("Y-m-d H:i:s", mktime(0, 0, 0, date("m") - 3, date("d") + 1, date("Y"))) . "' AND CHAR_LENGTH(trat_serialno) = 13 AND tr_sort = 1 AND jb_id NOT IN " . $jb_id_sql[$hq_id], 1); $prefixes[$prefix] = $row[0]; } $dbhost = "172.16.0.111:3711"; mysql_connect($dbhost, $dblogin, $dbpassword) or die (mysql_error()); mysql_select_db("meta_object") or die (mysql_error()); mysql_query('SET NAMES latin1') or die ('SET NAMES latin1' . ": " . mysql_error()); foreach ($prefixes AS $prefix => $val) { $sqlquery = "DELETE FROM metaobject WHERE mo_obj_type = 'track' AND LEFT(mo_value, 5) = '$prefix' AND mo_value < '$val'"; writeLog($sqlquery); mysql_query($sqlquery) or die ($sqlquery . ": " . mysql_error()); } // Neue Tracking-IDs in Hash-Tabelle eintragen if (count ($track_idA) > 0): writeLog("writing tracking ids to '$dbhost'"); foreach ($track_idA AS $track_id) { // writeLog("writing tracking id '$track_id' to '$dbhost'"); $sql_query = "INSERT INTO metaobject (mo_id_ref_db, mo_name, mo_obj_type, mo_obj_id, mo_hash, mo_value) VALUES (1, '', 'track', 0, '$track_id', '$track_id')"; mysql_query($sql_query) or die ($sql_query . ": " . mysql_error()); } endif; mysql_close(); writeLog("import for hq_id = '$hq_id' successful"); //endif; function initImport($track_id) { global $hq_id, $hq_prefixes, $prefix, $jb_id_sql, $jb_idA, $tr_sortA, $jb_id_line, $jb_id_lineA, $zipcodes, $mysql_db; $prefix = substr($track_id, 0, 3); if (array_key_exists($prefix, $hq_prefixes)): $hq_id = $hq_prefixes[$prefix]; writeLog("hq_id = '$hq_id' derived from track_id = '$track_id'"); else: writeLog("irregular value in first three digits in beginning of tracking-id: '" . $prefix . "'"); die(); endif; exec_query("UPDATE phoenix.job SET jb_version = jb_version + 1 WHERE jb_id = " . $jb_idA[$hq_id]['STBX_NEXT'], 1); // Warten, falls ein anderer Import gerade läuft (Amazon liefert manchmal in mehreren Schüben schnell hintereinander) do { $row1 = get_first_row ("SELECT jb_status FROM phoenix.job WHERE jb_id = " . $jb_idA[$hq_id]['STBX_NEXT']); if ($row1[0] == 997): writeLog("waiting for running 'edi_iftmin.php' to terminate..."); sleep(10); // wait 10 seconds... endif; } while ($row1[0] == 997); exec_query("UPDATE phoenix.job SET jb_status = 997 WHERE jb_id IN " . $jb_id_sql[$hq_id] . " AND jb_status != 997", 0); // // Linienauftrag des heutigen Tages finden (ist als Dauerauftrag bereits vorhanden) // $sql_query = "SELECT jb_id FROM phoenix.job WHERE csc_id_payer = " . $csc_id_lineA[$hq_id] . " AND LEFT(jb_ordertime, 10) = '" . date("Y-m-d") . "' AND jb_storno IS NULL AND jb_permanent = 2 AND hq_id = $hq_id"; // $res = mysql_query($sql_query, $mysql_db) or die ($sql_query . ": " . mysql_error($mysql_db)); ////writeLog("[$sql_query]"); $jb_id_line = $jb_id_lineA[substr($track_id, 0, 5)]; // if ($row = mysql_fetch_row($res)): // $jb_id_line = $row[0]; // writeLog("found line haul order: jb_id_line = '$jb_id_line'"); // else: // writeLog("line haul order not found: [$sql_query]"); // endif; // mysql_free_result($res); // Bereits bestehende Aufträge finden (Amazon liefert manchmal in mehreren Schüben) $sql_query = "SELECT job.jb_id, MAX(tr_sort) FROM phoenix.job, phoenix.tour WHERE job.jb_id IN " . $jb_id_sql[$hq_id] . " AND job.jb_id = tour.jb_id GROUP BY job.jb_id"; $res = mysql_query($sql_query, $mysql_db) or die ($sql_query . ": " . mysql_error($mysql_db)); while ($row = mysql_fetch_row($res)): foreach ($jb_idA[$hq_id] AS $type => $jb_id_tmp){ if ($jb_id_tmp == $row[0]): $tr_sortA[$type] = $row[1] + 1; endif; } endwhile; mysql_free_result($res); } /** * Quelle: http://reeg.junetz.de/DSP/node31.html * * @param parser Object Parserobjekt * @param name string Name des öffnenden Elements * @param atts array Array mit Attributen */ function startElement($parser, $name, $atts) { global $cnt, $level, $curelem, $IFTMIN; $att_str = ""; foreach($atts AS $key => $att) { $att_str .= " " . $key . "=" . "\"" . $att . "\""; } $curelem = $name; if ($level++ == 1): if ($name != $IFTMIN[++$cnt][0]): if ($name == $IFTMIN[CONSIGNEE_START][0]): $cnt = CONSIGNEE_START; elseif ($name == $IFTMIN[PACKAGE_START][0]): $cnt = PACKAGE_START; else: writeLog("illegal tagname found: <$name>, expected: <" . $IFTMIN[$cnt][0] . ">"); endif; endif; $IFTMIN[$cnt][3] .= "<$name" . "$att_str>\n"; elseif ($level > 2): for ($i = 2; $i < $level; $i++) $IFTMIN[$cnt][3] .= " "; $IFTMIN[$cnt][3] .= "<$name" . "$att_str>\n"; endif; } /** * Quelle: http://reeg.junetz.de/DSP/node31.html * * @param parser Object Parserobjekt * @param name string Name des schließenden Elements */ function endElement($parser, $name) { global $level, $curtext, $curelem, $cdatabuf, $IFTMIN, $cnt, $em_msg_id, $ec_inv_no, $ep_ven_no, $track_id, $cnt, $ad_street, $ad_zipcode, $ad_city, $ad_country, $tr_sortA, $tr_hsno, $tr_comp, $tr_person1, $tr_person, $tr_phone, $ec_weight, $ec_amount, $ec_type, $ec_type_real, $jb_id_line, $track_idA, $jb_idA, $hq_id, $cur_date, $mysql_db; if ($cdatabuf != ""): for ($i = 2; $i < $level; $i++) $IFTMIN[$cnt][3] .= " "; $IFTMIN[$cnt][3] .= " " . $cdatabuf . "\n"; $cdatabuf = ""; endif; if ($level > 1): for ($i = 2; $i < $level; $i++) $IFTMIN[$cnt][3] .= " "; $IFTMIN[$cnt][3] .= "\n"; endif; if ($curelem == "tred:document.message.number") $em_msg_id = $curtext; if ($curelem == "tred:movement.type" && $cnt == CONSIGNEE_TYPE): $ec_type = $curtext; if ($ec_type == "STBX_TIMED") $ec_type = "STBX_NEXT"; $ec_type_real = $curtext; endif; if ($curelem == "tred:reference.number" && $cnt == CONSIGNEE_INVNO) $ec_inv_no = $curtext; if ($curelem == "tred:reference.number" && $cnt == CONSIGNEE_TRACK_ID) $track_id = $curtext; if ($curelem == "tred:reference.number" && $cnt == CONSIGNEE_PHONE) $tr_phone = $curtext; if ($curelem == "tred:reference.number" && $cnt == PACKAGE_VEN_NO) $ep_ven_no = $curtext; if ($curelem == "tred:name.and.address.line" && $cnt == CONSIGNEE_ADDRESS) $tr_comp = $curtext; if ($curelem == "tred:street.and.number.p.o.box" && $cnt == CONSIGNEE_ADDRESS): if ($tr_person1 == ""): $tr_person1 = $curtext; else: $tr_person = $tr_person1; endif; $ad_street_parts = explode(" ", str_replace(" /", "/", str_replace("/ ", "/", $curtext))); // echo $curtext . "\n"; // echo $tr_person . "\n"; // print_r($ad_street_parts); // Besonderheit Amazon: Wiederholung der kompletten Straßenangabe in der Hausnummer if (count($ad_street_parts) > 1): if ($ad_street_parts[count($ad_street_parts) - 1] == $ad_street_parts[count($ad_street_parts) - 2]): $ad_street_parts[count($ad_street_parts) - 1] = ""; endif; endif; $ad_street_parts = explode(" ", str_replace(" ", " ", str_replace(".", ". ", trim(implode(" ", $ad_street_parts))))); // print_r($ad_street_parts); $ad_street = $ad_street_parts[0]; $tr_hsno = ""; if (count($ad_street_parts) > 1): $tr_hsno = $ad_street_parts[1]; if (count($ad_street_parts) > 2): if (strlen($ad_street_parts[count($ad_street_parts) - 1]) == 1): if (ord(strtoupper($ad_street_parts[count($ad_street_parts) - 1])) >= ord("A") && ord(strtoupper($ad_street_parts[count($ad_street_parts) - 1])) <= ord("Z")): $tr_hsno = $ad_street_parts[count($ad_street_parts) - 2] . " " . $ad_street_parts[count($ad_street_parts) - 1]; for ($k = 1; $k < count($ad_street_parts) - 2; $k++) $ad_street .= " " . $ad_street_parts[$k]; else: for ($k = 1; $k < count($ad_street_parts) - 1; $k++) $ad_street .= " " . $ad_street_parts[$k]; $tr_hsno = $ad_street_parts[count($ad_street_parts) - 1]; endif; else: for ($k = 1; $k < count($ad_street_parts) - 1; $k++) $ad_street .= " " . $ad_street_parts[$k]; $tr_hsno = $ad_street_parts[count($ad_street_parts) - 1]; endif; endif; endif; endif; if ($curelem == "tred:city.name" && $cnt == CONSIGNEE_ADDRESS) $ad_city = $curtext; if ($curelem == "tred:postcode.identification" && $cnt == CONSIGNEE_ADDRESS) $ad_zipcode = $curtext; if ($curelem == "tred:country.coded" && $cnt == CONSIGNEE_ADDRESS) $ad_country = $curtext; if ($curelem == "tred:measurement.value" && $cnt == CONSIGNEE_WEIGHT) $ec_weight = $curtext; if ($curelem == "tred:monetary.amount" && $cnt == CONSIGNEE_AMOUNT) $ec_amount = str_replace(",", ".", $curtext); if ($name == "trsd:reference" && $cnt == CONSIGNEE_END): if ($hq_id == 0) initImport($track_id); writeLog("importing track_id: trat_serialno = '$track_id'"); writeToDB("edi_consignee", $fields = "ec_inv_no,em_msg_id,ec_track_id,ec_type,ec_weight,ec_amount", $values = "'" . $ec_inv_no . "','" . $em_msg_id . "','" . $track_id . "','" . $ec_type_real . "','" . $ec_weight . "','" . $ec_amount . "'"); writeToDB("edi_status", $fields = "ec_track_id,es_msg_no,es_ic_ref,es_date,es_status", $values = "'" . $track_id . "','0','0','" . $cur_date . "','0'"); // Tracking-ID für Websiten-tracking merken $track_idA[] = $track_id; // Station für end customer Auftrag, mit track_id in tr_remark $jb_id_tmp = $jb_idA[$hq_id][$ec_type]; write_tour($ad_street, $ad_zipcode, $ad_city, $ad_country, $jb_id_tmp, $tr_sortA[$ec_type], $tr_hsno, $tr_comp, $tr_person, $tr_phone, $ec_type_real, '#CHECK:' . $track_id . '#\n#CHECKSCND:' . substr($track_id, -6, 4) . '#', "1"); $tr_id = mysql_insert_id($mysql_db); // tourarticle für Abholung in Niederlassung // writeLog("writing article: jb_id = '$jb_id_tmp', tr_sort = '1', trat_serialno = '$track_id'"); exec_query("INSERT INTO phoenix.tourarticle (tr_id, jb_id, tr_sort, trat_serialno) VALUES (0, $jb_id_tmp, 1, '$track_id')"); // tourarticle für end customer station // writeLog("writing article: jb_id = '$jb_id_tmp', tr_sort = '" . $tr_sortA[$ec_type] . "', trat_serialno = '$track_id'"); exec_query("INSERT INTO phoenix.tourarticle (tr_id, jb_id, tr_sort, trat_serialno) VALUES ($tr_id, $jb_id_tmp, " . $tr_sortA[$ec_type]++ . ", '$track_id')"); // tourarticle für Linienauftrag Abholung // writeLog("writing article: jb_id = '" . $jb_id_line . "', tr_sort = '1', trat_serialno = '$track_id'"); exec_query("INSERT INTO phoenix.tourarticle (tr_id, jb_id, tr_sort, trat_serialno) VALUES (0, $jb_id_line, 1, '$track_id')"); $trat_id = mysql_insert_id($mysql_db); // tourarticleprocess für Linienauftrag Abholung: event 101 (paperwork received) exec_query("INSERT INTO phoenix.tourarticleprocess (trat_id, tratp_type, tratp_state, tratp_remark, tratp_createtime) VALUES ($trat_id, '101', 1, '', '" . $cur_date . "')"); // writeLog("writing event: trat_id = '$trat_id', tratp_type = '101', tratp_createtime = '" . $cur_date . "', tratp_remark = ''"); // tourarticle für Linienauftrag Anlieferung // writeLog("writing article: jb_id = '" . $jb_id_line . "', tr_sort = '2', trat_serialno = '$track_id'"); // exec_query("INSERT INTO phoenix.tourarticle (jb_id, tr_sort, trat_serialno) VALUES ($jb_id_line, 2, '$track_id')"); // writeToLogDB("55",$hq_id,$jbIdNew,$usr_id,$tour["f_jb_cr_id"],$tour["f_jb_cr_sid"],$csId, "Import Tourenplanung"); // $ec_inv_no = ""; $ec_weight = ""; $ec_amount = ""; $ec_type = ""; $ec_type_real = ""; $track_id = ""; $ad_street = ""; $ad_zipcode = ""; $ad_city = ""; $ad_country = ""; $tr_hsno = ""; $tr_comp = ""; $tr_person1 = ""; $tr_person = ""; $tr_phone = ""; endif; if ($name == "trsd:reference" && $cnt == PACKAGE_END) writeToDB("edi_package", $fields = "ep_ven_no,ec_inv_no", $values = "'" . $ep_ven_no . "','" . $ec_inv_no . "'"); $curtext = ""; $level--; $curelem = ""; } /** * Quelle: http://reeg.junetz.de/DSP/node31.html * * @param parser Object Parserobjekt * @param text string Der Text */ function cdata($parser, $text) { global $cdatabuf, $curtext, $curelem; $curtext .= $text; // if ($cdatabuf == ""): // $cdatabuf = "[$curelem]\n$text"; // else: $cdatabuf .= "$text"; // endif; } function defHandler($parser, $data) { // echo "defHandler: '$data'\n"; } function edi2xml($edifilename) { $path_parts = pathinfo($edifilename); $xmlfilename = $path_parts["dirname"] . "/" . str_replace("." . $path_parts["extension"], "", $path_parts["basename"]) . ".xml"; $system_result = ""; $cmd = "edi2xml $edifilename > $xmlfilename 2>&1"; $ausgabe = system($cmd, $system_result); writeLog("creating xml from edi: '$cmd', result = '$ausgabe', system_result = '$system_result'"); if ($system_result != 0) { writeLog("an error occured: \$system_result is different from '0', a mail will be sent to "); $mailObj = new htmlMimeMail(); $mailObj->setFrom("support@assecutor.de"); $mailObj->setSubject("error in calling edi2xml"); $mailObj->setText( "'" . $cmd . "' returned a value different from '0': \$system_result = '$system_result'"); $mailResult = $mailObj->send("admin@assecutor.de", 'smtp'); return "error"; } $srcFile = fopen($xmlfilename, "r"); $contents = str_replace(chr(2), "??", fread($srcFile, filesize($xmlfilename))); fclose($srcFile); //echo $contents; die(); return $contents; // return xml2array($contents); } function write_tour($ad_street, $ad_zipcode, $ad_city, $ad_country, $jb_id, $tr_sort, $tr_hsno, $tr_comp, $tr_person, $tr_phone, $tr_comp2, $tr_remark, $tr_ware_from_to) { global $zipcodes, $hq_id, $csc_id_externA; $tr_cs_freetext = ""; $ad_zipcode = substr(trim($ad_zipcode), -5, 5); if (in_array($ad_zipcode, array_keys($zipcodes)) && $tr_sort > 1) $tr_cs_freetext = $zipcodes[$ad_zipcode]; if ($tr_comp2 == "STBX_SAME" && $tr_sort > 1 && !($hq_id == 8)) $tr_cs_freetext = $zipcodes["STBX_SAME"]; $ad_id = insertAddress($ad_street, $ad_zipcode, $ad_city, $ad_country); exec_query("INSERT INTO phoenix.tour (jb_id, tr_sort, ad_id, tr_hsno, csc_id, tr_status, tr_comp, tr_comp2, tr_person, tr_phone, tr_remark, tr_ware_from_to, tr_mediationarea_id, tr_cs_freetext) VALUES (" . "$jb_id, $tr_sort, $ad_id, '$tr_hsno', " . $csc_id_externA[$hq_id] . ", 0, '" . my_str_check_edi($tr_comp) . "', '$tr_comp2', '" . my_str_check_edi($tr_person) . "', '" . my_str_check_edi($tr_phone) . "', '" . my_str_check_edi($tr_remark) . "', 0, 0, '$tr_cs_freetext')"); writeLog("creating tourstop: jb_id = '$jb_id', tr_sort = '$tr_sort'"); } function writeToDB($table, $fields, $values) { global $IFTMIN; for ($i = 0; $i < count($IFTMIN); $i++): if ($IFTMIN[$i][1] == $table): $IFTMIN[$i][3] = $IFTMIN[$i][3]; if ($fields != "") $fields .= ","; if ($values != "") $values .= ","; $fields .= $IFTMIN[$i][2]; if ($IFTMIN[$i][0] == "trsd:name.and.address"): $values .= "'" . insertNAD(my_str_check_edi($IFTMIN[$i][3])) . "'"; else: $values .= "'" . my_str_check_edi($IFTMIN[$i][3]) . "'"; endif; $IFTMIN[$i][3] = ""; endif; endfor; exec_query("INSERT INTO $table ($fields) VALUES ($values)"); } function insertNAD($nad) { global $mysql_db; $sqlStmt = "SELECT en_id FROM edi_nad WHERE en_nad = '$nad'"; $res = mysql_query($sqlStmt, $mysql_db) or die ($sqlStmt . ": " . mysql_error($mysql_db)); if ($row = mysql_fetch_array($res, MYSQL_ASSOC)): $en_id = $row["en_id"]; else: exec_query("INSERT INTO edi_nad (en_nad) VALUES ('$nad')"); $en_id = mysql_insert_id($mysql_db); endif; mysql_free_result($res); return $en_id; } function insertAddress($ad_street, $ad_zipcode, $ad_city, $ad_country) { global $mysql_db; $ad_street = my_str_check_edi($ad_street); $ad_zipcode = my_str_check_edi($ad_zipcode); $ad_city = my_str_check_edi($ad_city); $ad_country = my_str_check_edi($ad_country); $sqlStmt = "SELECT ad_id FROM phoenix.address WHERE ad_street = '$ad_street' " . "AND ad_zipcode = '$ad_zipcode' AND ad_city = '$ad_city' AND ad_country = '$ad_country'"; $res = mysql_query($sqlStmt, $mysql_db) or die ($sqlStmt . ": " . mysql_error($mysql_db)); if ($row = mysql_fetch_array($res, MYSQL_ASSOC)): $ad_id = $row["ad_id"]; else: exec_query("INSERT INTO phoenix.address (ad_street, ad_zipcode, ad_city, ad_country) VALUES ('$ad_street', '$ad_zipcode', '$ad_city', '$ad_country')"); // $ad_id = mysql_query("SELECT LAST_INSERT_ID()"); $ad_id = mysql_insert_id($mysql_db); endif; mysql_free_result($res); return $ad_id; } ?>