Модуль Сборки модулей TecDock

У коді реалізовано якщо на складах є одинаковий товар то товар береться із складу де час доставки менший.
<?php
///керування///
// Включення або виключення кешування
$enableCache = true; // Змініть на false - щоб вимкнути кешування, true - щоб увімкнути кешування
// Можливість міняти час з'єднання
$connectTimeout = 2; // Час з'єднання за замовчуванням
// Можливість міняти націнку
$markupPercentage = 0.35; // Націнка у відсотках (35%)
// Можливість міняти округлення ціни
$roundingOption = 4; // Виберіть опцію округлення: 1 - стандартно без округлення, 2 - без дробової частини, 3 - до 5, 4 - до 10 (за замовчуванням)

// Можливість міняти час доставки і значення за замовчуванням
$executionTimes = [
'Луцьк' => 1, // Час доставки до Луцька
'Київ Борщагівка' => 2, // Час доставки до Києва Борщагівки
'Очікуємо' => 30, // Час очікування за замовчуванням
];
$defaultExecutionTime = 3; // Час доставки за замовчуванням

///керування///

if (!defined("TDM_PROLOG_INCLUDED") || TDM_PROLOG_INCLUDED !== true) die();

// Ініціалізуємо масив цін
$arPrices = [];

// Кешування результатів запитів
$apiCache = [];

// Оптимізований цикл обробки часток
foreach ($arWsParts as $arPart) {
$article = $arPart['ARTICLE'];

// Перевіряємо, чи маємо дані у кеші, якщо кешування включено
if ($enableCache && isset($apiCache[$article])) {
$curlResult = $apiCache[$article];
} else {
// Виконуємо запит до API та кешуємо результат, якщо кешування включено
$curlResult = fetchFromApi($article);
if ($enableCache) {
$apiCache[$article] = $curlResult;
}
}

// Отримуємо результат з кешу
if ($curlResult === false) {
// Обробка помилки CURL
continue;
}

$curlResult = json_decode($curlResult, true);

if (!empty($curlResult['products'])) {
// Зберігаємо дані про товар із найменшим терміном доставки
$minDeliveryTime = PHP_INT_MAX;
$minDeliveryStock = '';

foreach ($curlResult['products'] as $product) {
$default_image = isset($product['default_image']) ? $product['default_image'] : ''; // Отримуємо зображення товару
$stocks = array_merge($product['in_stocks'], $product['in_others'], $product['in_waiting']);
foreach ($stocks as $stock) {
$quantity = (int)preg_replace('/[^0-9]/', '', $stock['quantity']);
if ($quantity > 0) {
// Оптимізуємо розрахунок ціни та часу виконання
$price = (float)$product['price'] * (1 + $markupPercentage); // Націнка
$timeToExecute = isset($executionTimes[$stock['name']]) ? $executionTimes[$stock['name']] : $defaultExecutionTime; // Отримуємо час доставки або значення за замовчуванням
$isNewProduct = !$product['new_product'] ? 1 : 0;

// Якщо термін доставки на даному складі менший за збережений мінімальний, замінюємо значення
if ($timeToExecute < $minDeliveryTime) {
$minDeliveryTime = $timeToExecute;
$minDeliveryStock = $stock['name'];
}
}
}
}

// Повторно обробляємо результати та додаємо товари лише зі складу з мінімальним терміном доставки
foreach ($curlResult['products'] as $product) {
$default_image = isset($product['default_image']) ? $product['default_image'] : ''; // Отримуємо зображення товару
$stocks = array_merge($product['in_stocks'], $product['in_others'], $product['in_waiting']);
foreach ($stocks as $stock) {
$quantity = (int)preg_replace('/[^0-9]/', '', $stock['quantity']);
if ($quantity > 0 && $stock['name'] === $minDeliveryStock) {
// Оптимізуємо розрахунок ціни та часу виконання
$price = (float)$product['price'] * (1 + $markupPercentage); // Націнка
$timeToExecute = $minDeliveryTime;
$isNewProduct = !$product['new_product'] ? 1 : 0;

// Здійснюємо округлення ціни згідно з вимогою
$roundedPrice = roundPrice($price, $roundingOption);

// Заповнюємо масив даними
$arPrice = TDMPriceArray($arPart);
$arPrice["ARTICLE"] = $product['article'];
$arPrice["ALT_NAME"] = $product['name'];
$arPrice["BRAND"] = $product['brand'];
$arPrice["PRICE"] = $roundedPrice; // Округлена ціна
$arPrice["AVAILABLE"] = $quantity;
$arPrice['IMG_SRC'] = 'Для просмотра ссылки Войди или Зарегистрируйся' . str_replace('\\', '/', $default_image); // Додаємо зображення товару
$arPrice["CURRENCY"] = "UAH";
$arPrice["DAY"] = $timeToExecute;
$arPrice["STOCK"] = $stock['name'];
$arPrice["OPTIONS"] = '';
$arOps = Array();
$arPrice["OPTIONS"] = TDMOptionsImplode($arOps,$arPrice);
// Додаємо до масиву цін
$arPrices[] = $arPrice;
}
}
}
}
}

