Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/old/vendor/extmag/shiplab/Helper/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/vendor/extmag/shiplab/Helper/Label.php
<?php
/**
 * Copyright © Extmag. All rights reserved.
 */

namespace Extmag\Shiplab\Helper;

use Extmag\Shiplab\Model\LabelRepository;
use Extmag\Shiplab\Model\ResourceModel\Label\Collection;
use Extmag\Shiplab\Model\ResourceModel\Label\CollectionFactory;
use Extmag\Shiplab\Model\Source\CarrierCodes;
use Exception;
use Magento\Framework\App\Helper\AbstractHelper;
use Magento\Framework\App\Helper\Context;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\Message\ManagerInterface;

class Label extends AbstractHelper
{
    /**
     * @var DataPrepareFactory
     */
    protected $dataPrepareFactory;

    /**
     * @var CollectionFactory
     */
    protected $labelCollection;

    /**
     * @var Pickup
     */
    protected $pickup;

    /**
     * @var ManagerInterface
     */
    protected $messageManager;

    /**
     * Extmag Model Saver
     *
     * @var DataSave
     */
    protected $modelSaver;

    /**
     * Extmag Ship
     *
     * @var RequestFactory
     */
    protected $requestToAPI;
    /**
     * @var LabelRepository
     */
    protected $labelRepository;
    /**
     * @var Manager
     */
    protected $manager;
    /**
     * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory
     */
    protected $orderCollection;
    /**
     * @var \Magento\Sales\Model\ResourceModel\Order\Shipment\Collection
     */
    protected $shipmentCollection;
    /**
     * @var \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Collection
     */
    protected $creditmemoCollection;
    /**
     * @var CarrierCodes
     */
    protected $carrierCodes;

    /**
     * @param Context $context
     * @param DataPrepareFactory $dataPrepareFactory
     * @param CollectionFactory $labelCollection
     * @param LabelRepository $labelRepository
     * @param Pickup $pickup
     * @param ManagerInterface $messageManager
     * @param DataSave $defSave
     * @param RequestFactory $requestToAPI
     * @param \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollection
     * @param \Magento\Sales\Model\ResourceModel\Order\Shipment\CollectionFactory $shipmentCollection
     * @param \Magento\Sales\Model\ResourceModel\Order\Creditmemo\CollectionFactory $creditmemoCollection
     * @param Manager $manager
     * @param CarrierCodes $carrierCodes
     */
    public function __construct(
        Context $context,
        DataPrepareFactory $dataPrepareFactory,
        CollectionFactory $labelCollection,
        LabelRepository $labelRepository,
        Pickup $pickup,
        ManagerInterface $messageManager,
        DataSave $defSave,
        RequestFactory $requestToAPI,
        \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollection,
        \Magento\Sales\Model\ResourceModel\Order\Shipment\CollectionFactory $shipmentCollection,
        \Magento\Sales\Model\ResourceModel\Order\Creditmemo\CollectionFactory $creditmemoCollection,
        Manager $manager,
        CarrierCodes $carrierCodes
    ) {
        parent::__construct($context);
        $this->dataPrepareFactory = $dataPrepareFactory;
        $this->labelCollection = $labelCollection;
        $this->messageManager = $messageManager;
        $this->modelSaver = $defSave;
        $this->requestToAPI = $requestToAPI;
        $this->labelRepository = $labelRepository;
        $this->pickup = $pickup;
        $this->manager = $manager;
        $this->orderCollection = $orderCollection;
        $this->shipmentCollection = $shipmentCollection;
        $this->creditmemoCollection = $creditmemoCollection;
        $this->carrierCodes = $carrierCodes;
    }

