Grid.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Reports\Block\Adminhtml\Sales\Coupons;
  7. /**
  8. * Adminhtml coupons report grid block
  9. *
  10. * @author Magento Core Team <core@magentocommerce.com>
  11. * @SuppressWarnings(PHPMD.DepthOfInheritance)
  12. */
  13. class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
  14. {
  15. /**
  16. * GROUP BY criteria
  17. *
  18. * @var string
  19. */
  20. protected $_columnGroupBy = 'period';
  21. /**
  22. * {@inheritdoc}
  23. * @codeCoverageIgnore
  24. */
  25. protected function _construct()
  26. {
  27. parent::_construct();
  28. $this->setCountTotals(true);
  29. $this->setCountSubTotals(true);
  30. }
  31. /**
  32. * {@inheritdoc}
  33. */
  34. public function getResourceCollectionName()
  35. {
  36. if ($this->getFilterData()->getData('report_type') == 'updated_at_order') {
  37. return \Magento\SalesRule\Model\ResourceModel\Report\Updatedat\Collection::class;
  38. } else {
  39. return \Magento\SalesRule\Model\ResourceModel\Report\Collection::class;
  40. }
  41. }
  42. /**
  43. * {@inheritdoc}
  44. * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  45. */
  46. protected function _prepareColumns()
  47. {
  48. $this->addColumn(
  49. 'period',
  50. [
  51. 'header' => __('Interval'),
  52. 'index' => 'period',
  53. 'sortable' => false,
  54. 'period_type' => $this->getPeriodType(),
  55. 'renderer' => \Magento\Reports\Block\Adminhtml\Sales\Grid\Column\Renderer\Date::class,
  56. 'totals_label' => __('Total'),
  57. 'subtotals_label' => __('Subtotal'),
  58. 'html_decorators' => ['nobr'],
  59. 'header_css_class' => 'col-period',
  60. 'column_css_class' => 'col-period'
  61. ]
  62. );
  63. $this->addColumn(
  64. 'coupon_code',
  65. [
  66. 'header' => __('Coupon Code'),
  67. 'sortable' => false,
  68. 'index' => 'coupon_code',
  69. 'header_css_class' => 'col-code',
  70. 'column_css_class' => 'col-code'
  71. ]
  72. );
  73. $this->addColumn(
  74. 'rule_name',
  75. [
  76. 'header' => __('Price Rule'),
  77. 'sortable' => false,
  78. 'index' => 'rule_name',
  79. 'header_css_class' => 'col-rule',
  80. 'column_css_class' => 'col-rule'
  81. ]
  82. );
  83. $this->addColumn(
  84. 'coupon_uses',
  85. [
  86. 'header' => __('Uses'),
  87. 'sortable' => false,
  88. 'index' => 'coupon_uses',
  89. 'total' => 'sum',
  90. 'type' => 'number',
  91. 'header_css_class' => 'col-users',
  92. 'column_css_class' => 'col-users'
  93. ]
  94. );
  95. if ($this->getFilterData()->getStoreIds()) {
  96. $this->setStoreIds(explode(',', $this->getFilterData()->getStoreIds()));
  97. }
  98. $currencyCode = $this->getCurrentCurrencyCode();
  99. $rate = $this->getRate($currencyCode);
  100. $this->addColumn(
  101. 'subtotal_amount',
  102. [
  103. 'header' => __('Sales Subtotal'),
  104. 'sortable' => false,
  105. 'type' => 'currency',
  106. 'currency_code' => $currencyCode,
  107. 'total' => 'sum',
  108. 'index' => 'subtotal_amount',
  109. 'rate' => $rate,
  110. 'header_css_class' => 'col-sales',
  111. 'column_css_class' => 'col-sales'
  112. ]
  113. );
  114. $this->addColumn(
  115. 'discount_amount',
  116. [
  117. 'header' => __('Sales Discount'),
  118. 'sortable' => false,
  119. 'type' => 'currency',
  120. 'currency_code' => $currencyCode,
  121. 'total' => 'sum',
  122. 'index' => 'discount_amount',
  123. 'rate' => $rate,
  124. 'header_css_class' => 'col-sales-discount',
  125. 'column_css_class' => 'col-sales-discount'
  126. ]
  127. );
  128. $this->addColumn(
  129. 'total_amount',
  130. [
  131. 'header' => __('Sales Total'),
  132. 'sortable' => false,
  133. 'type' => 'currency',
  134. 'currency_code' => $currencyCode,
  135. 'total' => 'sum',
  136. 'index' => 'total_amount',
  137. 'rate' => $rate,
  138. 'header_css_class' => 'col-total-amount',
  139. 'column_css_class' => 'col-total-amount'
  140. ]
  141. );
  142. $this->addColumn(
  143. 'subtotal_amount_actual',
  144. [
  145. 'header' => __('Subtotal'),
  146. 'sortable' => false,
  147. 'type' => 'currency',
  148. 'currency_code' => $currencyCode,
  149. 'total' => 'sum',
  150. 'index' => 'subtotal_amount_actual',
  151. 'rate' => $rate,
  152. 'header_css_class' => 'col-subtotal',
  153. 'column_css_class' => 'col-subtotal'
  154. ]
  155. );
  156. $this->addColumn(
  157. 'discount_amount_actual',
  158. [
  159. 'header' => __('Discount'),
  160. 'sortable' => false,
  161. 'type' => 'currency',
  162. 'currency_code' => $currencyCode,
  163. 'total' => 'sum',
  164. 'index' => 'discount_amount_actual',
  165. 'rate' => $rate,
  166. 'header_css_class' => 'col-discount',
  167. 'column_css_class' => 'col-discount'
  168. ]
  169. );
  170. $this->addColumn(
  171. 'total_amount_actual',
  172. [
  173. 'header' => __('Total'),
  174. 'sortable' => false,
  175. 'type' => 'currency',
  176. 'currency_code' => $currencyCode,
  177. 'total' => 'sum',
  178. 'index' => 'total_amount_actual',
  179. 'rate' => $rate,
  180. 'header_css_class' => 'col-total',
  181. 'column_css_class' => 'col-total'
  182. ]
  183. );
  184. $this->addExportType('*/*/exportCouponsCsv', __('CSV'));
  185. $this->addExportType('*/*/exportCouponsExcel', __('Excel XML'));
  186. return parent::_prepareColumns();
  187. }
  188. /**
  189. * Add price rule filter
  190. *
  191. * @param \Magento\Reports\Model\ResourceModel\Report\Collection\AbstractCollection $collection
  192. * @param \Magento\Framework\DataObject $filterData
  193. * @return \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
  194. */
  195. protected function _addCustomFilter($collection, $filterData)
  196. {
  197. if ($filterData->getPriceRuleType()) {
  198. $rulesList = $filterData->getData('rules_list');
  199. if (isset($rulesList[0])) {
  200. $rulesIds = explode(',', $rulesList[0]);
  201. $collection->addRuleFilter($rulesIds);
  202. }
  203. }
  204. return parent::_addCustomFilter($filterData, $collection);
  205. }
  206. }