// Функція для отримання даних з API з можливістю кешування
function fetchFromApi($article) {
$key = "You API Key"; // Ваш ключ API
$headers = array("Authorization: $key", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36");
$ch = curl_init();
global $connectTimeout; // Використовуємо глобальну змінну
curl_setopt($ch, CURLOPT_URL, "Для просмотра ссылки Войди или Зарегистрируйся" . urlencode($article) . "&new_product=0&warehouses=all&search_mode=strict");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_ENCODING, 'utf-8');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $connectTimeout); // Встановлюємо час з'єднання
$curlResult = curl_exec($ch);
curl_close($ch);
return $curlResult;
}

// Функція для округлення ціни
function roundPrice($price, $option) {
switch ($option) {
case 1:
// Стандартно без округлення
return $price;
case 2:
// Без дробової частини
return ceil($price);
case 3:
// До 5
return ceil($price / 5) * 5;
case 4:
// До 10
return ceil($price / 10) * 10;
default:
return $price;
}
}
?>
 
У коді реалізовано якщо на складах є одинаковий товар то товар береться із складу де час доставки менший.
<?php
///керування///
// Включення або виключення кешування
$enableCache = true; // Змініть на false - щоб вимкнути кешування, true - щоб увімкнути кешування
// Можливість міняти час з'єднання
$connectTimeout = 2; // Час з'єднання за замовчуванням
// Можливість міняти націнку
$markupPercentage = 0.35; // Націнка у відсотках (35%)
// Можливість міняти округлення ціни
$roundingOption = 4; // Виберіть опцію округлення: 1 - стандартно без округлення, 2 - без дробової частини, 3 - до 5, 4 - до 10 (за замовчуванням)

// Можливість міняти час доставки і значення за замовчуванням
$executionTimes = [
'Луцьк' => 1, // Час доставки до Луцька
'Київ Борщагівка' => 2, // Час доставки до Києва Борщагівки
'Очікуємо' => 30, // Час очікування за замовчуванням
];
$defaultExecutionTime = 3; // Час доставки за замовчуванням

///керування///

if (!defined("TDM_PROLOG_INCLUDED") || TDM_PROLOG_INCLUDED !== true) die();

// Ініціалізуємо масив цін
$arPrices = [];

// Кешування результатів запитів
$apiCache = [];

