PageRenderTime 44ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/admin/model/report/sale.php

https://gitlab.com/reclamare/mao
PHP | 438 lines | 345 code | 93 blank | 0 comment | 53 complexity | 66b0353b6675d4a73f3cc8cbe5625171 MD5 | raw file
  1. <?php
  2. class ModelReportSale extends Model {
  3. public function getTotalSales($data = array()) {
  4. $sql = "SELECT SUM(total) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0'";
  5. if (!empty($data['filter_date_added'])) {
  6. $sql .= " AND DATE(date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')";
  7. }
  8. $query = $this->db->query($sql);
  9. return $query->row['total'];
  10. }
  11. public function getTotalOrdersByCountry() {
  12. $query = $this->db->query("SELECT COUNT(*) AS total, SUM(o.total) AS amount, c.iso_code_2 FROM `" . DB_PREFIX . "order` o LEFT JOIN `" . DB_PREFIX . "country` c ON (o.payment_country_id = c.country_id) WHERE o.order_status_id > '0' GROUP BY o.payment_country_id");
  13. return $query->rows;
  14. }
  15. public function getTotalOrdersByDay() {
  16. $implode = array();
  17. foreach ($this->config->get('config_complete_status') as $order_status_id) {
  18. $implode[] = "'" . (int)$order_status_id . "'";
  19. }
  20. $order_data = array();
  21. for ($i = 0; $i < 24; $i++) {
  22. $order_data[$i] = array(
  23. 'hour' => $i,
  24. 'total' => 0
  25. );
  26. }
  27. $query = $this->db->query("SELECT COUNT(*) AS total, HOUR(date_added) AS hour FROM `" . DB_PREFIX . "order` WHERE order_status_id IN(" . implode(",", $implode) . ") AND DATE(date_added) = DATE(NOW()) GROUP BY HOUR(date_added) ORDER BY date_added ASC");
  28. foreach ($query->rows as $result) {
  29. $order_data[$result['hour']] = array(
  30. 'hour' => $result['hour'],
  31. 'total' => $result['total']
  32. );
  33. }
  34. return $order_data;
  35. }
  36. public function getTotalOrdersByWeek() {
  37. $implode = array();
  38. foreach ($this->config->get('config_complete_status') as $order_status_id) {
  39. $implode[] = "'" . (int)$order_status_id . "'";
  40. }
  41. $order_data = array();
  42. $date_start = strtotime('-' . date('w') . ' days');
  43. for ($i = 0; $i < 7; $i++) {
  44. $date = date('Y-m-d', $date_start + ($i * 86400));
  45. $order_data[date('w', strtotime($date))] = array(
  46. 'day' => date('D', strtotime($date)),
  47. 'total' => 0
  48. );
  49. }
  50. $query = $this->db->query("SELECT COUNT(*) AS total, date_added FROM `" . DB_PREFIX . "order` WHERE order_status_id IN(" . implode(",", $implode) . ") AND DATE(date_added) >= DATE('" . $this->db->escape(date('Y-m-d', $date_start)) . "') GROUP BY DAYNAME(date_added)");
  51. foreach ($query->rows as $result) {
  52. $order_data[date('w', strtotime($result['date_added']))] = array(
  53. 'day' => date('D', strtotime($result['date_added'])),
  54. 'total' => $result['total']
  55. );
  56. }
  57. return $order_data;
  58. }
  59. public function getTotalOrdersByMonth() {
  60. $implode = array();
  61. foreach ($this->config->get('config_complete_status') as $order_status_id) {
  62. $implode[] = "'" . (int)$order_status_id . "'";
  63. }
  64. $order_data = array();
  65. for ($i = 1; $i <= date('t'); $i++) {
  66. $date = date('Y') . '-' . date('m') . '-' . $i;
  67. $order_data[date('j', strtotime($date))] = array(
  68. 'day' => date('d', strtotime($date)),
  69. 'total' => 0
  70. );
  71. }
  72. $query = $this->db->query("SELECT COUNT(*) AS total, date_added FROM `" . DB_PREFIX . "order` WHERE order_status_id IN(" . implode(",", $implode) . ") AND DATE(date_added) >= '" . $this->db->escape(date('Y') . '-' . date('m') . '-1') . "' GROUP BY DATE(date_added)");
  73. foreach ($query->rows as $result) {
  74. $order_data[date('j', strtotime($result['date_added']))] = array(
  75. 'day' => date('d', strtotime($result['date_added'])),
  76. 'total' => $result['total']
  77. );
  78. }
  79. return $order_data;
  80. }
  81. public function getTotalOrdersByYear() {
  82. $implode = array();
  83. foreach ($this->config->get('config_complete_status') as $order_status_id) {
  84. $implode[] = "'" . (int)$order_status_id . "'";
  85. }
  86. $order_data = array();
  87. for ($i = 1; $i <= 12; $i++) {
  88. $order_data[$i] = array(
  89. 'month' => date('M', mktime(0, 0, 0, $i)),
  90. 'total' => 0
  91. );
  92. }
  93. $query = $this->db->query("SELECT COUNT(*) AS total, date_added FROM `" . DB_PREFIX . "order` WHERE order_status_id IN(" . implode(",", $implode) . ") AND YEAR(date_added) = YEAR(NOW()) GROUP BY MONTH(date_added)");
  94. foreach ($query->rows as $result) {
  95. $order_data[date('n', strtotime($result['date_added']))] = array(
  96. 'month' => date('M', strtotime($result['date_added'])),
  97. 'total' => $result['total']
  98. );
  99. }
  100. return $order_data;
  101. }
  102. public function getOrders($data = array()) {
  103. $sql = "SELECT MIN(o.date_added) AS date_start, MAX(o.date_added) AS date_end, COUNT(*) AS `orders`, SUM((SELECT SUM(op.quantity) FROM `" . DB_PREFIX . "order_product` op WHERE op.order_id = o.order_id GROUP BY op.order_id)) AS products, SUM((SELECT SUM(ot.value) FROM `" . DB_PREFIX . "order_total` ot WHERE ot.order_id = o.order_id AND ot.code = 'tax' GROUP BY ot.order_id)) AS tax, SUM(o.total) AS `total` FROM `" . DB_PREFIX . "order` o";
  104. if (!empty($data['filter_order_status_id'])) {
  105. $sql .= " WHERE o.order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
  106. } else {
  107. $sql .= " WHERE o.order_status_id > '0'";
  108. }
  109. if (!empty($data['filter_date_start'])) {
  110. $sql .= " AND DATE(o.date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
  111. }
  112. if (!empty($data['filter_date_end'])) {
  113. $sql .= " AND DATE(o.date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
  114. }
  115. if (!empty($data['filter_group'])) {
  116. $group = $data['filter_group'];
  117. } else {
  118. $group = 'week';
  119. }
  120. switch($group) {
  121. case 'day';
  122. $sql .= " GROUP BY YEAR(o.date_added), MONTH(o.date_added), DAY(o.date_added)";
  123. break;
  124. default:
  125. case 'week':
  126. $sql .= " GROUP BY YEAR(o.date_added), WEEK(o.date_added)";
  127. break;
  128. case 'month':
  129. $sql .= " GROUP BY YEAR(o.date_added), MONTH(o.date_added)";
  130. break;
  131. case 'year':
  132. $sql .= " GROUP BY YEAR(o.date_added)";
  133. break;
  134. }
  135. $sql .= " ORDER BY o.date_added DESC";
  136. if (isset($data['start']) || isset($data['limit'])) {
  137. if ($data['start'] < 0) {
  138. $data['start'] = 0;
  139. }
  140. if ($data['limit'] < 1) {
  141. $data['limit'] = 20;
  142. }
  143. $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
  144. }
  145. $query = $this->db->query($sql);
  146. return $query->rows;
  147. }
  148. public function getTotalOrders($data = array()) {
  149. if (!empty($data['filter_group'])) {
  150. $group = $data['filter_group'];
  151. } else {
  152. $group = 'week';
  153. }
  154. switch($group) {
  155. case 'day';
  156. $sql = "SELECT COUNT(DISTINCT YEAR(date_added), MONTH(date_added), DAY(date_added)) AS total FROM `" . DB_PREFIX . "order`";
  157. break;
  158. default:
  159. case 'week':
  160. $sql = "SELECT COUNT(DISTINCT YEAR(date_added), WEEK(date_added)) AS total FROM `" . DB_PREFIX . "order`";
  161. break;
  162. case 'month':
  163. $sql = "SELECT COUNT(DISTINCT YEAR(date_added), MONTH(date_added)) AS total FROM `" . DB_PREFIX . "order`";
  164. break;
  165. case 'year':
  166. $sql = "SELECT COUNT(DISTINCT YEAR(date_added)) AS total FROM `" . DB_PREFIX . "order`";
  167. break;
  168. }
  169. if (!empty($data['filter_order_status_id'])) {
  170. $sql .= " WHERE order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
  171. } else {
  172. $sql .= " WHERE order_status_id > '0'";
  173. }
  174. if (!empty($data['filter_date_start'])) {
  175. $sql .= " AND DATE(date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
  176. }
  177. if (!empty($data['filter_date_end'])) {
  178. $sql .= " AND DATE(date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
  179. }
  180. $query = $this->db->query($sql);
  181. return $query->row['total'];
  182. }
  183. public function getTaxes($data = array()) {
  184. $sql = "SELECT MIN(o.date_added) AS date_start, MAX(o.date_added) AS date_end, ot.title, SUM(ot.value) AS total, COUNT(o.order_id) AS `orders` FROM `" . DB_PREFIX . "order` o LEFT JOIN `" . DB_PREFIX . "order_total` ot ON (ot.order_id = o.order_id) WHERE ot.code = 'tax'";
  185. if (!empty($data['filter_order_status_id'])) {
  186. $sql .= " AND o.order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
  187. } else {
  188. $sql .= " AND o.order_status_id > '0'";
  189. }
  190. if (!empty($data['filter_date_start'])) {
  191. $sql .= " AND DATE(o.date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
  192. }
  193. if (!empty($data['filter_date_end'])) {
  194. $sql .= " AND DATE(o.date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
  195. }
  196. if (!empty($data['filter_group'])) {
  197. $group = $data['filter_group'];
  198. } else {
  199. $group = 'week';
  200. }
  201. switch($group) {
  202. case 'day';
  203. $sql .= " GROUP BY YEAR(o.date_added), MONTH(o.date_added), DAY(o.date_added), ot.title";
  204. break;
  205. default:
  206. case 'week':
  207. $sql .= " GROUP BY YEAR(o.date_added), WEEK(o.date_added), ot.title";
  208. break;
  209. case 'month':
  210. $sql .= " GROUP BY YEAR(o.date_added), MONTH(o.date_added), ot.title";
  211. break;
  212. case 'year':
  213. $sql .= " GROUP BY YEAR(o.date_added), ot.title";
  214. break;
  215. }
  216. if (isset($data['start']) || isset($data['limit'])) {
  217. if ($data['start'] < 0) {
  218. $data['start'] = 0;
  219. }
  220. if ($data['limit'] < 1) {
  221. $data['limit'] = 20;
  222. }
  223. $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
  224. }
  225. $query = $this->db->query($sql);
  226. return $query->rows;
  227. }
  228. public function getTotalTaxes($data = array()) {
  229. if (!empty($data['filter_group'])) {
  230. $group = $data['filter_group'];
  231. } else {
  232. $group = 'week';
  233. }
  234. switch($group) {
  235. case 'day';
  236. $sql = "SELECT COUNT(DISTINCT YEAR(o.date_added), MONTH(o.date_added), DAY(o.date_added), ot.title) AS total FROM `" . DB_PREFIX . "order` o";
  237. break;
  238. default:
  239. case 'week':
  240. $sql = "SELECT COUNT(DISTINCT YEAR(o.date_added), WEEK(o.date_added), ot.title) AS total FROM `" . DB_PREFIX . "order` o";
  241. break;
  242. case 'month':
  243. $sql = "SELECT COUNT(DISTINCT YEAR(o.date_added), MONTH(o.date_added), ot.title) AS total FROM `" . DB_PREFIX . "order` o";
  244. break;
  245. case 'year':
  246. $sql = "SELECT COUNT(DISTINCT YEAR(o.date_added), ot.title) AS total FROM `" . DB_PREFIX . "order` o";
  247. break;
  248. }
  249. $sql .= " LEFT JOIN `" . DB_PREFIX . "order_total` ot ON (o.order_id = ot.order_id) WHERE ot.code = 'tax'";
  250. if (!empty($data['filter_order_status_id'])) {
  251. $sql .= " AND o.order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
  252. } else {
  253. $sql .= " AND o.order_status_id > '0'";
  254. }
  255. if (!empty($data['filter_date_start'])) {
  256. $sql .= " AND DATE(o.date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
  257. }
  258. if (!empty($data['filter_date_end'])) {
  259. $sql .= " AND DATE(o.date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
  260. }
  261. $query = $this->db->query($sql);
  262. return $query->row['total'];
  263. }
  264. public function getShipping($data = array()) {
  265. $sql = "SELECT MIN(o.date_added) AS date_start, MAX(o.date_added) AS date_end, ot.title, SUM(ot.value) AS total, COUNT(o.order_id) AS `orders` FROM `" . DB_PREFIX . "order` o LEFT JOIN `" . DB_PREFIX . "order_total` ot ON (o.order_id = ot.order_id) WHERE ot.code = 'shipping'";
  266. if (!empty($data['filter_order_status_id'])) {
  267. $sql .= " AND o.order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
  268. } else {
  269. $sql .= " AND o.order_status_id > '0'";
  270. }
  271. if (!empty($data['filter_date_start'])) {
  272. $sql .= " AND DATE(o.date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
  273. }
  274. if (!empty($data['filter_date_end'])) {
  275. $sql .= " AND DATE(o.date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
  276. }
  277. if (!empty($data['filter_group'])) {
  278. $group = $data['filter_group'];
  279. } else {
  280. $group = 'week';
  281. }
  282. switch($group) {
  283. case 'day';
  284. $sql .= " GROUP BY YEAR(o.date_added), MONTH(o.date_added), DAY(o.date_added), ot.title";
  285. break;
  286. default:
  287. case 'week':
  288. $sql .= " GROUP BY YEAR(o.date_added), WEEK(o.date_added), ot.title";
  289. break;
  290. case 'month':
  291. $sql .= " GROUP BY YEAR(o.date_added), MONTH(o.date_added), ot.title";
  292. break;
  293. case 'year':
  294. $sql .= " GROUP BY YEAR(o.date_added), ot.title";
  295. break;
  296. }
  297. if (isset($data['start']) || isset($data['limit'])) {
  298. if ($data['start'] < 0) {
  299. $data['start'] = 0;
  300. }
  301. if ($data['limit'] < 1) {
  302. $data['limit'] = 20;
  303. }
  304. $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
  305. }
  306. $query = $this->db->query($sql);
  307. return $query->rows;
  308. }
  309. public function getTotalShipping($data = array()) {
  310. if (!empty($data['filter_group'])) {
  311. $group = $data['filter_group'];
  312. } else {
  313. $group = 'week';
  314. }
  315. switch($group) {
  316. case 'day';
  317. $sql = "SELECT COUNT(DISTINCT YEAR(o.date_added), MONTH(o.date_added), DAY(o.date_added), ot.title) AS total FROM `" . DB_PREFIX . "order` o";
  318. break;
  319. default:
  320. case 'week':
  321. $sql = "SELECT COUNT(DISTINCT YEAR(o.date_added), WEEK(o.date_added), ot.title) AS total FROM `" . DB_PREFIX . "order` o";
  322. break;
  323. case 'month':
  324. $sql = "SELECT COUNT(DISTINCT YEAR(o.date_added), MONTH(o.date_added), ot.title) AS total FROM `" . DB_PREFIX . "order` o";
  325. break;
  326. case 'year':
  327. $sql = "SELECT COUNT(DISTINCT YEAR(o.date_added), ot.title) AS total FROM `" . DB_PREFIX . "order` o";
  328. break;
  329. }
  330. $sql .= " LEFT JOIN `" . DB_PREFIX . "order_total` ot ON (o.order_id = ot.order_id) WHERE ot.code = 'shipping'";
  331. if (!empty($data['filter_order_status_id'])) {
  332. $sql .= " AND order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
  333. } else {
  334. $sql .= " AND order_status_id > '0'";
  335. }
  336. if (!empty($data['filter_date_start'])) {
  337. $sql .= " AND DATE(o.date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
  338. }
  339. if (!empty($data['filter_date_end'])) {
  340. $sql .= " AND DATE(o.date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
  341. }
  342. $query = $this->db->query($sql);
  343. return $query->row['total'];
  344. }
  345. }