Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
All Data Structures Namespaces Files Functions Variables Pages
Createdat.php
Go to the documentation of this file.
1 <?php
8 
15 {
21  protected function _construct()
22  {
23  $this->_init('salesrule_coupon_aggregated', 'id');
24  }
25 
33  public function aggregate($from = null, $to = null)
34  {
35  return $this->_aggregateByOrder('created_at', $from, $to);
36  }
37 
48  protected function _aggregateByOrder($aggregationField, $from, $to)
49  {
50  $table = $this->getMainTable();
51  $sourceTable = $this->getTable('sales_order');
52  $connection = $this->getConnection();
53  $salesAdapter = $this->_resources->getConnection('sales');
54  $connection->beginTransaction();
55 
56  try {
57  if ($from !== null || $to !== null) {
58  $subSelect = $this->_getTableDateRangeSelect($sourceTable, 'created_at', 'updated_at', $from, $to);
59  } else {
60  $subSelect = null;
61  }
62 
63  $this->_clearTableByDateRange($table, $from, $to, $subSelect, false, $salesAdapter);
64 
65  // convert dates to current admin timezone
66  $periodExpr = $connection->getDatePartSql(
67  $this->getStoreTZOffsetQuery($sourceTable, $aggregationField, $from, $to, null, $salesAdapter)
68  );
69 
70  $columns = [
71  'period' => $periodExpr,
72  'store_id' => 'store_id',
73  'order_status' => 'status',
74  'coupon_code' => 'coupon_code',
75  'rule_name' => 'coupon_rule_name',
76  'coupon_uses' => 'COUNT(entity_id)',
77  'subtotal_amount' => $connection->getIfNullSql(
78  'SUM((base_subtotal - ' . $connection->getIfNullSql(
79  'base_subtotal_canceled',
80  0
81  ) . ') * base_to_global_rate)',
82  0
83  ),
84  'discount_amount' => $connection->getIfNullSql(
85  'SUM((ABS(base_discount_amount) - ' . $connection->getIfNullSql(
86  'base_discount_canceled',
87  0
88  ) . ') * base_to_global_rate)',
89  0
90  ),
91  'total_amount' => $connection->getIfNullSql(
92  'SUM((base_subtotal - ' . $connection->getIfNullSql(
93  'base_subtotal_canceled',
94  0
95  ) . ' - ' . $connection->getIfNullSql(
96  'ABS(base_discount_amount) - ABS('
97  . $connection->getIfNullSql('base_discount_canceled', 0) . ')',
98  0
99  ) . ' + ' . $connection->getIfNullSql(
100  'base_tax_amount - ' . $connection->getIfNullSql('base_tax_canceled', 0),
101  0
102  ) . ')
103  * base_to_global_rate)',
104  0
105  ),
106  'subtotal_amount_actual' => $connection->getIfNullSql(
107  'SUM((base_subtotal_invoiced - ' . $connection->getIfNullSql(
108  'base_subtotal_refunded',
109  0
110  ) . ') * base_to_global_rate)',
111  0
112  ),
113  'discount_amount_actual' => $connection->getIfNullSql(
114  'SUM((base_discount_invoiced - ' . $connection->getIfNullSql(
115  'base_discount_refunded',
116  0
117  ) . ')
118  * base_to_global_rate)',
119  0
120  ),
121  'total_amount_actual' => $connection->getIfNullSql(
122  'SUM((base_subtotal_invoiced - ' . $connection->getIfNullSql(
123  'base_subtotal_refunded',
124  0
125  ) . ' - ' . $connection->getIfNullSql(
126  'ABS(base_discount_invoiced) - ABS('
127  . $connection->getIfNullSql('base_discount_refunded', 0) . ')',
128  0
129  ) . ' + ' . $connection->getIfNullSql(
130  'base_tax_invoiced - ' . $connection->getIfNullSql('base_tax_refunded', 0),
131  0
132  ) . ') * base_to_global_rate)',
133  0
134  ),
135  ];
136 
137  $select = $connection->select();
138  $select->from(['source_table' => $sourceTable], $columns)->where('coupon_code IS NOT NULL');
139 
140  if ($subSelect !== null) {
141  $select->having($this->_makeConditionFromDateRangeSelect($subSelect, 'period', $salesAdapter));
142  }
143 
144  $select->group([$periodExpr, 'store_id', 'status', 'coupon_code']);
145 
146  $select->having('COUNT(entity_id) > 0');
147 
148  $aggregatedData = $salesAdapter->fetchAll($select);
149 
150  if ($aggregatedData) {
151  $connection->insertOnDuplicate($table, $aggregatedData, array_keys($columns));
152  }
153 
154  $select->reset();
155 
156  $columns = [
157  'period' => 'period',
158  'store_id' => new \Zend_Db_Expr('0'),
159  'order_status' => 'order_status',
160  'coupon_code' => 'coupon_code',
161  'rule_name' => 'rule_name',
162  'coupon_uses' => 'SUM(coupon_uses)',
163  'subtotal_amount' => 'SUM(subtotal_amount)',
164  'discount_amount' => 'SUM(discount_amount)',
165  'total_amount' => 'SUM(total_amount)',
166  'subtotal_amount_actual' => 'SUM(subtotal_amount_actual)',
167  'discount_amount_actual' => 'SUM(discount_amount_actual)',
168  'total_amount_actual' => 'SUM(total_amount_actual)',
169  ];
170 
171  $select->from($table, $columns)->where('store_id <> 0');
172 
173  if ($subSelect !== null) {
174  $select->where($this->_makeConditionFromDateRangeSelect($subSelect, 'period', $salesAdapter));
175  }
176 
177  $select->group(['period', 'order_status', 'coupon_code']);
178 
179  $connection->query($select->insertFromSelect($table, array_keys($columns)));
180  $connection->commit();
181  } catch (\Exception $e) {
182  $connection->rollBack();
183  throw $e;
184  }
185 
186  return $this;
187  }
188 }
_makeConditionFromDateRangeSelect($select, $periodColumn, $connection=null)
getStoreTZOffsetQuery( $table, $column, $from=null, $to=null, $store=null, $connection=null)
_clearTableByDateRange( $table, $from=null, $to=null, $subSelect=null, $doNotUseTruncate=false, $connection=null)
$columns
Definition: default.phtml:15
_getTableDateRangeSelect( $table, $column, $whereColumn, $from=null, $to=null, $additionalWhere=[], $alias='date_range_table')
$connection
Definition: bulk.php:13
$table
Definition: trigger.php:14