Collection.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. namespace Dotdigitalgroup\Email\Model\ResourceModel\Abandoned;
  3. use \Dotdigitalgroup\Email\Model\Sync\Automation;
  4. class Collection extends
  5. \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
  6. {
  7. /**
  8. * @var string
  9. */
  10. protected $_idFieldName = 'id';
  11. /**
  12. * @var \Dotdigitalgroup\Email\Model\Newsletter\SubscriberFilterer
  13. */
  14. public $subscriberFilterer;
  15. /**
  16. * Collection constructor.
  17. *
  18. * @param \Dotdigitalgroup\Email\Model\Newsletter\SubscriberFilterer $subscriberFilterer
  19. * @param \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory
  20. * @param \Psr\Log\LoggerInterface $logger
  21. * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
  22. * @param \Magento\Framework\Event\ManagerInterface $eventManager
  23. * @param \Magento\Framework\DB\Adapter\AdapterInterface|null $connection
  24. * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb|null $resource
  25. */
  26. public function __construct(
  27. \Dotdigitalgroup\Email\Model\Newsletter\SubscriberFilterer $subscriberFilterer,
  28. \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory,
  29. \Psr\Log\LoggerInterface $logger,
  30. \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
  31. \Magento\Framework\Event\ManagerInterface $eventManager,
  32. \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
  33. \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
  34. ) {
  35. $this->subscriberFilterer = $subscriberFilterer;
  36. parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
  37. }
  38. /**
  39. * Initialize resource collection.
  40. *
  41. * @return null
  42. */
  43. public function _construct()
  44. {
  45. $this->_init(
  46. \Dotdigitalgroup\Email\Model\Abandoned::class,
  47. \Dotdigitalgroup\Email\Model\ResourceModel\Abandoned::class
  48. );
  49. }
  50. /**
  51. * @return string
  52. */
  53. public function getLastPendingStatusCheckTime()
  54. {
  55. $collection = $this->addFieldToFilter(
  56. 'status',
  57. \Dotdigitalgroup\Email\Model\Sync\Automation::CONTACT_STATUS_PENDING
  58. )->setOrder("updated_at")->setPageSize(1);
  59. return $collection->getFirstItem()->getUpdatedAt();
  60. }
  61. /**
  62. * @return $this
  63. */
  64. public function getCollectionByPendingStatus()
  65. {
  66. return $this->addFieldToFilter(
  67. 'status',
  68. \Dotdigitalgroup\Email\Model\Sync\Automation::CONTACT_STATUS_PENDING
  69. );
  70. }
  71. /**
  72. * @param int $storeId
  73. * @param boolean $guest
  74. *
  75. * @return Collection
  76. */
  77. public function getCollectionByConfirmedStatus($storeId, $guest = false)
  78. {
  79. $collection = $this->addFieldToFilter('status', Automation::CONTACT_STATUS_CONFIRMED)
  80. ->addFieldToFilter('store_id', $storeId)
  81. ->addFieldToFilter('abandoned_cart_number', '1');
  82. if ($guest) {
  83. $collection->addFieldToFilter('customer_id', ['null' => true]);
  84. } else {
  85. $collection->addFieldToFilter('customer_id', ['notnull' => true]);
  86. }
  87. return $collection;
  88. }
  89. /**
  90. * @param $number
  91. * @param $storeId
  92. * @param $updated
  93. * @param $status
  94. * @param bool $isOnlySubscribersForAC
  95. * @param bool $guest
  96. *
  97. * @return Collection
  98. */
  99. public function getAbandonedCartsForStore(
  100. $number,
  101. $storeId,
  102. $updated,
  103. $status,
  104. $isOnlySubscribersForAC,
  105. $guest = false
  106. ) {
  107. $abandonedCollection = $this->addFieldToFilter('is_active', 1)
  108. ->addFieldToFilter('abandoned_cart_number', $number)
  109. ->addFieldToFilter('main_table.store_id', $storeId)
  110. ->addFieldToFilter('quote_updated_at', $updated)
  111. ->addFieldToFilter('status', $status);
  112. if ($guest) {
  113. $abandonedCollection->addFieldToFilter('main_table.customer_id', ['null' => true]);
  114. } else {
  115. $abandonedCollection->addFieldToFilter('main_table.customer_id', ['notnull' => true]);
  116. }
  117. if ($isOnlySubscribersForAC) {
  118. $abandonedCollection = $this->subscriberFilterer->filterBySubscribedStatus($this, "email");
  119. }
  120. return $abandonedCollection;
  121. }
  122. }