function processXMLFile($xml_file)
{
    global $timestamp, $logger;
    $xmlt = new xml_tools();
    $xml = $xmlt->loadFile($xml_file);
    $order_date = $timestamp;
    $segments_id = (int) $xml->LOCAL_INFO->SEGMENT_ID;
    $group_name = (string) $xml->LOCAL_INFO->GROUP_NAME;
    $refill_orders = $xml->REFILL_ORDERS->ORDER;
    $counter = 0;
    foreach ($refill_orders as $ro) {
        $products_id = (int) $ro->PRODUCTS_ID;
        $articles_id = (int) $ro->ARTICLES_ID;
        $products_ean = $ro->PRODUCTS_EAN;
        $quantity = (int) $ro->QUANTITY;
        $trans_type = (string) (strtoupper($ro->TRANS_TYPE) == 'NULL' ? '' : $ro->TRANS_TYPE);
        $trans_id = (int) $ro->TRANS_ID;
        //CREATE DEPOT ORDERS
        $q_check = "SELECT depot_orders_id FROM depot_orders " . " WHERE segments_id = {$segments_id}" . " AND trans_type = '' AND trans_id = {$trans_id}";
        $r_check = tep_db_query($q_check);
        //ONLY CREATE ORDER WHICH NOT IMPORTED
        if (tep_db_num_rows($r_check) == 0) {
            $class_do = new depot_orders();
            $class_do->newOrder($segments_id, $products_id, $articles_id, $products_ean, $quantity, $order_date, $trans_type, $trans_id, $group_name);
            $counter++;
        }
    }
    $logger->write("{$counter} orders imported");
    unlink($xml_file);
    $logger->write("xml deleted");
    return $counter;
}
require_once '../functions-xml.php';
require_once DIR_WS_FUNCTIONS . 'html_output.php';
tep_db_connect();
use_class('logger');
$logger = new logger('cron', 'tradebyte-orders-downloader');
use_class('Order');
use_class('tradebyte');
use_class('xml_tools');
use_class('products_ean');
use_class('jng_sp');
use_class('jng_sp_download');
use_class('jng_sp_orders');
use_class('jng_sp_customers');
use_class('logger');
$tb = new tradebyte();
$xmlt = new xml_tools();
$class_ean = new products_ean();
$class_sp = new jng_sp();
$class_jd = new jng_sp_download();
$class_jo = new jng_sp_orders();
$class_jcust = new jng_sp_customers();
$zade_prepayment_need_refreshed = false;
function logThis($logdata)
{
    global $logger;
    $logger->write($logdata);
    echo "{$logdata}<br />\n";
}
/////////////////////////////
// STEP 1: DOWNLOAD ORDERS //
/////////////////////////////
<?php

