Exemplo n.º 1
0
 /**
  * {@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;
 }