Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/bitrix/modules/ipol.sdek/classes/lib/Bitrix/Adapter/
Upload File :
Current File : /var/www/homesaver/www/bitrix/modules/ipol.sdek/classes/lib/Bitrix/Adapter/Printer.php

<?php
namespace Ipolh\SDEK\Bitrix\Adapter;

use Ipolh\SDEK\Bitrix\Tools;
use Ipolh\SDEK\Core\Entity\Result\Error;
use Ipolh\SDEK\Core\Entity\Result\Result;
use Ipolh\SDEK\Core\Entity\Result\Warning;
use Ipolh\SDEK\PrintHandler;

use Bitrix\Sale\Shipment;

class Printer
{
    /**
     * @param array $orders
     * @return Result
     */
    public static function getPrintOrders($orders)
    {
        $result = new Result();
        $data   = ['EXISTED' => [PrintHandler::WORK_MODE_ORDER => [], PrintHandler::WORK_MODE_SHIPMENT => []], 'NOT_FOUND' => []];

        $dbOrders = \sqlSdekOrders::select([], ['ORDER_ID' => $orders, 'SOURCE' => 0]);
        while ($tmp = $dbOrders->Fetch()) {
            if (!$tmp['SDEK_ID'])
                $data['NOT_FOUND'][$tmp['ORDER_ID']] = true;
            else
                $data['EXISTED'][PrintHandler::WORK_MODE_ORDER][] = $tmp['ORDER_ID'];
        }

        foreach ($orders as $orderId) {
            if (!in_array($orderId, $data['EXISTED'][PrintHandler::WORK_MODE_ORDER]))
                $data['NOT_FOUND'][$orderId] = true;
        }

        if (count($data['NOT_FOUND']) && \sdekHelper::isConverted()) {
            $shipments = [];
            $dbShipments = Shipment::getList(['filter' => ['=ORDER_ID' => array_keys($data['NOT_FOUND'])], 'select' => ['ID', 'ORDER_ID']]);
            while ($tmp = $dbShipments->Fetch()) {
                $shipments[$tmp['ID']] = $tmp['ORDER_ID'];
            }

            $dbOrders = \sqlSdekOrders::select([], ['ORDER_ID' => array_keys($shipments), 'SOURCE' => 1]);
            while ($tmp = $dbOrders->Fetch()) {
                if ($tmp['SDEK_ID']) {
                    $data['EXISTED'][PrintHandler::WORK_MODE_SHIPMENT][] = $tmp['ORDER_ID'];
                    unset($data['NOT_FOUND'][$shipments[$tmp['ORDER_ID']]]);
                }
            }
        }

        if (empty($data['EXISTED'][PrintHandler::WORK_MODE_ORDER]) && empty($data['EXISTED'][PrintHandler::WORK_MODE_SHIPMENT])) {
            $result->addError(new Error(Tools::getMessage('ERR_NOT_FOUND_ALL_ORDERS').implode(', ', array_keys($data['NOT_FOUND']))));
        } else if (!empty($data['NOT_FOUND'])) {
            $result->addWarning(new Warning(Tools::getMessage('ERR_NOT_FOUND_SOME_ORDERS').implode(', ', array_keys($data['NOT_FOUND']))));
        }

        $result->setData($data);

        return $result;

    }

    /**
     * @param array $orders
     * @return Result
     */
    public static function prepareOrdersData($orders)
    {
        $result = new Result();
        $data   = ['ORDERS' => [], 'EXISTED' => [], 'NOT_FOUND' => []];

        $defaultAccountId = \sdekHelper::getBasicAuth(true);

        foreach ($orders as $workMode => $ids) {
            if (!is_array($ids)) {
                $orders[$workMode] = [$ids];
            }

            $data['EXISTED'][$workMode] = [];

            $dbOrders = \sqlSdekOrders::select([], ['ORDER_ID' => $ids, 'SOURCE' => ($workMode == PrintHandler::WORK_MODE_ORDER) ? 0 : 1]);
            while ($tmp = $dbOrders->Fetch()) {
                if ($tmp['SDEK_ID']) {
                    $accountId = (int)(isset($tmp['ACCOUNT']) ? $tmp['ACCOUNT'] : $defaultAccountId);

                    $data['ORDERS'][$accountId][] = $tmp['SDEK_ID'];
                    $data['EXISTED'][$workMode][] = $tmp['ORDER_ID'];
                }
            }

            $data['NOT_FOUND'][$workMode] = array_diff($orders[$workMode], $data['EXISTED'][$workMode]);

            if (!empty($data['NOT_FOUND'][$workMode])) {
                $warning = ($workMode == PrintHandler::WORK_MODE_ORDER) ? Tools::getMessage('ERR_NOT_FOUND_ORDERS') : Tools::getMessage('ERR_NOT_FOUND_SHIPMENTS');
                $result->addWarning(new Warning($warning.implode(', ', $data['NOT_FOUND'][$workMode])));
            }
        }

        if (empty($data['ORDERS'])) {
            $result->addError(new Error('No orders data founded.'));
        }

        $result->setData($data);

        return $result;
    }
}