170 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
 | 
						|
namespace IpSupply\CartToQuote\Controller\Request;
 | 
						|
use Magento\Framework\Translate\Inline\StateInterface;
 | 
						|
use Magento\Framework\Escaper;
 | 
						|
use Magento\Framework\Mail\Template\TransportBuilder;
 | 
						|
 | 
						|
use Magento\Framework\App\Action\Context;
 | 
						|
use Magento\Framework\View\Result\PageFactory;
 | 
						|
use Magento\Framework\Controller\ResultFactory;
 | 
						|
 | 
						|
class Quote extends \Magento\Framework\App\Action\Action {
 | 
						|
 | 
						|
    protected $pageFactory;
 | 
						|
    protected $_messageManager;
 | 
						|
    protected $resultFactory;
 | 
						|
    protected $inlineTranslation;
 | 
						|
    protected $escaper;
 | 
						|
    protected $transportBuilder;
 | 
						|
    protected $logger;
 | 
						|
    protected $carttHistoryFactory;
 | 
						|
    protected $carttDetailFactory;
 | 
						|
    protected $cartItemFactory;
 | 
						|
 | 
						|
    public function __construct(
 | 
						|
        Context $context,
 | 
						|
        PageFactory $pageFactory,
 | 
						|
        \Magento\Framework\Message\ManagerInterface $messageManager,
 | 
						|
        StateInterface $inlineTranslation,
 | 
						|
        Escaper $escaper,
 | 
						|
        TransportBuilder $transportBuilder,
 | 
						|
        \Magento\Framework\App\Helper\Context $helperContext,
 | 
						|
        \IpSupply\CartToQuote\Model\CartHistoryFactory $carttHistoryFactory,
 | 
						|
        \IpSupply\CartToQuote\Model\CartDetailFactory $carttDetailFactory,
 | 
						|
        \IpSupply\CartToQuote\Model\CartItemFactory $cartItemFactory
 | 
						|
    )
 | 
						|
    {
 | 
						|
        $this->pageFactory = $pageFactory;
 | 
						|
        $this->messageManager = $messageManager;
 | 
						|
        $this->resultFactory = $context->getResultFactory();
 | 
						|
        $this->inlineTranslation = $inlineTranslation;
 | 
						|
        $this->escaper = $escaper;
 | 
						|
        $this->transportBuilder = $transportBuilder;
 | 
						|
        $this->logger = $helperContext->getLogger();
 | 
						|
        $this->carttHistoryFactory = $carttHistoryFactory;
 | 
						|
        $this->carttDetailFactory = $carttDetailFactory;
 | 
						|
        $this->cartItemFactory = $cartItemFactory;
 | 
						|
        parent::__construct($context);
 | 
						|
    }
 | 
						|
 | 
						|
    public function addCartHistory($itemsTotal, $customerId) {
 | 
						|
        $cartHistory = $this->carttHistoryFactory->create()->addData([
 | 
						|
            'items_total' => $itemsTotal,
 | 
						|
            'customer_id' => $customerId
 | 
						|
        ])->save();
 | 
						|
        return  $cartHistory->getId();
 | 
						|
    }
 | 
						|
 | 
						|
    private function clearCartItem($customerId) {
 | 
						|
        $collection = $this->cartItemFactory->create()->getCollection();
 | 
						|
        $count = $collection->addFieldToSelect('id')
 | 
						|
            ->addFieldToFilter('customer_id', ['eq' => $customerId])
 | 
						|
            ->walk('delete');
 | 
						|
    }
 | 
						|
 | 
						|
    public function addCartDetail($quoteHistoryId, $items) {
 | 
						|
        foreach ($items as $item) {
 | 
						|
            $data = $this->carttDetailFactory->create()->addData([
 | 
						|
                'product_id' => $item['product_id'],
 | 
						|
                'name' => $item['name'],
 | 
						|
                'url' => $item['url'],
 | 
						|
                'image' => $item['image'],
 | 
						|
                'sku' => $item['sku'],
 | 
						|
                'qty' => $item['qty'],
 | 
						|
                'price' => $item['price'],
 | 
						|
                'customer_id' => $item['customer_id'],
 | 
						|
                'quote_history_id' => $quoteHistoryId
 | 
						|
            ])->save();
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public function getCartItems($customerId) {
 | 
						|
        $collection = $this->cartItemFactory->create()->getCollection();
 | 
						|
        $data = $collection->addFieldToFilter('customer_id', ['eq' => $customerId])
 | 
						|
            ->setOrder('name','ASC')
 | 
						|
            ->getData();
 | 
						|
        return $data;
 | 
						|
    }
 | 
						|
 | 
						|
    public function execute()
 | 
						|
    {
 | 
						|
 | 
						|
        $page = $this->resultFactory->create(ResultFactory::TYPE_PAGE);
 | 
						|
        $block = $page->getLayout()->getBlock('ip_supply_cart_to_quote_request_quote');
 | 
						|
 | 
						|
        $data = $this->getRequest()->getPostValue();
 | 
						|
        if (!empty($data)) {
 | 
						|
                if (!array_key_exists("name", $data)) {
 | 
						|
                    $this->messageManager->addError(__("The field name is invalid"));
 | 
						|
                } else if (!array_key_exists("company_name", $data)) {
 | 
						|
                    $this->messageManager->addError(__("The field company name is invalid"));
 | 
						|
                } else if (!array_key_exists("email", $data)) {
 | 
						|
                    $this->messageManager->addError(__("The field email is invalid"));
 | 
						|
                } else if (!array_key_exists("phone", $data)) {
 | 
						|
                    $this->messageManager->addError(__("The field phone is invalid"));
 | 
						|
                } else if (!array_key_exists("inquiry", $data)) {
 | 
						|
                    $this->messageManager->addError(__("The field inquiry is invalid"));
 | 
						|
                } else if (!array_key_exists("note", $data)) {
 | 
						|
                    $this->messageManager->addError(__("The field note is invalid"));
 | 
						|
                }else {
 | 
						|
                    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
 | 
						|
                    $scopeConfig = $objectManager->create('\Magento\Framework\App\Config\ScopeConfigInterface');
 | 
						|
                    $email_contact = $scopeConfig->getValue('trans_email/ident_general/email',\Magento\Store\Model\ScopeInterface::SCOPE_STORE);
 | 
						|
                    $customerSession = $objectManager->create('Magento\Customer\Model\Session');
 | 
						|
                    if ($customerSession->isLoggedIn()) {
 | 
						|
                        $items = $this->getCartItems($customerSession->getCustomer()->getId());
 | 
						|
                        if (count($items) > 0) {
 | 
						|
                            $cartHistoryId = $this->addCartHistory(count($items), $customerSession->getCustomer()->getId());
 | 
						|
                            if ($cartHistoryId > 0) {
 | 
						|
                                $this->addCartDetail($cartHistoryId, $items);
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                        $inquirys = array();
 | 
						|
                        foreach ($items as $item) {
 | 
						|
                            array_push($inquirys, $item["sku"] . " : " . $item["qty"]);
 | 
						|
                        }
 | 
						|
                        $data["inquiry"] = implode(".",$inquirys);
 | 
						|
                        $this->clearCartItem($customerSession->getCustomer()->getId());
 | 
						|
                    }
 | 
						|
                    try {
 | 
						|
                        $this->inlineTranslation->suspend();
 | 
						|
                        $sender = [
 | 
						|
                            'name' => $this->escaper->escapeHtml($data["name"]),
 | 
						|
                            'email' => $this->escaper->escapeHtml($data["email"]),
 | 
						|
                        ];
 | 
						|
                        $transport = $this->transportBuilder
 | 
						|
                            ->setTemplateIdentifier('email_request_quote_template')
 | 
						|
                            ->setTemplateOptions(
 | 
						|
                                [
 | 
						|
                                    'area' => \Magento\Framework\App\Area::AREA_FRONTEND,
 | 
						|
                                    'store' => \Magento\Store\Model\Store::DEFAULT_STORE_ID,
 | 
						|
                                ]
 | 
						|
                            )
 | 
						|
                            ->setTemplateVars([
 | 
						|
                                'name'  => $data["name"],
 | 
						|
                                'email'  => $data["email"],
 | 
						|
                                'company_name'  => $data["company_name"],
 | 
						|
                                'phone'  => $data["phone"],
 | 
						|
                                'inquiry'  => str_replace(".","<br>",$data["inquiry"]),
 | 
						|
                                'note' => $data["note"],
 | 
						|
                            ])
 | 
						|
                            ->setFrom($sender)
 | 
						|
                            ->addTo($email_contact)
 | 
						|
                            ->getTransport();
 | 
						|
                        $transport->sendMessage();
 | 
						|
                        $this->inlineTranslation->resume();
 | 
						|
                        $this->messageManager->addSuccess(__("Thank you. We'll get back to you very soon."));
 | 
						|
                    } catch (\Exception $e) {
 | 
						|
                        $this->logger->debug($e->getMessage());
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        return $page;
 | 
						|
    }
 | 
						|
 | 
						|
}
 |