CleanExpiredQuotes.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Cron;
  7. use Magento\Store\Model\StoresConfig;
  8. /**
  9. * Class CleanExpiredQuotes
  10. */
  11. class CleanExpiredQuotes
  12. {
  13. const LIFETIME = 86400;
  14. /**
  15. * @var StoresConfig
  16. */
  17. protected $storesConfig;
  18. /**
  19. * @var \Magento\Quote\Model\ResourceModel\Quote\CollectionFactory
  20. */
  21. protected $quoteCollectionFactory;
  22. /**
  23. * @var array
  24. */
  25. protected $expireQuotesFilterFields = [];
  26. /**
  27. * @param StoresConfig $storesConfig
  28. * @param \Magento\Quote\Model\ResourceModel\Quote\CollectionFactory $collectionFactory
  29. */
  30. public function __construct(
  31. StoresConfig $storesConfig,
  32. \Magento\Quote\Model\ResourceModel\Quote\CollectionFactory $collectionFactory
  33. ) {
  34. $this->storesConfig = $storesConfig;
  35. $this->quoteCollectionFactory = $collectionFactory;
  36. }
  37. /**
  38. * Clean expired quotes (cron process)
  39. *
  40. * @return void
  41. */
  42. public function execute()
  43. {
  44. $lifetimes = $this->storesConfig->getStoresConfigByPath('checkout/cart/delete_quote_after');
  45. foreach ($lifetimes as $storeId => $lifetime) {
  46. $lifetime *= self::LIFETIME;
  47. /** @var $quotes \Magento\Quote\Model\ResourceModel\Quote\Collection */
  48. $quotes = $this->quoteCollectionFactory->create();
  49. $quotes->addFieldToFilter('store_id', $storeId);
  50. $quotes->addFieldToFilter('updated_at', ['to' => date("Y-m-d", time() - $lifetime)]);
  51. $quotes->addFieldToFilter('is_active', 0);
  52. foreach ($this->getExpireQuotesAdditionalFilterFields() as $field => $condition) {
  53. $quotes->addFieldToFilter($field, $condition);
  54. }
  55. $quotes->walk('delete');
  56. }
  57. }
  58. /**
  59. * Retrieve expire quotes additional fields to filter
  60. *
  61. * @return array
  62. */
  63. protected function getExpireQuotesAdditionalFilterFields()
  64. {
  65. return $this->expireQuotesFilterFields;
  66. }
  67. /**
  68. * Set expire quotes additional fields to filter
  69. *
  70. * @param array $fields
  71. * @return void
  72. */
  73. public function setExpireQuotesAdditionalFilterFields(array $fields)
  74. {
  75. $this->expireQuotesFilterFields = $fields;
  76. }
  77. }