Collection.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\SalesRule\Model\ResourceModel\Coupon;
  7. use Magento\Backend\Block\Widget\Grid\Column;
  8. use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
  9. use Magento\SalesRule\Model\Rule;
  10. /**
  11. * SalesRule Model Resource Coupon_Collection
  12. *
  13. * @author Magento Core Team <core@magentocommerce.com>
  14. */
  15. class Collection extends AbstractCollection
  16. {
  17. /**
  18. * Constructor
  19. *
  20. * @return void
  21. */
  22. protected function _construct()
  23. {
  24. parent::_construct();
  25. $this->_init(\Magento\SalesRule\Model\Coupon::class, \Magento\SalesRule\Model\ResourceModel\Coupon::class);
  26. }
  27. /**
  28. * Add rule to filter
  29. *
  30. * @param Rule|int $rule
  31. * @return $this
  32. */
  33. public function addRuleToFilter($rule)
  34. {
  35. if ($rule instanceof Rule) {
  36. $ruleId = $rule->getId();
  37. } else {
  38. $ruleId = (int)$rule;
  39. }
  40. $this->addFieldToFilter('rule_id', $ruleId);
  41. return $this;
  42. }
  43. /**
  44. * Add rule IDs to filter
  45. *
  46. * @param array $ruleIds
  47. * @return $this
  48. */
  49. public function addRuleIdsToFilter(array $ruleIds)
  50. {
  51. $this->addFieldToFilter('rule_id', ['in' => $ruleIds]);
  52. return $this;
  53. }
  54. /**
  55. * Filter collection to be filled with auto-generated coupons only
  56. *
  57. * @return $this
  58. */
  59. public function addGeneratedCouponsFilter()
  60. {
  61. $this->addFieldToFilter('is_primary', ['null' => 1])->addFieldToFilter('type', '1');
  62. return $this;
  63. }
  64. /**
  65. * Callback function that filters collection by field "Used" from grid
  66. *
  67. * @param AbstractCollection $collection
  68. * @param Column $column
  69. * @return void
  70. */
  71. public function addIsUsedFilterCallback($collection, $column)
  72. {
  73. $filterValue = $column->getFilter()->getCondition();
  74. $expression = $this->getConnection()->getCheckSql('main_table.times_used > 0', 1, 0);
  75. $conditionSql = $this->_getConditionSql($expression, $filterValue);
  76. $collection->getSelect()->where($conditionSql);
  77. }
  78. }