// Оптимізований цикл обробки часток
foreach ($arWsParts as $arPart) {
$article = $arPart['ARTICLE'];

// Перевіряємо, чи маємо дані у кеші, якщо кешування включено
if ($enableCache && isset($apiCache[$article])) {
$curlResult = $apiCache[$article];
} else {
// Виконуємо запит до API та кешуємо результат, якщо кешування включено
$curlResult = fetchFromApi($article);
if ($enableCache) {
$apiCache[$article] = $curlResult;
}
}

// Отримуємо результат з кешу
if ($curlResult === false) {
// Обробка помилки CURL
continue;
}

$curlResult = json_decode($curlResult, true);

if (!empty($curlResult['products'])) {
// Зберігаємо дані про товар із найменшим терміном доставки
$minDeliveryTime = PHP_INT_MAX;
$minDeliveryStock = '';

foreach ($curlResult['products'] as $product) {
$default_image = isset($product['default_image']) ? $product['default_image'] : ''; // Отримуємо зображення товару
$stocks = array_merge($product['in_stocks'], $product['in_others'], $product['in_waiting']);
foreach ($stocks as $stock) {
$quantity = (int)preg_replace('/[^0-9]/', '', $stock['quantity']);
if ($quantity > 0) {
// Оптимізуємо розрахунок ціни та часу виконання
$price = (float)$product['price'] * (1 + $markupPercentage); // Націнка
$timeToExecute = isset($executionTimes[$stock['name']]) ? $executionTimes[$stock['name']] : $defaultExecutionTime; // Отримуємо час доставки або значення за замовчуванням
$isNewProduct = !$product['new_product'] ? 1 : 0;

// Якщо термін доставки на даному складі менший за збережений мінімальний, замінюємо значення
if ($timeToExecute < $minDeliveryTime) {
$minDeliveryTime = $timeToExecute;
$minDeliveryStock = $stock['name'];
}
}
}
}

// Повторно обробляємо результати та додаємо товари лише зі складу з мінімальним терміном доставки
foreach ($curlResult['products'] as $product) {
$default_image = isset($product['default_image']) ? $product['default_image'] : ''; // Отримуємо зображення товару
$stocks = array_merge($product['in_stocks'], $product['in_others'], $product['in_waiting']);
foreach ($stocks as $stock) {
$quantity = (int)preg_replace('/[^0-9]/', '', $stock['quantity']);
if ($quantity > 0 && $stock['name'] === $minDeliveryStock) {
// Оптимізуємо розрахунок ціни та часу виконання
$price = (float)$product['price'] * (1 + $markupPercentage); // Націнка
$timeToExecute = $minDeliveryTime;
$isNewProduct = !$product['new_product'] ? 1 : 0;

// Здійснюємо округлення ціни згідно з вимогою
$roundedPrice = roundPrice($price, $roundingOption);

// Заповнюємо масив даними
$arPrice = TDMPriceArray($arPart);
$arPrice["ARTICLE"] = $product['article'];
$arPrice["ALT_NAME"] = $product['name'];
$arPrice["BRAND"] = $product['brand'];
$arPrice["PRICE"] = $roundedPrice; // Округлена ціна
$arPrice["AVAILABLE"] = $quantity;
$arPrice['IMG_SRC'] = 'Для просмотра ссылки Войди или Зарегистрируйся' . str_replace('\\', '/', $default_image); // Додаємо зображення товару
$arPrice["CURRENCY"] = "UAH";
$arPrice["DAY"] = $timeToExecute;
$arPrice["STOCK"] = $stock['name'];
$arPrice["OPTIONS"] = '';
$arOps = Array();
$arPrice["OPTIONS"] = TDMOptionsImplode($arOps,$arPrice);
// Додаємо до масиву цін
$arPrices[] = $arPrice;
}
}
}
}
}

// Функція для отримання даних з API з можливістю кешування
function fetchFromApi($article) {
$key = "You API Key"; // Ваш ключ API
$headers = array("Authorization: $key", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36");
$ch = curl_init();
global $connectTimeout; // Використовуємо глобальну змінну
curl_setopt($ch, CURLOPT_URL, "Для просмотра ссылки Войди или Зарегистрируйся" . urlencode($article) . "&new_product=0&warehouses=all&search_mode=strict");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_ENCODING, 'utf-8');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $connectTimeout); // Встановлюємо час з'єднання
$curlResult = curl_exec($ch);
curl_close($ch);
return $curlResult;
}

// Функція для округлення ціни
function roundPrice($price, $option) {
switch ($option) {
case 1:
// Стандартно без округлення
return $price;
case 2:
// Без дробової частини
return ceil($price);
case 3:
// До 5
return ceil($price / 5) * 5;
case 4:
// До 10
return ceil($price / 10) * 10;
default:
return $price;
}
}
?>
Видає помилки по:
quantity та name
Warning: Illegal string offset 'quantity' in /....
Warning: Illegal string offset 'name' in /....
 
Видає помилки по:
quantity та name
Warning: Illegal string offset 'quantity' in /....
Warning: Illegal string offset 'name' in /....
поміняйте склади до яких у вас є доступ