    /**
     * @param $carrierCode
     * @param $selected
     * @param $orderSubType
     * @param $route
     * @param $actionType
     * @param array $orderItems
     * @param array $additionalData
     * @return array
     * @throws Exception
     */
    public function makeDataAndSaveLabel(
        $carrierCode,
        $selected,
        $orderSubType,
        $route,
        $actionType,
        $orderItems = [],
        $additionalData = []
    ) {
        /**
         * @var Collection $labelCollection
         */
        $labelCollection = $this->labelCollection->create();
        $existingLabelsIds = [];
        if ($route == 'shipment') {
            $existingLabels = $labelCollection
                ->addFieldToSelect('order_sub_id')
                ->addFieldToFilter('carrier_code', $carrierCode)
                ->addFieldToFilter('status', 1)
                ->addFieldToFilter('order_sub_type', $orderSubType);
            if (!empty($selected)) {
                $existingLabels->addFieldToFilter('order_sub_id', ['in' => $selected]);
            }
            $existingLabelsIds = $existingLabels->getConnection()->fetchCol($existingLabels->getSelect());
        }

        $connector = $this->requestToAPI->create($carrierCode, 'ship');

        if (empty($selected)) {
            if ($orderSubType == 'order') {
                $typeCollection = $this->orderCollection->create()->addFieldToSelect('entity_id');
            } elseif ($orderSubType == 'shipment') {
                $typeCollection = $this->shipmentCollection->create()->addFieldToSelect('entity_id');
            } elseif ($orderSubType == 'refund') {
                $typeCollection = $this->creditmemoCollection->create()->addFieldToSelect('entity_id');
            }

            if (!empty($typeCollection)) {
                $selected = $typeCollection->getConnection()->fetchCol($typeCollection->getSelect());
            }
        }

        if (!empty($selected)) {
            foreach ($selected as $value) {
                if ($route != 'shipment' || !in_array($value, $existingLabelsIds)) {
                    $dataPrepare = $this->dataPrepareFactory->create($carrierCode);
                    $orderId = $value;
                    if ($orderSubType == 'shipment') {
                        $orderId = $dataPrepare->getShipmentById($value)->getOrderId();
                    } elseif ($orderSubType == 'refund') {
                        $orderId = $dataPrepare->getCreditmemoById($value)->getOrderId();
                    }

                    $data = [
                            'route' => $route,
                            'order_id' => $orderId,
                            'order_sub_type' => $orderSubType,
                            'order_sub_id' => $value,
                        ] + $additionalData;
                    $dataPrepare->setOrderItems($orderItems);
                    $dataPrepare->setData($data);
                    $dataPrepare->setConfigScopeFilter();
                    $dataPrepare->getStepOne();

                    if ($actionType == 'customer') {
                        $data = $dataPrepare->getData();
                        $carrierData = $this->carrierCodes->getCarriers($carrierCode);
                        $data['printing_type'] = $carrierData['customer_printing_type']??'PDF';
                        $dataPrepare->setData($data);
                    }

                    if ($dataPrepare->massActionValid($carrierCode, $actionType) === true) {
                        $this->checkedDataAndAddRequest($dataPrepare, $connector, $data, $actionType);

                        if (!empty($data['refund_with_direct']) && $route == 'shipment') {
                            $data = [
                                    'route' => 'refund',
                                    'order_id' => $orderId,
                                    'order_sub_type' => $orderSubType,
                                    'order_sub_id' => $value,
                                ] + $additionalData;

                            $dataPrepare = $this->dataPrepareFactory->create($carrierCode);
                            $dataPrepare->setOrderItems($orderItems);
                            $dataPrepare->setData($data);
                            $dataPrepare->setConfigScopeFilter();
                            $dataPrepare->getStepOne();
                            if ($dataPrepare->massActionValid($carrierCode, $actionType) === true) {
                                $this->checkedDataAndAddRequest($dataPrepare, $connector, $data, $actionType);
                            }
                        }
                    }
                }
            }
        }

        return $this->sendAndSaveLabels($carrierCode, $connector);
    }

    /**
     * @param $dataPrepare
     * @param $connector
     * @param $data
     * @param $actionType
     * @throws LocalizedException
     * @throws NoSuchEntityException
     */
    protected function checkedDataAndAddRequest(
        &$dataPrepare,
        &$connector,
        &$data,
        $actionType
    ) {
        /**
         * @var DataPrepare $dataPrepare
         */
        $dataPrepare->setConfigScopeFilter(true);
        $dataPrepare->getStepTwo();
        $dataPrepare->getStepThree();
        $serviceCode = $dataPrepare->setServiceCode($actionType, 'general');
        $dataPrepare->setCanCreateInvoiceAndShipment($actionType);
        $data = $dataPrepare->getData();
        if ($serviceCode === false && !empty($data['rate_error'])) {
            foreach ($data['rate_error'] as $error) {
                $this->messageManager->addErrorMessage($error);
            }
        }

        $connector->setData($data);
        $connector->addRequest();
    }

    /**
     * @param $carrierCode
     * @param $connector
     * @return array
     */
    public function sendAndSaveLabels(
        $carrierCode,
        $connector
    ) {
        $returnData = [];
        try {
            if ($connector->checkRequestData()) {
                $response = $connector->send();
                $returnData = $this->modelSaver->save($carrierCode, 'ship', $response);
                if (!empty($returnData['success'])) {
                    $returnData['success'] = array_unique($returnData['success']);
                    foreach ($returnData['success'] as $labelId) {
                        $label = $this->labelRepository->getById($labelId);
                        if (!empty($label) && $label->getTypeDirection() == 'shipment') {
                            $requestData = json_decode($label->getRequest(), true);
                            if (!empty($requestData['pickup_with_label'])) {
                                $this->pickup->makeDataAndSavePickup($carrierCode, [$label]);
                            }
                        }
                    }

                    $this->modelSaver->createInvoiceAndShipment($returnData['success']);
                }
            }
        } catch (Exception $e) {
            $this->manager->warning($e->getMessage() . ' :  ' . $e->getTraceAsString());
        }

        return $returnData;
    }
}

Spamworldpro Mini