PageRenderTime 42ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 1ms

/app/code/local/Ced/CsMarketplace/Helper/Report.php

https://gitlab.com/vincent.perdereau/picandparts
PHP | 335 lines | 273 code | 24 blank | 38 comment | 43 complexity | 52a584620fa6bcaf43775731e41b7179 MD5 | raw file
  1. <?php
  2. /**
  3. * CedCommerce
  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. *
  12. * @category Ced;
  13. * @package Ced_CsMarketplace
  14. * @author CedCommerce Core Team <coreteam@cedcommerce.com>
  15. * @copyright Copyright CedCommerce (http://cedcommerce.com/)
  16. * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  17. */
  18. class Ced_CsMarketplace_Helper_Report extends Mage_Core_Helper_Abstract
  19. {
  20. protected $_vendor = null;
  21. public function getTotalOrdersByCountry($vendor) {
  22. $result = array();
  23. if ($vendor && $vendor->getId()) {
  24. foreach($vendor->getAssociatedOrders() as $order) {
  25. $countryId = strtolower($order->getShippingCountryCode());
  26. if(!strlen($countryId)) {
  27. $mainOrder = Mage::getModel('sales/order')->loadByIncrementId($order->getOrderId());
  28. if ($mainOrder && $mainOrder->getId()) {
  29. $countryId = strtolower($mainOrder->getBillingAddress()->getData('country_id'));
  30. }
  31. }
  32. if(strlen($countryId)) {
  33. if (isset($result[$countryId]['total']))
  34. $result[$countryId]['total'] += 1;
  35. else
  36. $result[$countryId]['total'] = 1;
  37. if (isset($result[$countryId]['amount']))
  38. $result[$countryId]['amount'] += (double) $order->getOrderTotal();
  39. else
  40. $result[$countryId]['amount'] = (double) $order->getOrderTotal();
  41. }
  42. }
  43. }
  44. return $result;
  45. }
  46. public function getChartData($vendor, $type='order', $range = 'day') {
  47. $results = array();
  48. if($vendor && $vendor->getId()) {
  49. $this->_vendor = $vendor;
  50. switch ($range) {
  51. default:
  52. case 'day':
  53. for ($i = 0; $i < 24; $i++) {
  54. $results[$i] = array(
  55. 'hour' => $i,
  56. 'total' => 0
  57. );
  58. }
  59. $model = $this->_getReportModel($type,$range);
  60. foreach ($model as $result) {
  61. $results[$result['hour']] = array(
  62. 'hour' => $result['hour'],
  63. 'total' => $result['total']
  64. );
  65. }
  66. break;
  67. case 'week':
  68. $date_start = strtotime('-' . date('w') . ' days');
  69. for ($i = 0; $i < 7; $i++) {
  70. $date = date('Y-m-d', $date_start + ($i * 86400));
  71. $results[date('w', strtotime($date))] = array(
  72. 'day' => date('D', strtotime($date)),
  73. 'total' => 0
  74. );
  75. }
  76. $model = $this->_getReportModel($type,$range);
  77. foreach ($model as $result) {
  78. $results[date('w', strtotime($result['created_at']))] = array(
  79. 'day' => date('D', strtotime($result['created_at'])),
  80. 'total' => $result['total']
  81. );
  82. }
  83. break;
  84. case 'month':
  85. for ($i = 1; $i <= date('t'); $i++) {
  86. $date = date('Y') . '-' . date('m') . '-' . $i;
  87. $results[date('j', strtotime($date))] = array(
  88. 'day' => date('d', strtotime($date)),
  89. 'total' => 0
  90. );
  91. }
  92. $model = $this->_getReportModel($type,$range);
  93. foreach ($model as $result) {
  94. //print_r($result);die;
  95. $results[date('j', strtotime($result['created_at']))] = array(
  96. 'day' => date('d', strtotime($result['created_at'])),
  97. 'total' => $result['total']
  98. );
  99. }
  100. break;
  101. case 'year':
  102. for ($i = 1; $i <= 12; $i++) {
  103. $results[$i] = array(
  104. 'month' => date('M', mktime(0, 0, 0, $i)),
  105. 'total' => 0
  106. );
  107. }
  108. $model = $this->_getReportModel($type,$range);
  109. foreach ($model as $result) {
  110. $results[date('n', strtotime($result['created_at']))] = array(
  111. 'month' => date('M', strtotime($result['created_at'])),
  112. 'total' => $result['total']
  113. );
  114. }
  115. break;
  116. }
  117. }
  118. //print_r($results);die;
  119. return $results;
  120. }
  121. protected function _getReportModel($model = 'order', $range = 'day') {
  122. if ($this->_vendor != null && $this->_vendor && $this->_vendor->getId()) {
  123. $coreResource = Mage::getSingleton('core/resource');
  124. $readConnection = $coreResource->getConnection('read');
  125. $model = $this->_vendor->getAssociatedOrders();
  126. switch($model) {
  127. default:
  128. case 'order' : switch($range) {
  129. default:
  130. case 'day' :
  131. $model->getSelect()
  132. ->reset(Zend_Db_Select::COLUMNS)
  133. ->columns("COUNT(*) AS total, HOUR(created_at) AS hour")
  134. ->where("DATE(created_at) = DATE(NOW())")
  135. ->group("HOUR(created_at)")
  136. ->order("created_at ASC");
  137. //echo $model->getSelect();die;
  138. break;
  139. case 'week' :
  140. $date_start = strtotime('-' . date('w') . ' days');
  141. $model->getSelect()
  142. ->reset(Zend_Db_Select::COLUMNS)
  143. ->columns("created_at, COUNT(*) AS total")
  144. ->where("DATE(created_at) >= DATE('" . date('Y-m-d', $date_start) . "')")
  145. ->group("DAYNAME(created_at)");
  146. //echo $model->getSelect();die;
  147. break;
  148. case 'month':
  149. $model->getSelect()
  150. ->reset(Zend_Db_Select::COLUMNS)
  151. ->columns("created_at, COUNT(*) AS total")
  152. ->where("DATE(created_at) >= '" . date('Y') . '-' . date('m') . '-1' . "'")
  153. ->group("DATE(created_at)");
  154. //echo $model->getSelect();
  155. break;
  156. case 'year' :
  157. $model->getSelect()
  158. ->reset(Zend_Db_Select::COLUMNS)
  159. ->columns("created_at, COUNT(*) AS total")
  160. ->where("YEAR(created_at) = YEAR(NOW())")
  161. ->group("MONTH(created_at)");
  162. //echo $model->getSelect();die;
  163. break;
  164. }
  165. break;
  166. case 'qty' : $model = $this->_vendor->getAssociatedOrders(); break;
  167. case 'sale' : $model = $this->_vendor->getAssociatedOrders(); break;
  168. }
  169. //$model = $readConnection->fetchAll($query);
  170. return $model && count($model)?$model->getData():array();
  171. }
  172. return false;
  173. }
  174. public function getVordersReportModel($vendor,$range = 'day',$from_date,$to_date,$status=Ced_CsMarketplace_Model_Vorders::STATE_PAID) {
  175. $this->_vendor=$vendor;
  176. if ($this->_vendor != null && $this->_vendor && $this->_vendor->getId()) {
  177. $from_date=date("Y-m-d 00:00:00",strtotime($from_date));
  178. $to_date=date("Y-m-d 59:59:59",strtotime($to_date));
  179. $coreResource = Mage::getSingleton('core/resource');
  180. $readConnection = $coreResource->getConnection('read');
  181. if($status==Ced_CsMarketplace_Model_Vorders::STATE_OPEN)
  182. $order_status=Mage_Sales_Model_Order_Invoice::STATE_PAID;
  183. if($status==Ced_CsMarketplace_Model_Vorders::STATE_PAID)
  184. $order_status=Mage_Sales_Model_Order_Invoice::STATE_PAID;
  185. if($status==Ced_CsMarketplace_Model_Vorders::STATE_CANCELED)
  186. $order_status=Mage_Sales_Model_Order_Invoice::STATE_CANCELED;
  187. $model = $this->_vendor->getAssociatedOrders();
  188. switch($range) {
  189. default:$model = $this->_vendor->getAssociatedOrders(); break;
  190. case 'day' :
  191. $model->getSelect()
  192. ->reset(Zend_Db_Select::COLUMNS)
  193. ->columns("DATE(created_at) AS period,COUNT(*) AS order_count,SUM(product_qty) AS product_qty,SUM(`order_total`) as order_total,SUM(`shop_commission_fee`) AS commission_fee,(SUM(`order_total`) - SUM(`shop_commission_fee`)) AS net_earned")
  194. ->where("created_at>='".$from_date."'")
  195. ->where("created_at<='".$to_date."'")
  196. ->group("DATE(created_at)")
  197. ->order("created_at ASC");
  198. if($status!="*"){
  199. $model->getSelect()
  200. ->where("payment_state='".$status."'")
  201. ->where("order_payment_state='".$order_status."'");
  202. }
  203. /* echo count($model);
  204. echo $model->getSize(); */
  205. /* echo $model->getSelect();die; */
  206. break;
  207. case 'month':
  208. $model->getSelect()
  209. ->reset(Zend_Db_Select::COLUMNS)
  210. ->columns("CONCAT(MONTH(created_at),CONCAT('-',YEAR(created_at))) AS period,COUNT(*) AS order_count,SUM(product_qty) AS product_qty, SUM(`order_total`) AS order_total, SUM(`shop_commission_fee`) AS commission_fee,(SUM(`order_total`) - SUM(`shop_commission_fee`)) AS net_earned")
  211. ->where("created_at >='".$from_date."' AND created_at<='".$to_date."'")
  212. ->group("YEAR(created_at), MONTH(created_at)");
  213. if($status!="*"){
  214. $model->getSelect()
  215. ->where("payment_state='".$status."'")
  216. ->where("order_payment_state='".$order_status."'");
  217. }
  218. //echo $model->getSelect();die;
  219. break;
  220. case 'year' :
  221. $model->getSelect()
  222. ->reset(Zend_Db_Select::COLUMNS)
  223. ->columns("YEAR(created_at) AS period,COUNT(*) AS order_count, SUM(`order_total`) AS order_total,SUM(product_qty) AS product_qty,SUM(`shop_commission_fee`) AS commission_fee,(SUM(`order_total`) - SUM(`shop_commission_fee`)) AS net_earned")
  224. ->where("created_at >='".$from_date."' AND created_at<='".$to_date."'")
  225. ->group("YEAR(created_at)");
  226. if($status!="*"){
  227. $model->getSelect()
  228. ->where("payment_state='".$status."'")
  229. ->where("order_payment_state='".$order_status."'");
  230. }
  231. //echo $model->getSelect();die;
  232. break;
  233. }
  234. //$model = $readConnection->fetchAll($query);
  235. return $model && count($model)?$model:array();
  236. }
  237. return false;
  238. }
  239. public function getVproductsReportModel($vendorId,$from_date = '',$to_date = '' , $group = true) {
  240. $ordersCollection=Mage::getResourceModel('reports/product_sold_collection');
  241. $from = $to = '';
  242. if ($from_date != '' && $to_date != '') {
  243. $from=date("Y-m-d 00:00:00",strtotime($from_date));
  244. $to=date("Y-m-d 59:59:59",strtotime($to_date));
  245. }
  246. $compositeTypeIds = Mage::getSingleton('catalog/product_type')->getCompositeTypes();
  247. $product = Mage::getResourceSingleton('catalog/product');
  248. $coreResource = Mage::getSingleton('core/resource');
  249. $adapter = $coreResource->getConnection('read');
  250. $orderTableAliasName = $adapter->quoteIdentifier('order');
  251. $orderJoinCondition = array(
  252. $orderTableAliasName . '.entity_id = order_items.order_id',
  253. $adapter->quoteInto("{$orderTableAliasName}.state <> ?", Mage_Sales_Model_Order::STATE_CANCELED),
  254. );
  255. $productJoinCondition = array(
  256. $adapter->quoteInto('(e.type_id NOT IN (?))', $compositeTypeIds),
  257. 'e.entity_id = order_items.product_id',
  258. $adapter->quoteInto('e.entity_type_id = ?', $product->getTypeId())
  259. );
  260. if (($from != '' && $to != '') || $group) {
  261. $fieldName = $orderTableAliasName . '.created_at';
  262. $orderJoinCondition[] = $this->_prepareBetweenSql($fieldName, $from, $to);
  263. }
  264. $ordersCollection->getSelect()->reset()
  265. ->from(
  266. array('order_items' =>$coreResource->getTableName('sales/order_item')),
  267. array(
  268. 'ordered_qty' => 'SUM(order_items.qty_ordered)',
  269. 'order_item_name' => 'order_items.name',
  270. 'order_item_total_sales' => 'SUM(order_items.row_total)',
  271. 'sku'=>'order_items.sku'
  272. ))
  273. ->joinInner(
  274. array('order' => $coreResource->getTableName('sales/order')),
  275. implode(' AND ', $orderJoinCondition),
  276. array()
  277. )
  278. ->joinLeft(
  279. array('e' => $product->getEntityTable()),
  280. implode(' AND ', $productJoinCondition),
  281. array(
  282. 'entity_id' => 'order_items.product_id',
  283. 'type_id' => 'e.type_id',
  284. ))
  285. ->where('parent_item_id IS NULL')
  286. ->where('vendor_id="'.$vendorId.'"');
  287. if($group) $ordersCollection->getSelect()->group('order_items.product_id');
  288. $ordersCollection->getSelect()->having('SUM(order_items.qty_ordered) > ?', 0);
  289. /* echo $ordersCollection->getSelect();die; */
  290. return $ordersCollection;
  291. }
  292. /**
  293. * Prepare between sql
  294. *
  295. * @param string $fieldName Field name with table suffix ('created_at' or 'main_table.created_at')
  296. * @param string $from
  297. * @param string $to
  298. * @return string Formatted sql string
  299. */
  300. protected function _prepareBetweenSql($fieldName, $from, $to)
  301. {
  302. $coreResource = Mage::getSingleton('core/resource');
  303. $adapter = $coreResource->getConnection('read');
  304. return sprintf('(%s >= %s AND %s <= %s)',
  305. $fieldName,
  306. $adapter->quote($from),
  307. $fieldName,
  308. $adapter->quote($to)
  309. );
  310. }
  311. }