поміняйте склади до яких у вас є доступ
або попробуйте поміняйтеу коді
$quantity = isset($stock['quantity']) ? (int)preg_replace('/[^0-9]/', '', $stock['quantity']) : 0;$name = isset($stock['name']) ? $stock['name'] : '';
 
Последнее редактирование:
поміняйте склади до яких у вас є доступ


або попробуйте поміняйтеу коді
$quantity = isset($stock['quantity']) ? (int)preg_replace('/[^0-9]/', '', $stock['quantity']) : 0;$name = isset($stock['name']) ? $stock['name'] : '';
допомого $quantity = isset($stock['quantity']) ? (int)preg_replace('/[^0-9]/', '', $stock['quantity']) : 0;$name = isset($stock['name']) ? $stock['name'] : '';
 
Последнее редактирование:
У коді реалізовано якщо на складах є однаковий товар то товар береться із складу де час доставки менший.
PHP:
<?php
///керування///
// Змінна для таймінгу підключення
$connectTimeout = 2;

// Валюта
$currency = "UAH";
// Включення/виключення кешування
$useCache = true; // За замовчуванням кешування включене

// Націнка
$markup = 0.35; // Націнка 35%
// Вибір типу округлення ціни
$priceRoundMode = 'to_10'; // Можливі варіанти: 'no_round', 'no_decimal', 'to_5', 'to_10'
// Змінна для зміни днів доставки
$deliveryOffset = 2; // За замовчуванням доставка через 1 день

///керування//

if (!defined("TDM_PROLOG_INCLUDED") || TDM_PROLOG_INCLUDED !== true) {
    die();
}

// Функція для виправлення кодування
function fix_encoding($str)
{
    return iconv(mb_detect_encoding($str, mb_detect_order(), true), "UTF-8", $str);
}

// Функція для округлення ціни
function round_price($price, $mode = 'default')
{
    switch ($mode) {
        case 'no_round':
            return ceil($price);
        case 'no_decimal':
            return ceil($price);
        case 'to_5':
            return ceil($price / 5) * 5;
        case 'to_10':
            return ceil($price / 10) * 10;
        default:
            return ceil($price);
    }
}

// Функція для отримання ціни товару за артикулом і брендом
function get_price($article, $brand, $token, &$cache, $useCache = true)
{
    global $connectTimeout, $currency, $markup, $priceRoundMode; // Включення валюти та націнки

    if ($useCache && isset($cache[$article][$brand])) {
        return $cache[$article][$brand];
    }

    $url = "https://api.tehnomir.com.ua/price/search";

    $postdata = array(
        "apiToken" => $token,
        "code" => $article,
        "isShowAnalogs" => 1,
        "currency" => "UAH", // Використання змінної валюти
    );

    if (!empty($brand)) {
        $postdata['brandId'] = $brand;
    }

    $postdata = json_encode($postdata);

    $headers = array(
        "Content-Type: application/json",
        "accept: application/json"
    );

    $ch = curl_init();
    curl_setopt_array($ch, array(
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_HEADER => false,
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2',
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_POSTFIELDS => $postdata,
        CURLOPT_VERBOSE => false,
        CURLOPT_CONNECTTIMEOUT => $connectTimeout // Використання глобальної змінної для таймінгу підключення
    ));
    $execute = curl_exec($ch);

    $data = json_decode($execute, true);

    curl_close($ch);

    if ($data['success'] !== false) {
        if ($useCache) {
            $cache[$article][$brand] = $data['data'];
        }
        return $data['data'];
    } else {
        return array();
    }
}

// Функція для отримання інформації про продукт
function get_product_info($article, $brandId, $token)
{
    global $connectTimeout;

    $url = "https://api.tehnomir.com.ua/info/getProductInfo";

    $postdata = array(
        "apiToken" => $token,
        "brandId" => $brandId,
        "code" => $article
    );

    $postdata = json_encode($postdata);

    $headers = array(
        "Content-Type: application/json",
        "accept: application/json"
    );

    $ch = curl_init();
    curl_setopt_array($ch, array(
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_HEADER => false,
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2',
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_POSTFIELDS => $postdata,
        CURLOPT_VERBOSE => false,
        CURLOPT_CONNECTTIMEOUT => $connectTimeout // Використання глобальної змінної для таймінгу підключення
    ));
    $execute = curl_exec($ch);
    curl_close($ch);

    $data = json_decode($execute, true);

    if ($data['success'] !== false) {
        return $data['data'];
    } else {
        return array();
    }
}

