Модуль Сборки модулей 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
 
Назад
Сверху