596 lines
26 KiB
PHP
596 lines
26 KiB
PHP
<?php
|
|
//die();
|
|
// NEXT und TIMED zusammenfassen
|
|
$cur_date = date("Y-m-d H:i:s");
|
|
//$cur_date = "2012-12-03 15:02:27";
|
|
define("LOG_NAME", "edi_iftmin");
|
|
//include_once("../include/email/htmlMimeMail.php");
|
|
$hq_id = 0;
|
|
include_once("../tools/edi.inc.php");
|
|
$action = "down";
|
|
include_once("../tools/edi_ftp.inc.php");
|
|
|
|
//$edi_files = array(
|
|
// "1363784696860_1025836987287.tmp"
|
|
//);
|
|
|
|
writeLog("edi_files = " . var_export($edi_files, true));
|
|
//die();
|
|
|
|
$IFTMIN = array(
|
|
array("anxs:interchange.header", "edi_message", "em_unb", "", "INTERCHANGE HEADER"),
|
|
array("anxs:message.header", "edi_message", "em_unh", "", "MESSAGE HEADER"),
|
|
array("trsd:beginning.of.message", "edi_message", "em_bgm", "", "BEGINNING OF MESSAGE"),
|
|
array("trsd:date.time.period", "edi_message", "em_dtm1", "", "Manifest Processing Date/Time"),
|
|
array("trsd:date.time.period", "edi_message", "em_dtm2", "", "Shipment Date"),
|
|
array("trsd:transport.service.requirements", "edi_message", "em_tsr", "", "TRANSPORT SERVICE REQUIREMENTS"),
|
|
array("trsd:currencies", "edi_message", "em_cux", "", "CURRENCIES"),
|
|
array("trsd:free.text", "edi_message", "em_ftx", "", "Manifest Instructions"),
|
|
array("trsd:control.total", "edi_message", "em_cnt1", "", "Total Line Items"),
|
|
array("trsd:control.total", "edi_message", "em_cnt2", "", "Total Gross Weight"),
|
|
array("trsd:control.total", "edi_message", "em_cnt3", "", "Total Quantity"),
|
|
array("trsd:control.total", "edi_message", "em_cnt4", "", "Total Amount"),
|
|
array("trsd:terms.of.delivery.or.transport", "edi_message", "em_tod", "", "TERMS OF DELIVERY OR TRANSPORT"),
|
|
array("trsd:place.location.identification", "edi_message", "em_loc", "", "Origin"),
|
|
array("trsd:reference", "edi_message", "em_rff1", "", "Carrier SCAC Code"),
|
|
array("trsd:reference", "edi_message", "em_rff2", "", "REFERENCE"),
|
|
array("trsd:reference", "edi_message", "em_rff3", "", "Commercial Invoice Number"),
|
|
array("trsd:reference", "edi_message", "em_rff4", "", "Reference1"),
|
|
array("trsd:reference", "edi_message", "em_rff5", "", "Reference2"),
|
|
array("trsd:name.and.address", "edi_message", "em_nad1", "", "Shipper Name and Address"),
|
|
array("trsd:name.and.address", "edi_message", "em_nad2", "", "NAME AND ADDRESS"),
|
|
array("trsd:contact.information", "edi_message", "em_cta", "", "CONTACT INFORMATION"),
|
|
array("trsd:communication.contact", "edi_message", "em_com", "", "COMMUNICATION CONTACT"),
|
|
array("trsd:reference", "edi_message", "em_rff6", "", "Amazon Tax ID"),
|
|
array("trsd:goods.item.details", "edi_consignee", "ec_gid", "", "GOODS ITEM DETAILS"),
|
|
array("trsd:transport.movement.details", "edi_consignee", "ec_tmd", "", "TRANSPORT MOVEMENT DETAILS"),
|
|
array("trsd:place.location.identification", "edi_consignee", "ec_loc1", "", "PLACE/LOCATION IDENTIFICATION"),
|
|
array("trsd:place.location.identification", "edi_consignee", "ec_loc2", "", "PLACE/LOCATION IDENTIFICATION"),
|
|
array("trsd:place.location.identification", "edi_consignee", "ec_loc3", "", "PLACE/LOCATION IDENTIFICATION"),
|
|
array("trsd:monetary.amount", "edi_consignee", "ec_moa1", "", "Amazon Freight Cost"),
|
|
array("trsd:monetary.amount", "edi_consignee", "ec_moa2", "", "CIF Value"),
|
|
array("trsd:monetary.amount", "edi_consignee", "ec_moa3", "", "Value of Goods"),
|
|
array("trsd:monetary.amount", "edi_consignee", "ec_moa4", "", "Consignee Freight Charge"),
|
|
array("trsd:monetary.amount", "edi_consignee", "ec_moa5", "", "Consignee Gift Wrap Charge"),
|
|
array("trsd:monetary.amount", "edi_consignee", "ec_moa6", "", "Insurance"),
|
|
array("trsd:monetary.amount", "edi_consignee", "ec_moa7", "", "COD Charge"),
|
|
array("trsd:monetary.amount", "edi_consignee", "ec_moa8", "", "Other Invoice Amounts"),
|
|
array("trsd:free.text", "edi_consignee", "ec_ftx1", "", "Freight Terms"),
|
|
array("trsd:free.text", "edi_consignee", "ec_ftx2", "", "Reason For Export"),
|
|
array("trsd:name.and.address", "edi_consignee", "ec_nad", "", "Consignee Name and Address"),
|
|
array("trsd:measurements", "edi_consignee", "ec_mea1", "", "Gross Weight"),
|
|
array("trsd:measurements", "edi_consignee", "ec_mea2", "", "Chargeable Weight"),
|
|
array("trsd:dimensions", "edi_consignee", "ec_dim", "", "DIMENSIONS"),
|
|
array("trsd:reference", "edi_consignee", "ec_rff1", "", "Bill of Lading"),
|
|
array("trsd:date.time.period", "edi_consignee", "ec_dtm", "", "DATE/TIME/PERIOD"),
|
|
array("trsd:reference", "edi_consignee", "ec_rff2", "", "Bill of Lading"),
|
|
array("trsd:reference", "edi_consignee", "ec_rff3", "", "Master Bill of Lading"),
|
|
array("trsd:reference", "edi_consignee", "ec_rff4", "", "Bill of Lading"),
|
|
array("trsd:package.identification", "edi_package", "ep_pci", "", "PACKAGE IDENTIFICATION"),
|
|
array("trsd:reference", "edi_package", "ep_rff", "", "REFERENCE"),
|
|
array("anxs:message.trailer", "edi_message", "em_unt", "", "MESSAGE TRAILER"),
|
|
array("anxs:interchange.trailer", "edi_message", "em_unz", "", "INTERCHANGE")
|
|
);
|
|
|
|
define("CONSIGNEE_START", 24);
|
|
define("CONSIGNEE_TYPE", 25);
|
|
define("CONSIGNEE_AMOUNT", 29);
|
|
define("CONSIGNEE_ADDRESS", 39);
|
|
define("CONSIGNEE_WEIGHT", 40);
|
|
define("CONSIGNEE_INVNO", 43);
|
|
define("CONSIGNEE_TRACK_ID", 45);
|
|
define("CONSIGNEE_PHONE", 46);
|
|
define("CONSIGNEE_END", 47);
|
|
define("PACKAGE_START", 48);
|
|
define("PACKAGE_VEN_NO", 49);
|
|
define("PACKAGE_END", 49);
|
|
|
|
define("MAX_TR_SORT", 99999);
|
|
|
|
$jb_id_lineA = array(
|
|
"ST010" => 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] .= "</$name>\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 <admin@assecutor.de>");
|
|
$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;
|
|
}
|
|
|
|
?>
|