// Отримання API токену
$token = "You API TOKEN"; //Ваш ключ API

// Кеш для результатів запитів
$cache = [];

// Перебір кожного товару
foreach ($arWsParts as $arPart) {
    // Отримання бренду за артикулом
    if (!isset($cache['brands'][$arPart['ARTICLE']])) {
        $url = "https://api.tehnomir.com.ua/info/getBrandsByCode";

        $postdata = array(
            "apiToken" => $token,
            "code" => $arPart['ARTICLE']
        );

        $postdata = json_encode($postdata);

        $ch = curl_init();
        curl_setopt_array($ch, array(
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POST => true,
            CURLOPT_HEADER => false,
            CURLOPT_HTTPHEADER => array(
                "Content-Type: application/json",
                "accept: application/json"
            ),
            CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2',
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_POSTFIELDS => $postdata,
            CURLOPT_VERBOSE => false,
            CURLOPT_CONNECTTIMEOUT => $connectTimeout // Використання глобальної змінної для таймінгу підключення
        ));
        $execute = curl_exec($ch);
        curl_close($ch);

        $data = json_decode($execute, true);

        if ($data['success'] !== false) {
            $cache['brands'][$arPart['ARTICLE']] = $data['data'];
        } else {
            $cache['brands'][$arPart['ARTICLE']] = array();
        }
    }

    $manufacturers = $cache['brands'][$arPart['ARTICLE']];

    foreach ($manufacturers as $manufacturer) {
        $brandId = $manufacturer['brandId'];

        // Отримання інформації про продукт
        $productInfo = get_product_info($arPart['ARTICLE'], $brandId, $token);

        // Перевірка чи інформація була успішно отримана
        if (!empty($productInfo)) {
            // Отримання зображення продукту
            $images = $productInfo['images'];
            $imageSrc = !empty($images) ? $images[0]['image'] : '';

            // Отримання ціни за артикулом і брендом
            $products = get_price($arPart['ARTICLE'], $brandId, $token, $cache, $useCache);

            // Створення масиву для збереження інформації про товари на складах
            $warehouseProducts = [];

            foreach ($products as $product) {
                foreach ($product['rests'] as $product_rest) {
                    $price = (float)$product_rest["price"] * (1 + $markup); // Націнка
                    // Обчислення терміну доставки
                    $deliveryDate = new DateTime($product_rest["deliveryDate"]);
                    $currentDate = new DateTime();
                    $deliveryInterval = $deliveryDate->diff($currentDate);
                    $deliveryDays = $deliveryInterval->days;

                    // Додаткові операції та обробка ціни
                    $price = round_price($price, $priceRoundMode);

                    // Збереження інформації про товар на складі
                    $warehouseProducts[] = [
                        "price" => $price,
                        "deliveryDays" => $deliveryDays + $deliveryOffset,
                        "warehouse" => $product_rest['priceLogo']
                    ];
                }
            }

            // Сортування за терміном доставки
            usort($warehouseProducts, function($a, $b) {
                return $a['deliveryDays'] <=> $b['deliveryDays'];
            });

            // Вибір найменшого терміну доставки
            $bestWarehouse = $warehouseProducts[0];

            // Додавання товару у список
            $arPrice = TDMPriceArray();
            $arPrice["LINK_TO_BKEY"] = $arPart['BKEY'];
            $arPrice["LINK_TO_AKEY"] = $arPart['AKEY'];
            $arPrice["ARTICLE"] = $product["code"];
            $arPrice["ALT_NAME"] = fix_encoding($product["descriptionUa"]);
            $arPrice["BRAND"] = $manufacturer['brand'];
            $arPrice["PRICE"] = $bestWarehouse["price"];
            $arPrice["CURRENCY"] = "UAH"; // Використання змінної валюти
            $arPrice["DAY"] = $bestWarehouse["deliveryDays"]; // Встановлення часу доставки
            $arPrice["AVAILABLE"] = $product_rest['quantity'];
            $arPrice["STOCK"] = $bestWarehouse['warehouse'];
            $arPrice["IMG_SRC"] = $imageSrc; // Додавання зображення
            $arOps = Array();
            $arPrice["OPTIONS"] = TDMOptionsImplode($arOps,$arPrice);
            $arPrices[] = $arPrice;
        }
    }
}

