Collection.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. namespace Dotdigitalgroup\Email\Model\ResourceModel\Automation;
  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\Automation::class,
  19. \Dotdigitalgroup\Email\Model\ResourceModel\Automation::class
  20. );
  21. }
  22. /**
  23. * Get automation status type
  24. *
  25. * @return array
  26. */
  27. public function getAutomationStatusType()
  28. {
  29. $automationOrderStatusCollection = $this->addFieldToFilter(
  30. 'enrolment_status',
  31. \Dotdigitalgroup\Email\Model\Sync\Automation::AUTOMATION_STATUS_PENDING
  32. );
  33. $automationOrderStatusCollection
  34. ->addFieldToFilter(
  35. 'automation_type',
  36. ['like' => '%' . \Dotdigitalgroup\Email\Model\Sync\Automation::ORDER_STATUS_AUTOMATION . '%']
  37. )->getSelect()
  38. ->group('automation_type');
  39. return $automationOrderStatusCollection->getColumnValues('automation_type');
  40. }
  41. /**
  42. * Get collection by type.
  43. *
  44. * @param string $type
  45. * @param string $limit
  46. *
  47. * @return $this
  48. */
  49. public function getCollectionByType($type, $limit)
  50. {
  51. $collection = $this->addFieldToFilter(
  52. 'enrolment_status',
  53. [
  54. 'in' => [
  55. \Dotdigitalgroup\Email\Model\Sync\Automation::AUTOMATION_STATUS_PENDING,
  56. \Dotdigitalgroup\Email\Model\Sync\Automation::CONTACT_STATUS_CONFIRMED
  57. ]
  58. ]
  59. )->addFieldToFilter(
  60. 'automation_type',
  61. $type
  62. );
  63. //limit because of the each contact request to get the id
  64. $collection->getSelect()->limit($limit);
  65. return $collection;
  66. }
  67. /**
  68. * @param boolean $expireTime
  69. *
  70. * @return $this
  71. */
  72. public function getCollectionByPendingStatus($expireTime = false)
  73. {
  74. $collection = $this->addFieldToFilter(
  75. 'enrolment_status',
  76. \Dotdigitalgroup\Email\Model\Sync\Automation::CONTACT_STATUS_PENDING
  77. );
  78. if ($expireTime) {
  79. $collection->addFieldToFilter('created_at', ['lt' => $expireTime]);
  80. }
  81. return $collection;
  82. }
  83. /**
  84. * @return \Magento\Framework\DataObject
  85. */
  86. public function getLastPendingStatusCheckTime()
  87. {
  88. $collection = $this->addFieldToFilter(
  89. 'enrolment_status',
  90. \Dotdigitalgroup\Email\Model\Sync\Automation::CONTACT_STATUS_PENDING
  91. )->setOrder("updated_at")->setPageSize(1);
  92. return $collection->getFirstItem()->getUpdatedAt();
  93. }
  94. }