function OpenCartToWeberpSync($ShowMessages, $db, $db_oc, $oc_tableprefix, $EmailText = '')
{
    $begintime = time_start();
    // connect to opencart DB
    DB_Txn_Begin($db);
    // check last time we run this script, so we know which records need to update from OC to webERP
    $LastTimeRun = CheckLastTimeRun('OpenCartToWeberp', $db);
    $TimeDifference = Get_SQL_to_PHP_time_difference($db);
    if ($ShowMessages) {
        prnMsg('This script was last run on: ' . $LastTimeRun . ' Server time difference: ' . $TimeDifference, 'success');
        prnMsg('Server time now: ' . GetServerTimeNow($TimeDifference), 'success');
    }
    if ($EmailText != '') {
        $EmailText = $EmailText . 'OpenCart to webERP Sync was last run on: ' . $LastTimeRun . "\n" . PrintTimeInformation($db);
    }
    // update order information
    $EmailText = SyncOrderInformation($TimeDifference, $ShowMessages, $LastTimeRun, $db, $db_oc, $oc_tableprefix, $EmailText);
    // update payment information
    $EmailText = SyncPaypalPaymentInformation($TimeDifference, $ShowMessages, $LastTimeRun, $db, $db_oc, $oc_tableprefix, $EmailText);
    // We are done!
    SetLastTimeRun('OpenCartToWeberp', $db);
    DB_Txn_Commit($db);
    if ($ShowMessages) {
        time_finish($begintime);
    }
    return $EmailText;
}
function SetLastTimeRun($Script, $db)
{
    $ServerNow = GetServerTimeNow(Get_SQL_to_PHP_time_difference($db));
    if ($Script == 'OpenCartToWeberp') {
        $_SESSION['OpenCartToWeberp_LastRun'] = $ServerNow;
        $sql = "UPDATE config\r\n\t\t\t\tSET confvalue = '" . $ServerNow . "'\r\n\t\t\t\tWHERE confname = 'OpenCartToWeberp_LastRun'";
    } elseif ($Script == 'WeberpToOpenCartHourly') {
        $_SESSION['WeberpToOpenCartHourly_LastRun'] = $ServerNow;
        $sql = "UPDATE config\r\n\t\t\t\tSET confvalue = '" . $ServerNow . "'\r\n\t\t\t\tWHERE confname = 'WeberpToOpenCartHourly_LastRun'";
    } elseif ($Script == 'WeberpToOpenCartDaily') {
        $_SESSION['WeberpToOpenCartDaily_LastRun'] = $ServerNow;
        $sql = "UPDATE config\r\n\t\t\t\tSET confvalue = '" . $ServerNow . "'\r\n\t\t\t\tWHERE confname = 'WeberpToOpenCartDaily_LastRun'";
    }
    $ErrMsg = _('Could not update Last Run Time of this script because');
    $result = DB_query($sql, $db, $ErrMsg);
}
function SyncSalesCategories($ShowMessages, $LastTimeRun, $db, $db_oc, $oc_tableprefix, $EmailText = '')
{
    $ServerNow = GetServerTimeNow(Get_SQL_to_PHP_time_difference($db));
    if ($EmailText != '') {
        $EmailText = $EmailText . "Sync Sales Categories" . "\n" . PrintTimeInformation($db);
    }
    $SQL = "SELECT salescatid,\r\n\t\t\t\tparentcatid,\r\n\t\t\t\tsalescatname,\r\n\t\t\t\tactive\r\n\t\t\tFROM salescat\r\n\t\t\tWHERE date_created >= '" . $LastTimeRun . "'\r\n\t\t\t\tOR date_updated >= '" . $LastTimeRun . "'\r\n\t\t\tORDER BY salescatid";
    $result = DB_query($SQL, $db);
    if (DB_num_rows($result) != 0) {
        if ($ShowMessages) {
            echo '<p class="page_title_text" align="center"><strong>' . _('Sales categories') . '</strong></p>';
            echo '<div>';
            echo '<table class="selection">';
            $TableHeader = '<tr>
								<th>' . _('SalesCatID') . '</th>
								<th>' . _('SalesCatName') . '</th>
								<th>' . _('Action') . '</th>
							</tr>';
            echo $TableHeader;
        }
        $DbgMsg = _('The SQL statement that failed was');
        $UpdateErrMsg = _('The SQL to update sales categories in Opencart failed');
        $InsertErrMsg = _('The SQL to insert sales categories in Opencart failed');
        $k = 0;
        //row colour counter
        $i = 0;
        while ($myrow = DB_fetch_array($result)) {
            /* FIELD MATCHING */
            if ($myrow['parentcatid'] == 0) {
                $Top = 1;
            } else {
                $Top = 0;
            }
            $StoreId = 0;
            $Column = 1;
            $Language_Id = 1;
            // for now NO multi language
            $SortOrder = 1;
            $Name = trim($myrow['salescatname']);
            $Description = trim($myrow['salescatname']);
            $MetaDescription = CreateMetaDescription('Sales category', trim($myrow['salescatname']));
            $MetaKeyword = CreateMetaKeyword('', trim($myrow['salescatname']));
            $CategoryId = $myrow['salescatid'];
            if (DataExistsInOpenCart($db_oc, $oc_tableprefix . 'category', 'category_id', $myrow['salescatid'])) {
                $Action = "Update";
                $sqlUpdate = "UPDATE " . $oc_tableprefix . "category\r\n\t\t\t\t\t\t\t\tSET parent_id \t\t= '" . $myrow['parentcatid'] . "',\r\n\t\t\t\t\t\t\t\t\tstatus \t\t\t= '" . $myrow['active'] . "',\r\n\t\t\t\t\t\t\t\t\ttop \t\t\t= '" . $Top . "',\r\n\t\t\t\t\t\t\t\t\tdate_modified \t= '" . $ServerNow . "'\r\n\t\t\t\t\t\t\t\tWHERE category_id \t= '" . $CategoryId . "'";
                $resultUpdate = DB_query_oc($sqlUpdate, $UpdateErrMsg, $DbgMsg, true);
                $sqlUpdate = "UPDATE " . $oc_tableprefix . "category_description\r\n\t\t\t\t\t\t\t\tSET language_id \t\t= '" . $Language_Id . "',\r\n\t\t\t\t\t\t\t\t\tname\t \t\t\t= '" . $Name . "'\r\n\t\t\t\t\t\t\t\tWHERE category_id \t= '" . $CategoryId . "'";
                $resultUpdate = DB_query_oc($sqlUpdate, $UpdateErrMsg, $DbgMsg, true);
                // update SEO Keywords if needed
                $SEOQuery = 'category_id=' . $CategoryId;
                $SEOKeyword = CreateSEOKeyword($Name);
                MaintainUrlAlias($SEOQuery, $SEOKeyword, $db_oc, $oc_tableprefix);
            } else {
                $Action = "Insert";
                $sqlInsert = "INSERT INTO " . $oc_tableprefix . "category\r\n\t\t\t\t\t\t\t\t(category_id,\r\n\t\t\t\t\t\t\t\timage,\r\n\t\t\t\t\t\t\t\tparent_id,\r\n\t\t\t\t\t\t\t\ttop,\r\n\t\t\t\t\t\t\t\t`column`,\r\n\t\t\t\t\t\t\t\tsort_order,\r\n\t\t\t\t\t\t\t\tstatus,\r\n\t\t\t\t\t\t\t\tdate_added,\r\n\t\t\t\t\t\t\t\tdate_modified)\r\n\t\t\t\t\t\t\tVALUES\r\n\t\t\t\t\t\t\t\t('" . $CategoryId . "',\r\n\t\t\t\t\t\t\t\t'',\r\n\t\t\t\t\t\t\t\t'" . $myrow['parentcatid'] . "',\r\n\t\t\t\t\t\t\t\t'" . $Top . "',\r\n\t\t\t\t\t\t\t\t'" . $Column . "',\r\n\t\t\t\t\t\t\t\t'" . $SortOrder . "',\r\n\t\t\t\t\t\t\t\t'" . $myrow['active'] . "',\r\n\t\t\t\t\t\t\t\t'" . $ServerNow . "',\r\n\t\t\t\t\t\t\t\t'" . $ServerNow . "'\r\n\t\t\t\t\t\t\t\t)";
                $resultInsert = DB_query_oc($sqlInsert, $InsertErrMsg, $DbgMsg, true);
                $sqlInsert = "INSERT INTO " . $oc_tableprefix . "category_description\r\n\t\t\t\t\t\t\t\t(category_id,\r\n\t\t\t\t\t\t\t\tlanguage_id,\r\n\t\t\t\t\t\t\t\tname,\r\n\t\t\t\t\t\t\t\tdescription,\r\n\t\t\t\t\t\t\t\tmeta_description,\r\n\t\t\t\t\t\t\t\tmeta_keyword)\r\n\t\t\t\t\t\t\tVALUES\r\n\t\t\t\t\t\t\t\t('" . $CategoryId . "',\r\n\t\t\t\t\t\t\t\t'" . $Language_Id . "',\r\n\t\t\t\t\t\t\t\t'" . $Name . "',\r\n\t\t\t\t\t\t\t\t'" . $Description . "',\r\n\t\t\t\t\t\t\t\t'" . $MetaDescription . "',\r\n\t\t\t\t\t\t\t\t'" . $MetaKeyword . "'\r\n\t\t\t\t\t\t\t\t)";
                $resultInsert = DB_query_oc($sqlInsert, $InsertErrMsg, $DbgMsg, true);
                $sqlInsert = "INSERT INTO " . $oc_tableprefix . "category_to_store\r\n\t\t\t\t\t\t\t\t(category_id,\r\n\t\t\t\t\t\t\t\tstore_id)\r\n\t\t\t\t\t\t\tVALUES\r\n\t\t\t\t\t\t\t\t('" . $CategoryId . "',\r\n\t\t\t\t\t\t\t\t'" . $StoreId . "'\r\n\t\t\t\t\t\t\t\t)";
                $resultInsert = DB_query_oc($sqlInsert, $InsertErrMsg, $DbgMsg, true);
                $SortOrder++;
                // insert SEO Keywords if needed
                $SEOQuery = 'category_id=' . $CategoryId;
                $SEOKeyword = CreateSEOKeyword($Name);
                MaintainUrlAlias($SEOQuery, $SEOKeyword, $db_oc, $oc_tableprefix);
            }
            if ($ShowMessages) {
                $k = StartEvenOrOddRow($k);
                printf('<td>%s</td>
						<td>%s</td>
						<td>%s</td>
						</tr>', $myrow['salescatid'], $Name, $Action);
            }
            if ($EmailText != '') {
                $EmailText = $EmailText . $myrow['salescatid'] . " = " . $Name . " --> " . $Action . "\n";
            }
            $i++;
        }
        if ($ShowMessages) {
            echo '</table>
					</div>
					</form>';
        }
    }
    if ($ShowMessages) {
        if ($i > 0) {
            prnMsg('Remind to run Repair Categories on OpenCart!', 'warn');
        }
        prnMsg(locale_number_format($i, 0) . ' ' . _('Sales Categories synchronized from webERP to OpenCart'), 'success');
    }
    if ($EmailText != '') {
        $EmailText = $EmailText . locale_number_format($i, 0) . ' ' . _('Sales Categories synchronized from webERP to OpenCart') . "\n\n";
    }
    return $EmailText;
}