// Якщо кешування включено, збережемо результати у файл
//if ($useCache) {
 //   file_put_contents('cache.json', json_encode($cache));
//}
?>
Поділітся робочим модулем неважно якої ревізії головне щоби модуль був робочий і без ionCube
 
Последнее редактирование:
Поділітся робочим модулем неважно якої ревізії головне щоби модуль був робочий і без ionCube
Скрытое содержимое доступно для зарегистрированных пользователей!
 
PHP:
<?php
//не весь товар підтягує із ecat артикули текдок відрізняються від ecat повинен бути точний збіг

if (!defined("TDM_PROLOG_INCLUDED") || TDM_PROLOG_INCLUDED !== true) die();

error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);

// Конфіденційні дані
$login = 'LOGIN'; //Логін
$password = 'PASSW'; //Пароль
$wsdlUrl = 'https://econnector.elit.cz/InterCompany-1.75.0/BuyerService?wsdl';

// Націнка у відсотках
$markupPercentage = 10; //  10% націнка

// Опція для типу округлення:
// 1 - без округлення
// 2 - без дробової частини
// 3 - до 5
// 4 - до 10
$roundingOption = 1; // За замовчуванням без округлення

// Склади та час доставки
$warehouses = [
    'UACKV' => 1, //ELIT Центральний склад Київ-1
    'UAHTR' => 1, //Тернопіль
    'UAPBC' => 2, //Біла Церква
    'UAPBR' => 2, //Бровари
    'UAPBU' => 2, //Буча
    'UAPCH' => 2, //Черкаси
    'UAPCHG' => 2, //Чернігів
    'UAPCHN' => 2, //Чернівці
    'UAPDP' => 3, //Дніпро-1
    'UAPDP2' => 3,//Дніпро-2
    'UAPIF' => 2, //Івано-Франківськ
    'UAPIZ' => 3, //Ізмаїл
    'UAPKAM' => 2, //Кам'янське
    'UAPKAP' => 2, //Кам`янець-Подільський
    'UAPKH' => 3, //Харків-1
    'UAPKHM' => 2, //Хмельницький
    'UAPKHU' => 2, //Хуст
    'UAPKIR' => 2, //Кропивницький
    'UAPKL' => 2, //Коломия
    'UAPKR' => 3, //Кривий Ріг
    'UAPKRE' => 3, //Кременчук
    'UAPKV2' => 2, //Київ-2
    'UAPKV3' => 2, //Київ-3
    'UAPKV4' => 2, //Київ-4
    'UAPLTS' => 0, //Луцьк
    'UAPLV' => 1, //Львів-1
    'UAPLV2' => 1, //Львів-2
    'UAPNK' => 3, //Миколаїв
    'UAPOD' => 2, //Одеса-1
    'UAPOD2' => 2, //Одеса-2
    'UAPPL' => 2, //Полтава
    'UAPRV' => 1, //Рівне
    'UAPSU' => 2, //Суми
    'UAPUG' => 2, //Ужгород
    'UAPUM' => 2, //Умань
    'UAPVN' => 2, //Вінниця
    'UAPZP' => 2, //Запоріжжя
    'UAPZT' => 2, //Житомир
    'UAEKV' => 2, //Київ Зовн. склад
    'UAPKRA' => 3, //Краматорськ
];

