![]() 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/ |
<?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; } }