Your IP : 216.73.216.43


Current Path : /var/www/www.indacotrentino.com/www/app/code/Torresani/SiWeGO/Model/Api/
Upload File :
Current File : /var/www/www.indacotrentino.com/www/app/code/Torresani/SiWeGO/Model/Api/ProductRepository.php

<?php

namespace Torresani\SiWeGO\Model\Api;

use Torresani\SiWeGO\Api\ProductRepositoryInterface;
use Torresani\SiWeGO\Api\RequestItemInterfaceFactory;
use Torresani\SiWeGO\Api\ResponseItemInterfaceFactory;
use Magento\Catalog\Api\Data\ProductInterface;
use Magento\Catalog\Model\ResourceModel\Product\Action;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Sales\Api\OrderRepositoryInterface;
use Magento\Framework\Api\SearchCriteriaBuilder;

/**
 * Class ProductRepository
 */
class ProductRepository implements ProductRepositoryInterface
{
    /**
     * @var Action
     */
    private $productAction;

    /**
     * @var CollectionFactory
     */
    private $productCollectionFactory;

    /**
     * @var RequestItemInterfaceFactory
     */
    private $requestItemFactory;

    /**
     * @var ResponseItemInterfaceFactory
     */
    private $responseItemFactory;

    /**
     * @var StoreManagerInterface
     */
    private $storeManager;

    protected $orderRepository;
    protected $searchCriteriaBuilder;

    /**
     * @param Action $productAction
     * @param CollectionFactory $productCollectionFactory
     * @param RequestItemInterfaceFactory $requestItemFactory
     * @param ResponseItemInterfaceFactory $responseItemFactory
     * @param StoreManagerInterface $storeManager
     */
    public function __construct(
        Action $productAction,
        CollectionFactory $productCollectionFactory,
        RequestItemInterfaceFactory $requestItemFactory,
        ResponseItemInterfaceFactory $responseItemFactory,
        StoreManagerInterface $storeManager,
        OrderRepositoryInterface $orderRepository,
        SearchCriteriaBuilder $searchCriteriaBuilder
    ) {
        $this->productAction = $productAction;
        $this->productCollectionFactory = $productCollectionFactory;
        $this->requestItemFactory = $requestItemFactory;
        $this->responseItemFactory = $responseItemFactory;
        $this->storeManager = $storeManager;
        $this->orderRepository = $orderRepository;
        $this->searchCriteriaBuilder = $searchCriteriaBuilder;
    }

    /**
     * @inheritDoc
     *
     * @param string $sessionId
     * @param string $state
     * @param string $pickupCode
     * @param string $chatEndpoint
     * @return \Torresani\SiWeGO\Api\ResponseItemInterface
     * @throws \Magento\Framework\Exception\NoSuchEntityException
     */
    public function setState(string $sessionId, string $state, string $pickupCode=null, string $chatEndpoint=null) : mixed
    {
        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        $resource = $objectManager->get('Magento\Framework\App\ResourceConnection');
        $connection = $resource->getConnection();

        $data = [
            'siwego_sessionid' => $sessionId,
            'state' => $state,
            'pickupcode' => $pickupCode,
            'chatendpoint' => $chatEndpoint
        ];
        $connection->insert('siwego_state', $data);

        $result = '';
        try {
            $searchCriteria = $this->searchCriteriaBuilder
                ->addFilter('siwego_sessionid', $sessionId)
                ->create();
            $orders = $this->orderRepository->getList($searchCriteria);

            if ($orders->getTotalCount() > 0) {
                $firstOrder = current($orders->getItems());

                $firstOrder->addStatusHistoryComment('SIWEGO new state: ' . $state . ($pickupCode ? ' - Pick up code: ' . $pickupCode : '')  . ($chatEndpoint ? ' - Chat end point: ' . $chatEndpoint : '') )
                    ->setIsVisibleOnFront(true)
                    ->setIsCustomerNotified(false);
                $firstOrder->save();
            }
            $result =  '{
            "status":"ok",
            "sessionId": "' . $sessionId . '",
            "state":"' . $state . '"'.
                ($pickupCode ? (', "pickupCode": "' . $pickupCode . '"') : '') .
                ($chatEndpoint ? (', "chatEndpoint": "' . $chatEndpoint . '"') : '') .
                '}';

            $result = str_replace(array(' ', "\n", "\t", "\r"), '', $result);
        } catch (\Exception $e) {
            // $e->getMessage()
            $result = '{"status":"ko","errore":"Si è verificato un errore durante l\'elaborazione della richiesta."}';
        }
        return $result;
    }
}