| Current Path : /var/www/www.indacotrentino.com/www/app/code/Torresani/SiWeGO/Model/Api/ |
| 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;
}
}