Collection.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. namespace Dotdigitalgroup\Email\Model\ResourceModel\Campaign;
  3. class Collection extends
  4. \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
  5. {
  6. /**
  7. * @var string
  8. */
  9. protected $_idFieldName = 'id';
  10. /**
  11. * Initialize resource collection.
  12. *
  13. * @return null
  14. */
  15. public function _construct()
  16. {
  17. $this->_init(
  18. \Dotdigitalgroup\Email\Model\Campaign::class,
  19. \Dotdigitalgroup\Email\Model\ResourceModel\Campaign::class
  20. );
  21. }
  22. /**
  23. * Get campaign by quote id.
  24. *
  25. * @param int $quoteId
  26. * @param int $storeId
  27. *
  28. * @return \Dotdigitalgroup\Email\Model\Campaign|boolean
  29. */
  30. public function loadByQuoteId($quoteId, $storeId)
  31. {
  32. $collection = $this->addFieldToFilter('quote_id', $quoteId)
  33. ->addFieldToFilter('store_id', $storeId)
  34. ->setPageSize(1);
  35. if ($collection->getSize()) {
  36. return $collection->getFirstItem();
  37. }
  38. return false;
  39. }
  40. /**
  41. * Get campaign collection.
  42. *
  43. * @param array $storeIds
  44. * @param int $sendStatus
  45. * @param bool $sendIdCheck
  46. *
  47. * @return \Dotdigitalgroup\Email\Model\ResourceModel\Campaign\Collection
  48. */
  49. public function getEmailCampaignsByStoreIds($storeIds, $sendStatus = 0, $sendIdCheck = false)
  50. {
  51. $campaignCollection = $this->addFieldToFilter('send_status', $sendStatus)
  52. ->addFieldToFilter('campaign_id', ['notnull' => true])
  53. ->addFieldToFilter('store_id', ['in' => $storeIds]);
  54. //check for send id
  55. if ($sendIdCheck) {
  56. $campaignCollection->addFieldToFilter('send_id', ['notnull' => true])
  57. ->getSelect()
  58. ->group('send_id');
  59. } else {
  60. $campaignCollection->getSelect()
  61. ->order('campaign_id');
  62. }
  63. $campaignCollection->getSelect()
  64. ->limit(\Dotdigitalgroup\Email\Model\Sync\Campaign::SEND_EMAIL_CONTACT_LIMIT);
  65. return $campaignCollection;
  66. }
  67. /**
  68. * Get collection by event.
  69. *
  70. * @param string $event
  71. *
  72. * @return $this
  73. */
  74. public function getCollectionByEvent($event)
  75. {
  76. return $this->addFieldToFilter('event_name', $event);
  77. }
  78. /**
  79. * Get number of campaigns for contact by interval.
  80. *
  81. * @param string $email
  82. * @param array $updated
  83. *
  84. * @return int
  85. */
  86. public function getNumberOfCampaignsForContactByInterval($email, $updated)
  87. {
  88. return $this->addFieldToFilter('email', $email)
  89. ->addFieldToFilter('event_name', 'Lost Basket')
  90. ->addFieldToFilter('sent_at', $updated)
  91. ->count();
  92. }
  93. /**
  94. * @param string $email
  95. *
  96. * @return int
  97. */
  98. public function getNumberOfAcCampaignsWithStatusProcessingExistForContact($email)
  99. {
  100. return $this->addFieldToFilter('email', $email)
  101. ->addFieldToFilter('event_name', \Dotdigitalgroup\Email\Model\Campaign::CAMPAIGN_EVENT_LOST_BASKET)
  102. ->addFieldToFilter('send_status', \Dotdigitalgroup\Email\Model\Campaign::PROCESSING)
  103. ->getSize();
  104. }
  105. }