// Перевірка наявності розширення SOAP
if (extension_loaded('soap')) {

    // Ініціалізація клієнта SOAP
    $client = new SoapClient($wsdlUrl);

    // Ініціалізація масиву цін
    $arPrices = [];

    foreach ($arWsParts as $arPart) {
        // Отримання артикулу з даних
        $article = $arPart['ARTICLE'];
        // Переведення артикулу у верхній регістр
         $article = strtoupper($article);
        // Видалення пробілів з артикулу
        $cleanArticle = str_replace(' ', '', $article);

        // Ініціалізація масиву артикулів для запитів
        $articles = [$article, $cleanArticle];

        // Масив для зберігання часу доставки для кожного складу товару
        $deliveryTimes = [];

        foreach ($articles as $currentArticle) {
            $getItemRequest = [
                'company' => 'ELIT_UA',
                'login' => $login,
                'password' => $password,
                'activeItemNo' => $currentArticle
            ];

            // Виклик методу getItem
            $getItemResponse = $client->getItem($getItemRequest);

            // Обробка результату методу getItem
            if (!empty($getItemResponse->return->description)) {
                $itemData = $getItemResponse->return;

                $getItemInfoRequest = [
                    'company' => 'ELIT_UA',
                    'login' => $login,
                    'password' => $password,
                    'itemNo' => $currentArticle,
                    'qty' => 1
                ];

                // Виклик методу getItemInfo
                $getItemInfoResponse = $client->getItemInfo($getItemInfoRequest);

                // Обробка результату методу getItemInfo
                if (!$getItemInfoResponse->return->closed) {
                    $product = $getItemInfoResponse->return;
                    $price = $product->retailPrice;

                    // Додавання націнки до ціни
                    $priceWithMarkup = $price * (1 + $markupPercentage / 100);

                    // Округлення ціни відповідно до вибраної опції
                    switch ($roundingOption) {
                        case 2:
                            $priceWithMarkup = floor($priceWithMarkup); // Без дробової частини
                            break;
                        case 3:
                            $priceWithMarkup = round($priceWithMarkup, 1); // До 5
                            break;
                        case 4:
                            $priceWithMarkup = round($priceWithMarkup, -1); // До 10
                            break;
                        default:
                            // Без округлення (залишаємо як є)
                            break;
                    }

                    foreach ($product->stock as $item) {
                        $quantity = $item->quantity;
                        $time = $item->location;

                        // Зберігання часу доставки для кожного складу товару
                        if (!isset($deliveryTimes[$currentArticle]) || $warehouses[$time] < $deliveryTimes[$currentArticle]) {
                            $deliveryTimes[$currentArticle] = $warehouses[$time];
                            // Якщо це перший склад або час доставки менший, зберігаємо його
                            $minTimeWarehouse = $time;
                        }
                    }
                }
            }
        }

        // Виведення результату для товару з найменшим часом доставки
        if (isset($minTimeWarehouse)) {
            $arPrice = TDMPriceArray($arPart);
            $arPrice['AKEY'] = $itemData->internalNo;
            $arPrice['BKEY'] = $itemData->vendor;
            $arPrice['BRAND'] = $itemData->vendor = $arPart['BRAND'];
            $arPrice['ARTICLE'] = $itemData->internalNo;
            $arPrice['ALT_NAME'] = $itemData->description;
            $arPrice['AVAILABLE'] = $quantity;
            $arPrice["CURRENCY"] = "UAH";
            $arPrice['PRICE'] = $priceWithMarkup; // Використовуємо ціну з націнкою
            $arPrice['DAY'] = $deliveryTimes[$currentArticle]; // Додаємо час доставки
            $arPrice['STOCK'] = $minTimeWarehouse;
            $arPrice["OPTIONS"] = '';
            $arOps = Array();
            $arPrice["OPTIONS"] = TDMOptionsImplode($arOps, $arPrice);
            $arPrices[] = $arPrice;
        }
    }

    // Виведення результату
    // Код для конвертації масиву в JSON з прямими символами
    $jsonOutput = json_encode($arPrices, JSON_UNESCAPED_UNICODE);
     echo $jsonOutput;
}
echo '<pre>'; print_r($arPrices); echo '</pre>';
echo '<pre>'; print_r($arPrice); echo '</pre>';
?>
 
Може в когось є самий новий модуль, може бути закодований ionCube
 
Може в когось є самий новий модуль, може бути закодований ionCube
Всі закодовані варіанти, що зміг знайти взагалі. Версіі 3.2.х нібито.

Скрытое содержимое доступно для зарегистрированных пользователей!
 
Здравствуйте. не работает настройка добавления или удаления производителей авто ну и другие настройки, которые находятся в файлах settings.php права на файлы и папки выставлял не помогает.Может кто-то сталкивался и подскажет как решить. Может кто-то поделится вот та менюшкой файлами subsections. Спасибо
ката.JPG
 
Назад
Сверху