185 lines
5.3 KiB
PHP
Executable File
185 lines
5.3 KiB
PHP
Executable File
<?php
|
|
namespace IpSupply\CartToQuote\Model;
|
|
|
|
use Magento\Framework\App\Helper\Context;
|
|
use IpSupply\CartToQuote\Api\CartItemInterface;
|
|
use Magento\Framework\ObjectManagerInterface;
|
|
|
|
|
|
class CartItemApi extends \Magento\Framework\App\Helper\AbstractHelper implements CartItemInterface
|
|
{
|
|
protected $cartItemFactory;
|
|
protected $_customerRepositoryInterface;
|
|
protected $request;
|
|
|
|
public function __construct(
|
|
Context $context,
|
|
\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;
|
|
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) {
|
|
if (!$this->isCartItem($item)) {
|
|
$data = $this->cartItemFactory->create()->addData([
|
|
'email' => $item["email"],
|
|
'name' => $item["name"],
|
|
'sku' => $item["sku"],
|
|
'product_id' => $item["product_id"],
|
|
'qty' => $item["qty"],
|
|
'customer_id' => $item["customer_id"],
|
|
'price' => $item["price"],
|
|
'url' => $item["url"],
|
|
'image' => $item["image"]
|
|
])->save();
|
|
return $data;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private function removeCartItem($item) {
|
|
$collection = $this->cartItemFactory->create()->getCollection();
|
|
$count = $collection->addFieldToSelect('id')
|
|
->addFieldToFilter('customer_id', ['eq' => $item["customer_id"]])
|
|
->addFieldToFilter('product_id', ['eq' => $item["product_id"]])
|
|
->walk('delete');
|
|
}
|
|
|
|
private function clearCartItem($customerId) {
|
|
$collection = $this->cartItemFactory->create()->getCollection();
|
|
$count = $collection->addFieldToSelect('id')
|
|
->addFieldToFilter('customer_id', ['eq' => $customerId])
|
|
->walk('delete');
|
|
}
|
|
|
|
private function getCurrentCustomerId($data){
|
|
$customer = $this->_customerRepositoryInterface->getById($data['customer_id']);
|
|
if ($customer) {
|
|
if ($customer->getEmail() == $data['email']){
|
|
return $customer->getId();
|
|
}
|
|
}
|
|
$customerId = $this->sessionFactory->create()->getCustomer()->getId();
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* POST
|
|
* @param string[] $data
|
|
* @return string
|
|
*/
|
|
public function addItem($data){
|
|
$currentCustomerId = $this->getCurrentCustomerId($data);
|
|
if ($currentCustomerId == 0) {
|
|
return [];
|
|
}
|
|
|
|
$data['customer_id'] = $currentCustomerId;
|
|
|
|
if (!$this->isCartItem($data)) {
|
|
$this->addCartItem($data);
|
|
}
|
|
|
|
|
|
return $this->getCartItems($currentCustomerId);
|
|
}
|
|
|
|
/**
|
|
* POST
|
|
* @param string[] $data
|
|
* @return string
|
|
*/
|
|
public function updateItem($data){
|
|
$currentCustomerId = $this->getCurrentCustomerId($data);
|
|
if ($currentCustomerId == 0) {
|
|
return [];
|
|
}
|
|
$data['customer_id'] = $currentCustomerId;
|
|
|
|
if ($this->isCartItem($data)) {
|
|
$this->removeCartItem($data);
|
|
$this->addCartItem($data);
|
|
}
|
|
|
|
|
|
return $this->getCartItems($currentCustomerId);
|
|
}
|
|
|
|
/**
|
|
* POST
|
|
* @param string[] $data
|
|
* @return string
|
|
*/
|
|
public function removeItem($data){
|
|
$currentCustomerId = $this->getCurrentCustomerId($data);
|
|
if ($currentCustomerId == 0) {
|
|
return [];
|
|
}
|
|
$data['customer_id'] = $currentCustomerId;
|
|
|
|
$this->removeCartItem($data);
|
|
|
|
return $this->getCartItems($currentCustomerId);
|
|
|
|
}
|
|
|
|
/**
|
|
* get
|
|
* @return string
|
|
*/
|
|
public function getData(){
|
|
$par = $this->_request->getParams();
|
|
if (!array_key_exists('customer_id', $par) || !array_key_exists('email', $par)) {
|
|
return [];
|
|
}
|
|
$currentCustomerId = $this->getCurrentCustomerId($par);
|
|
if ($currentCustomerId == 0) {
|
|
return [];
|
|
}
|
|
|
|
return $this->getCartItems($currentCustomerId);
|
|
}
|
|
|
|
/**
|
|
* POST
|
|
* @param string[] $data
|
|
* @return string
|
|
*/
|
|
public function clearItem($data){
|
|
$currentCustomerId = $this->getCurrentCustomerId($data);
|
|
if ($currentCustomerId == 0) {
|
|
return [];
|
|
}
|
|
$this->clearCartItem($currentCustomerId);
|
|
|
|
return $this->getCartItems($currentCustomerId);
|
|
}
|
|
|
|
}
|