magento2-docker/app/code/IpSupply/CartToQuote/Controller/Quote/AddItem.php

90 lines
2.9 KiB
PHP
Executable File

<?php
namespace IpSupply\CartToQuote\Controller\Quote;
use Magento\Framework\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;
class AddItem extends \Magento\Framework\App\Action\Action {
protected $pageFactory;
protected $cartItemFactory;
protected $_customerRepositoryInterface;
protected $request;
protected $customerSession;
protected $objectManager;
public function __construct(
Context $context,
PageFactory $pageFactory,
\IpSupply\CartToQuote\Model\CartItemFactory $cartItemFactory,
\Magento\Customer\Api\CustomerRepositoryInterface $customerRepositoryInterface,
\Magento\Framework\Webapi\Rest\Request $request
)
{
$this->cartItemFactory = $cartItemFactory;
$this->_customerRepositoryInterface = $customerRepositoryInterface;
$this->request = $request;
$this->objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$this->customerSession = $this->objectManager->get(\Magento\Customer\Model\Session::class);
parent::__construct($context);
}
private function getCartItems($customerId) {
$collection = $this->cartItemFactory->create()->getCollection();
$data = $collection->addFieldToFilter('customer_id', ['eq' => $customerId])
->setOrder('name','ASC')
->getData();
return $data;
}
private function isCartItem($item) {
$collection = $this->cartItemFactory->create()->getCollection();
$count = $collection->addFieldToSelect('id')
->addFieldToFilter('customer_id', ['eq' => $item["customer_id"]])
->addFieldToFilter('product_id', ['eq' => $item["product_id"]])
->count();
if ($count > 0) {
return true;
}
return false;
}
private function addCartItem($item, $customer) {
if (!$this->isCartItem($item)) {
$data = $this->cartItemFactory->create()->addData([
'email' => $customer->getEmail(),
'name' => $item["name"],
'sku' => $item["sku"],
'product_id' => $item["product_id"],
'qty' => $item["qty"],
'customer_id' => $customer->getId(),
'price' => $item["price"],
'url' => $item["url"],
'image' => $item["image"]
])->save();
return $data;
}
return null;
}
public function execute()
{
$data = json_decode(file_get_contents('php://input'), TRUE);
if($this->customerSession->isLoggedIn()) {
$customer = $this->customerSession->getCustomer();
$this->addCartItem($data, $customer);
echo json_encode($this->getCartItems($customer->getId()));
exit;
} else {
echo json_encode(array());
}
}
}