/** * {@inheritdoc} */ public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria) { $quoteCollection = $this->quoteCollectionFactory->create(); $this->extensionAttributesJoinProcessor->process($quoteCollection); $searchData = $this->searchResultsDataFactory->create(); $searchData->setSearchCriteria($searchCriteria); $searchData->setItems($quoteCollection->getItems()); return $searchData; }
/** * @param array $lifetimes * @param array $additionalFilterFields * @dataProvider cleanExpiredQuotesDataProvider */ public function testExecute($lifetimes, $additionalFilterFields) { $this->storesConfigMock->expects($this->once())->method('getStoresConfigByPath')->with($this->equalTo('checkout/cart/delete_quote_after'))->will($this->returnValue($lifetimes)); $quotesMock = $this->getMockBuilder('Magento\\Quote\\Model\\ResourceModel\\Quote\\Collection')->disableOriginalConstructor()->getMock(); $this->quoteFactoryMock->expects($this->exactly(count($lifetimes)))->method('create')->will($this->returnValue($quotesMock)); $quotesMock->expects($this->exactly((3 + count($additionalFilterFields)) * count($lifetimes)))->method('addFieldToFilter'); if (!empty($lifetimes)) { $quotesMock->expects($this->exactly(count($lifetimes)))->method('walk')->with('delete'); } $this->observer->setExpireQuotesAdditionalFilterFields($additionalFilterFields); $this->observer->execute(); }
/** * Clean expired quotes (cron process) * * @return void */ public function execute() { $lifetimes = $this->storesConfig->getStoresConfigByPath('checkout/cart/delete_quote_after'); foreach ($lifetimes as $storeId => $lifetime) { $lifetime *= self::LIFETIME; /** @var $quotes \Magento\Quote\Model\ResourceModel\Quote\Collection */ $quotes = $this->quoteCollectionFactory->create(); $quotes->addFieldToFilter('store_id', $storeId); $quotes->addFieldToFilter('updated_at', ['to' => date("Y-m-d", time() - $lifetime)]); $quotes->addFieldToFilter('is_active', 0); foreach ($this->getExpireQuotesAdditionalFilterFields() as $field => $condition) { $quotes->addFieldToFilter($field, $condition); } $quotes->walk('delete'); } }
/** * Get customer last quote id. * * @param \Magento\Customer\Model\Customer $customer * * @return bool|mixed */ public function getCustomerLastQuoteId(\Magento\Customer\Model\Customer $customer) { $storeIds = $this->storeManager->getWebsite($customer->getWebsiteId())->getStoreIds(); $collection = $this->quoteCollection->create()->addFieldToFilter('customer_id', $customer->getId())->addFieldToFilter('store_id', ['in' => $storeIds])->setPageSize(1)->setOrder('entity_id'); if ($collection->getSize()) { //@codingStandardsIgnoreStart return $collection->getFirstItem(); //@codingStandardsIgnoreEnd } else { return false; } }
/** * @param null $from * @param null $to * @param bool|false $guest * @param int $storeId * * @return $this */ protected function _getStoreQuotes($from = null, $to = null, $guest = false, $storeId = 0) { $updated = ['from' => $from, 'to' => $to, 'date' => true]; $salesCollection = $this->_quoteCollection->create()->addFieldToFilter('is_active', 1)->addFieldToFilter('items_count', ['gt' => 0])->addFieldToFilter('customer_email', ['neq' => ''])->addFieldToFilter('store_id', $storeId)->addFieldToFilter('main_table.updated_at', $updated); //guests if ($guest) { $salesCollection->addFieldToFilter('main_table.customer_id', ['null' => true]); } else { //customers $salesCollection->addFieldToFilter('main_table.customer_id', ['notnull' => true]); } //process rules on collection $ruleModel = $this->_rulesFactory->create(); $websiteId = $this->_storeManager->getStore($storeId)->getWebsiteId(); $salesCollection = $ruleModel->process($salesCollection, \Dotdigitalgroup\Email\Model\Rules::ABANDONED, $websiteId); return $salesCollection; }