global $db;
require_once '../confy.php';
require_once '../functions.php';
require_once '../functions-2.php';
require_once DIR_WS_FUNCTIONS . 'html_output.php';
tep_db_connect();
use_class('xml_tools');
$xmlt = new xml_tools();
$otto_local_path = 'D:/Data Dewa/Data Kantor/Bonofactum/otto/';
$tb_local_path = 'D:/Data Dewa/Data Kantor/Bonofactum/Tradebyte/';
$exchange_local_open_folder = EXCHANGE_LOCAL_OPEN_PATH;
$exchange_local_arch_folder = EXCHANGE_LOCAL_ARCHIVE_PATH;
$exchange_central_open_folder = EXCHANGE_CENTRAL_OPEN_PATH;
$exchange_central_arch_folder = EXCHANGE_CENTRAL_ARCHIVE_PATH;
$xmlfiles[] = $exchange_local_arch_folder . '2015/DEPOT_REFILL_LOCAL_ID_20150129_161425.xml';
//CAT
foreach ($xmlfiles as $xmlfile) {
    echo "<h3>{$xmlfile}</h3>";
    $xml = $xmlt->loadFile($xmlfile);
    $orders = $xml->REFILL_ORDERS->ORDER;
    echo "<table>";
    echo "<tr>";
    echo "<th>No</th>";
    echo "<th>Products ID</th>";
    echo "<th>EAN</th>";
    echo "<th>Quantity</th>";
    echo "</tr>";
    foreach ($orders as $o) {
        $counter++;
        tep_db_query($q);
    } else {
        //now we should give tradebyte server some time to process it
        if ($hour >= $config_upload_hour && $hour < $config_upload_wait_until) {
            $logger->write('Skip upload so tradebyte has enough time to' . ' process last full upload');
            $logger->close();
            die('Skipped!');
        }
    }
}
$reported_products = array();
//GET ALL PRODUCTS STOCK CONNECTED TO TRADEBYTE AND FLAG AS NEED STOCK UPDATE
$q = "SELECT ps.products_id, ps.articles_id" . ", ps.stock, ps.booking_active, p.products_model, p.active_status" . ", IFNULL(pa.active_status, p.active_status) AS article_status" . ", IF(ps.articles_id=0, pnc.products_length, pa.length) AS length" . ", jc.jng_sp_id, jc.active_status AS catalog_status" . ", jc.price, jc.price_old" . " FROM products_stock ps" . " INNER JOIN jng_sp_catalog jc" . " ON jc.jng_sp_id in ({$sp_use_tb_ids_filter})" . " AND jc.products_id=ps.products_id" . " INNER JOIN products p ON p.products_id=ps.products_id" . " LEFT JOIN products_non_configurator pnc" . " ON pnc.products_id=ps.products_id" . " LEFT JOIN products_articles pa" . " ON pa.products_articles_id=ps.articles_id" . " WHERE p.tb_status IN (1, 2, 3) AND ps.tb_need_update = 1" . " ORDER BY ps.products_id, ps.articles_id";
$dbq = tep_db_query($q);
if (tep_db_num_rows($dbq) > 0) {
    $xmlt = new xml_tools('1.0', 'UTF-8');
    $xml_articledata = $xmlt->drawTag($xmlt, 'ARTICLEDATA');
    $pri_data = array();
    while ($p = tep_db_fetch_array($dbq)) {
        $pid = $p['products_id'];
        $aid = $p['articles_id'];
        $a_nr = getANR($p['products_model'], $p['length']);
        //ACTIVE STATUS
        if ($p['active_status'] == '0' || $p['article_status'] == '0') {
            //Set inactive if either product / article is killed
            $active_status = '0';
        } else {
            //Otherwise use catalog active status
            $active_status = $p['catalog_status'];
        }
        if (!isset($pri_data[$a_nr])) {
    //RETURNS
    $returns_data = $class_jo->getUnconfirmedReturns($jng_sp_id);
    if (count($returns_data['orders']) > 0) {
        $data[$jng_sp_id]['R'] = $returns_data;
    }
    //REMOVE SP IF NO CONFIRMATION IS NEEDED
    if (count($data[$jng_sp_id]) == 0) {
        unset($data[$jng_sp_id]);
    }
}
$messages_list_added = false;
$items_confirmed = array();
$orders_canceled = array();
if (count($data) > 0) {
    //START PREPARING XML MESSAGE
    $xmlt = new xml_tools('1.0', 'UTF-8');
    foreach ($data as $jng_sp_id => $messages_types) {
        $jng_sp_name = $sp_detail[$jng_sp_id]['name'];
        $jng_sp_tb_channel = strtoupper($sp_detail[$jng_sp_id]['tb_channel']);
        foreach ($messages_types as $msg_type => $data_sp) {
            $orders = $data_sp['orders'];
            if (count($orders > 0)) {
                if (!$messages_list_added) {
                    //MESSAGES_LIST
                    $xml_messages_list = $xmlt->drawTag($xmlt, 'MESSAGES_LIST');
                    $messages_list_added = true;
                }
                //ORDERS
                foreach ($orders as $counter => $o) {
                    //ITEMS
                    $items = $data_sp['items'][$o['jng_sp_orders_id']];
use_class('Product');
use_class('bins');
$logger = new logger('cron', 'depot-refill-local-xml-generator');
$class_do = new depot_orders();
$class_bins = new bins();
$today_datetime = date('Y-m-d H:i:s');
$today = date('Y-m-d', strtotime($today_datetime));
$country_name = getCountryName($server_local_code);
$logger->write("PREPARE XML DEPOT REFILL - START");
//GET TODAYS DEPOT REFILL CREATED
$q = "SELECT * FROM depot_orders" . " WHERE segments_id = {$segment_id_default} " . " AND trans_type = 'AR' AND trans_id = " . depot_orders::AUTO_REFILL_ID_DAILYCRON . " AND order_date >= '{$today} 00:00:00' AND order_date <= '{$today} 23:59:59'";
$r = tep_db_query($q);
if (tep_db_num_rows($r) > 0) {
    $segment = $class_bins->retrieveSegmentDetail($segment_id_default);
    //PREPARE FOR CREATE XML DEPOT REFILL LOCAL
    $xmlt = new xml_tools('1.0', 'UTF-8');
    //DEPOT_REFILL_LOCAL
    $depot_refill_local = $xmlt->drawTag($xmlt, 'DEPOT_REFILL_LOCAL');
    //LOCAL_INFO
    $local_info = $xmlt->drawTag($depot_refill_local, 'LOCAL_INFO');
    $xmlt->drawTag($local_info, 'SEGMENT_ID', $segment_id_default);
    $xmlt->drawTag($local_info, 'CREATED_DATE', date('Y-m-d H:i:s'));
    $group_name = "Manobo Local Orders ({$country_name})";
    $xmlt->drawTag($local_info, 'GROUP_NAME', $group_name);
    //REFILL_ORDERS
    $refill_orders = $xmlt->drawTag($depot_refill_local, 'REFILL_ORDERS');
    $counter = 0;
    while ($row = tep_db_fetch_array($r)) {
        $products_id = $row['products_id'];
        $obj_product = new Product($products_id);
        //Take only product which "category top" same with "category top" of segment used
    } else {
        $query .= " tb_status IN (2, 3)";
    }
}
$query .= " GROUP BY family_id";
$dbq = tep_db_query($query);
$messages = array();
$products_uploaded = array();
$images_uploaded = array();
$last_active_status_need_update = array();
$invalid_family_messages = array();
$total_family = 0;
$total_family_uploaded = 0;
//STARTING CAT PROCESS
if (tep_db_num_rows($dbq) > 0) {
    $xmlt = new xml_tools('1.0', 'UTF-8');
    //TBCATALOG
    $xml_tbcatalog = $xmlt->drawTag($xmlt, 'TBCATALOG', '', array('version' => '1.2', 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', 'xsi:noNamespaceSchemaLocation' => 'http://api.trade-server.net/' . 'schema/all_in_one/tb-cat_1_2_import.xsd'));
    //SUPPLIER
    $xml_supplier = $xmlt->drawTag($xml_tbcatalog, 'SUPPLIER');
    $xmlt->drawTag($xml_supplier, 'NAME', JNG_ADDRESS_NAME);
    $xmlt->drawTag($xml_supplier, 'CONTACT', EMAIL_NAME_PETERN);
    $xmlt->drawTag($xml_supplier, 'STREET', JNG_ADDRESS_STREET);
    $xmlt->drawTag($xml_supplier, 'ZIP', JNG_ADDRESS_ZIPCODE);
    $xmlt->drawTag($xml_supplier, 'CITY', JNG_ADDRESS_CITY);
    $xmlt->drawTag($xml_supplier, 'PHONE', JNG_PHONENO_INT);
    $xmlt->drawTag($xml_supplier, 'EMAIL', EMAIL_ADDERSS_TECHNICAL);
    //PRODUCTDATA
    $xml_productdata = $xmlt->drawTag($xml_tbcatalog, 'PRODUCTDATA');
    //LOOPING FOR FAMILY THAT NEED UPLOAD/REUPLOAD TO TB
    $tb_sp_ids = array();