PageRenderTime 92ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/app/code/core/Mage/Sales/Model/Resource/Report/Order/Createdat.php

https://bitbucket.org/acidel/buykoala
PHP | 260 lines | 186 code | 19 blank | 55 comment | 5 complexity | 75e88b5ddceac9f98e1c19aa58bd34bd MD5 | raw file
  1. <?php
  2. /**
  3. * Magento
  4. *
  5. * NOTICE OF LICENSE
  6. *
  7. * This source file is subject to the Open Software License (OSL 3.0)
  8. * that is bundled with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://opensource.org/licenses/osl-3.0.php
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@magentocommerce.com so we can send you a copy immediately.
  14. *
  15. * DISCLAIMER
  16. *
  17. * Do not edit or add to this file if you wish to upgrade Magento to newer
  18. * versions in the future. If you wish to customize Magento for your
  19. * needs please refer to http://www.magentocommerce.com for more information.
  20. *
  21. * @category Mage
  22. * @package Mage_Sales
  23. * @copyright Copyright (c) 2011 Magento Inc. (http://www.magentocommerce.com)
  24. * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  25. */
  26. /**
  27. * Order entity resource model with aggregation by created at
  28. *
  29. * @category Mage
  30. * @package Mage_Sales
  31. * @author Magento Core Team <core@magentocommerce.com>
  32. */
  33. class Mage_Sales_Model_Resource_Report_Order_Createdat extends Mage_Sales_Model_Resource_Report_Abstract
  34. {
  35. /**
  36. * Model initialization
  37. *
  38. */
  39. protected function _construct()
  40. {
  41. $this->_init('sales/order_aggregated_created', 'id');
  42. }
  43. /**
  44. * Aggregate Orders data by order created at
  45. *
  46. * @param mixed $from
  47. * @param mixed $to
  48. * @return Mage_Sales_Model_Resource_Report_Order_Createdat
  49. */
  50. public function aggregate($from = null, $to = null)
  51. {
  52. return $this->_aggregateByField('created_at', $from, $to);
  53. }
  54. /**
  55. * Aggregate Orders data by custom field
  56. *
  57. * @throws Exception
  58. * @param string $aggregationField
  59. * @param mixed $from
  60. * @param mixed $to
  61. * @return Mage_Sales_Model_Resource_Report_Order_Createdat
  62. */
  63. protected function _aggregateByField($aggregationField, $from, $to)
  64. {
  65. // convert input dates to UTC to be comparable with DATETIME fields in DB
  66. $from = $this->_dateToUtc($from);
  67. $to = $this->_dateToUtc($to);
  68. $this->_checkDates($from, $to);
  69. $adapter = $this->_getWriteAdapter();
  70. $adapter->beginTransaction();
  71. try {
  72. if ($from !== null || $to !== null) {
  73. $subSelect = $this->_getTableDateRangeSelect(
  74. $this->getTable('sales/order'),
  75. 'created_at', 'updated_at', $from, $to
  76. );
  77. } else {
  78. $subSelect = null;
  79. }
  80. $this->_clearTableByDateRange($this->getMainTable(), $from, $to, $subSelect);
  81. $periodExpr = $adapter->getDatePartSql($this->getStoreTZOffsetQuery(
  82. array('o' => $this->getTable('sales/order')),
  83. 'o.' . $aggregationField,
  84. $from, $to
  85. ));
  86. // Columns list
  87. $columns = array(
  88. // convert dates from UTC to current admin timezone
  89. 'period' => $periodExpr,
  90. 'store_id' => 'o.store_id',
  91. 'order_status' => 'o.status',
  92. 'orders_count' => new Zend_Db_Expr('COUNT(o.entity_id)'),
  93. 'total_qty_ordered' => new Zend_Db_Expr('SUM(oi.total_qty_ordered)'),
  94. 'total_qty_invoiced' => new Zend_Db_Expr('SUM(oi.total_qty_invoiced)'),
  95. 'total_income_amount' => new Zend_Db_Expr(
  96. sprintf('SUM((%s - %s) * %s)',
  97. $adapter->getIfNullSql('o.base_grand_total', 0),
  98. $adapter->getIfNullSql('o.base_total_canceled',0),
  99. $adapter->getIfNullSql('o.base_to_global_rate',0)
  100. )
  101. ),
  102. 'total_revenue_amount' => new Zend_Db_Expr(
  103. sprintf('SUM((%s - %s - %s - (%s - %s - %s)) * %s)',
  104. $adapter->getIfNullSql('o.base_total_invoiced', 0),
  105. $adapter->getIfNullSql('o.base_tax_invoiced', 0),
  106. $adapter->getIfNullSql('o.base_shipping_invoiced', 0),
  107. $adapter->getIfNullSql('o.base_total_refunded', 0),
  108. $adapter->getIfNullSql('o.base_tax_refunded', 0),
  109. $adapter->getIfNullSql('o.base_shipping_refunded', 0),
  110. $adapter->getIfNullSql('o.base_to_global_rate', 0)
  111. )
  112. ),
  113. 'total_profit_amount' => new Zend_Db_Expr(
  114. sprintf('SUM((%s - %s - %s - %s - %s) * %s)',
  115. $adapter->getIfNullSql('o.base_total_paid', 0),
  116. $adapter->getIfNullSql('o.base_total_refunded', 0),
  117. $adapter->getIfNullSql('o.base_tax_invoiced', 0),
  118. $adapter->getIfNullSql('o.base_shipping_invoiced', 0),
  119. $adapter->getIfNullSql('o.base_total_invoiced_cost', 0),
  120. $adapter->getIfNullSql('o.base_to_global_rate', 0)
  121. )
  122. ),
  123. 'total_invoiced_amount' => new Zend_Db_Expr(
  124. sprintf('SUM(%s * %s)',
  125. $adapter->getIfNullSql('o.base_total_invoiced', 0),
  126. $adapter->getIfNullSql('o.base_to_global_rate', 0)
  127. )
  128. ),
  129. 'total_canceled_amount' => new Zend_Db_Expr(
  130. sprintf('SUM(%s * %s)',
  131. $adapter->getIfNullSql('o.base_total_canceled', 0),
  132. $adapter->getIfNullSql('o.base_to_global_rate', 0)
  133. )
  134. ),
  135. 'total_paid_amount' => new Zend_Db_Expr(
  136. sprintf('SUM(%s * %s)',
  137. $adapter->getIfNullSql('o.base_total_paid', 0),
  138. $adapter->getIfNullSql('o.base_to_global_rate', 0)
  139. )
  140. ),
  141. 'total_refunded_amount' => new Zend_Db_Expr(
  142. sprintf('SUM(%s * %s)',
  143. $adapter->getIfNullSql('o.base_total_refunded', 0),
  144. $adapter->getIfNullSql('o.base_to_global_rate', 0)
  145. )
  146. ),
  147. 'total_tax_amount' => new Zend_Db_Expr(
  148. sprintf('SUM((%s - %s) * %s)',
  149. $adapter->getIfNullSql('o.base_tax_amount', 0),
  150. $adapter->getIfNullSql('o.base_tax_canceled', 0),
  151. $adapter->getIfNullSql('o.base_to_global_rate', 0)
  152. )
  153. ),
  154. 'total_tax_amount_actual' => new Zend_Db_Expr(
  155. sprintf('SUM((%s -%s) * %s)',
  156. $adapter->getIfNullSql('o.base_tax_invoiced', 0),
  157. $adapter->getIfNullSql('o.base_tax_refunded', 0),
  158. $adapter->getIfNullSql('o.base_to_global_rate', 0)
  159. )
  160. ),
  161. 'total_shipping_amount' => new Zend_Db_Expr(
  162. sprintf('SUM((%s - %s) * %s)',
  163. $adapter->getIfNullSql('o.base_shipping_amount', 0),
  164. $adapter->getIfNullSql('o.base_shipping_canceled', 0),
  165. $adapter->getIfNullSql('o.base_to_global_rate', 0)
  166. )
  167. ),
  168. 'total_shipping_amount_actual' => new Zend_Db_Expr(
  169. sprintf('SUM((%s - %s) * %s)',
  170. $adapter->getIfNullSql('o.base_shipping_invoiced', 0),
  171. $adapter->getIfNullSql('o.base_shipping_refunded', 0),
  172. $adapter->getIfNullSql('o.base_to_global_rate', 0)
  173. )
  174. ),
  175. 'total_discount_amount' => new Zend_Db_Expr(
  176. sprintf('SUM((ABS(%s) - %s) * %s)',
  177. $adapter->getIfNullSql('o.base_discount_amount', 0),
  178. $adapter->getIfNullSql('o.base_discount_canceled', 0),
  179. $adapter->getIfNullSql('o.base_to_global_rate', 0)
  180. )
  181. ),
  182. 'total_discount_amount_actual' => new Zend_Db_Expr(
  183. sprintf('SUM((%s - %s) * %s)',
  184. $adapter->getIfNullSql('o.base_discount_invoiced', 0),
  185. $adapter->getIfNullSql('o.base_discount_refunded', 0),
  186. $adapter->getIfNullSql('o.base_to_global_rate', 0)
  187. )
  188. )
  189. );
  190. $select = $adapter->select();
  191. $selectOrderItem = $adapter->select();
  192. $qtyCanceledExpr = $adapter->getIfNullSql('qty_canceled', 0);
  193. $cols = array(
  194. 'order_id' => 'order_id',
  195. 'total_qty_ordered' => new Zend_Db_expr("SUM(qty_ordered - {$qtyCanceledExpr})"),
  196. 'total_qty_invoiced' => new Zend_Db_expr('SUM(qty_invoiced)'),
  197. );
  198. $selectOrderItem->from($this->getTable('sales/order_item'), $cols)
  199. ->where('parent_item_id IS NULL')
  200. ->group('order_id');
  201. $select->from(array('o' => $this->getTable('sales/order')), $columns)
  202. ->join(array('oi' => $selectOrderItem), 'oi.order_id = o.entity_id', array())
  203. ->where('o.state NOT IN (?)', array(
  204. Mage_Sales_Model_Order::STATE_PENDING_PAYMENT,
  205. Mage_Sales_Model_Order::STATE_NEW
  206. ));
  207. if ($subSelect !== null) {
  208. $select->having($this->_makeConditionFromDateRangeSelect($subSelect, 'period'));
  209. }
  210. $select->group(array(
  211. $periodExpr,
  212. 'o.store_id',
  213. 'o.status',
  214. ));
  215. $adapter->query($select->insertFromSelect($this->getMainTable(), array_keys($columns)));
  216. // setup all columns to select SUM() except period, store_id and order_status
  217. foreach ($columns as $k => $v) {
  218. $columns[$k] = new Zend_Db_expr('SUM(' . $k . ')');
  219. }
  220. $columns['period'] = 'period';
  221. $columns['store_id'] = new Zend_Db_Expr(Mage_Core_Model_App::ADMIN_STORE_ID);
  222. $columns['order_status'] = 'order_status';
  223. $select->reset();
  224. $select->from($this->getMainTable(), $columns)
  225. ->where('store_id <> 0');
  226. if ($subSelect !== null) {
  227. $select->where($this->_makeConditionFromDateRangeSelect($subSelect, 'period'));
  228. }
  229. $select->group(array(
  230. 'period',
  231. 'order_status'
  232. ));
  233. $adapter->query($select->insertFromSelect($this->getMainTable(), array_keys($columns)));
  234. $adapter->commit();
  235. } catch (Exception $e) {
  236. $adapter->rollBack();
  237. throw $e;
  238. }
  239. return $this;
  240. }
  241. }