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/app/code/Cnc/SerialNumber/Observer/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/app/code/Cnc/SerialNumber/Observer/OrderCancelAfter.php
<?php
/**
 * Copyright (c) 2021 Kaliop Digital Commerce (https://digitalcommerce.kaliop.com) All Rights Reserved.
 * https://opensource.org/licenses/OSL-3.0  Open Software License (OSL 3.0)
 * Krzysztof Majkowski <[email protected]>
 */

declare(strict_types=1);

namespace Cnc\SerialNumber\Observer;

use Cnc\SerialNumber\Api\IsSerialNumberEnabledForProductInterface;
use Cnc\SerialNumber\Helper\SerialNumber;
use Cnc\SerialNumber\Model\Source\SerialNumber\Status;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Sales\Model\Order;

class OrderCancelAfter implements ObserverInterface
{
    /**
     * @var SerialNumber
     */
    private $serialNumber;

    /**
     * @var IsSerialNumberEnabledForProductInterface
     */
    private $isSerialNumberEnabledForProduct;

    /**
     * QuoteSubmitSuccess constructor.
     * @param SerialNumber $serialNumber
     * @param IsSerialNumberEnabledForProductInterface $isSerialNumberEnabledForProduct
     */
    public function __construct(
        SerialNumber $serialNumber,
        IsSerialNumberEnabledForProductInterface $isSerialNumberEnabledForProduct
    ) {
        $this->serialNumber = $serialNumber;
        $this->isSerialNumberEnabledForProduct = $isSerialNumberEnabledForProduct;
    }

    /**
     * Setting order number in sales_order object.
     *
     * @param Observer $observer
     * @return QuoteSubmitSuccess
     */
    public function execute(Observer $observer)
    {
        /* @var Order $order */
        $order = $observer->getEvent()->getData('order');
        foreach ($order->getAllItems() as $item) {
            if (!$this->isSerialNumberEnabledForProduct->execute($item->getProductId())) {
                continue;
            }

            $options = $item->getProductOptions();
            $toCreate = [];
            if (isset($options['cnc_options']) &&
                isset($options['cnc_options']['serial_number']) &&
                isset($options['cnc_options']['serial_number'][Status::SOLD]) &&
                !empty($options['cnc_options']['serial_number'][Status::SOLD])) {
                $serialNumbers = explode(',', $options['cnc_options']['serial_number'][Status::SOLD]);
                if (!$serialNumbers) {
                    continue;
                }

                $canceled = $this->serialNumber->cancelSerialNumbers($serialNumbers, true);
                if (!$canceled) {
                    continue;
                }

                $numbers = [];
                /** @var \Cnc\SerialNumber\Model\SerialNumber $canceledSerialNumber */
                foreach ($canceled as $canceledSerialNumber) {
                    $sourceCode = $canceledSerialNumber->getSourceCode();
                    if (!isset($sourceCode)) {
                        $toCreate[$sourceCode] = [];
                    }
                    $toCreate[$sourceCode] []= $canceledSerialNumber->getSerialNumber();
                    $numbers = $canceledSerialNumber->getSerialNumber();
                }
                if (is_array($numbers) && count($numbers)) {
                    $options['cnc_options']['serial_number'][Status::CANCELED] = implode(',', $numbers);
                    $item->setProductOptions($options);
                    $item->getResource()->save($item);
                }

                foreach ($toCreate as $sourceCode => $values) {
                    if (count($values)) {
                        $this->serialNumber->createSerialNumbers(
                            (int)$item->getProductId(),
                            $item->getSku(),
                            $sourceCode,
                            count($values)
                        );
                    }
                }
            }
        }

        return $this;
    }
}

Spamworldpro Mini