/upload/admin/model/report/sale.php

https://bitbucket.org/deringer/opencart · PHP · 309 lines · 250 code · 59 blank · 0 comment · 48 complexity · e1f2d56c13a0e2ad80a639ae2e4216e6 MD5 · raw file

  1. <?php
  2. class ModelReportSale extends Model {
  3. public function getOrders($data = array()) {
  4. $sql = "SELECT MIN(tmp.date_added) AS date_start, MAX(tmp.date_added) AS date_end, COUNT(tmp.order_id) AS `orders`, SUM(tmp.products) AS products, SUM(tmp.tax) AS tax, SUM(tmp.total) AS total FROM (SELECT o.order_id, (SELECT SUM(op.quantity) FROM `" . DB_PREFIX . "order_product` op WHERE op.order_id = o.order_id GROUP BY op.order_id) AS products, (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, o.total, o.date_added FROM `" . DB_PREFIX . "order` o";
  5. if (!empty($data['filter_order_status_id'])) {
  6. $sql .= " WHERE o.order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
  7. } else {
  8. $sql .= " WHERE o.order_status_id > '0'";
  9. }
  10. if (!empty($data['filter_date_start'])) {
  11. $sql .= " AND DATE(o.date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
  12. }
  13. if (!empty($data['filter_date_end'])) {
  14. $sql .= " AND DATE(o.date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
  15. }
  16. $sql .= " GROUP BY o.order_id) tmp";
  17. if (!empty($data['filter_group'])) {
  18. $group = $data['filter_group'];
  19. } else {
  20. $group = 'week';
  21. }
  22. switch($group) {
  23. case 'day';
  24. $sql .= " GROUP BY DAY(tmp.date_added)";
  25. break;
  26. default:
  27. case 'week':
  28. $sql .= " GROUP BY WEEK(tmp.date_added)";
  29. break;
  30. case 'month':
  31. $sql .= " GROUP BY MONTH(tmp.date_added)";
  32. break;
  33. case 'year':
  34. $sql .= " GROUP BY YEAR(tmp.date_added)";
  35. break;
  36. }
  37. $sql .= " ORDER BY tmp.date_added DESC";
  38. if (isset($data['start']) || isset($data['limit'])) {
  39. if ($data['start'] < 0) {
  40. $data['start'] = 0;
  41. }
  42. if ($data['limit'] < 1) {
  43. $data['limit'] = 20;
  44. }
  45. $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
  46. }
  47. $query = $this->db->query($sql);
  48. return $query->rows;
  49. }
  50. public function getTotalOrders($data = array()) {
  51. if (!empty($data['filter_group'])) {
  52. $group = $data['filter_group'];
  53. } else {
  54. $group = 'week';
  55. }
  56. switch($group) {
  57. case 'day';
  58. $sql = "SELECT COUNT(DISTINCT DAY(date_added)) AS total FROM `" . DB_PREFIX . "order`";
  59. break;
  60. default:
  61. case 'week':
  62. $sql = "SELECT COUNT(DISTINCT WEEK(date_added)) AS total FROM `" . DB_PREFIX . "order`";
  63. break;
  64. case 'month':
  65. $sql = "SELECT COUNT(DISTINCT MONTH(date_added)) AS total FROM `" . DB_PREFIX . "order`";
  66. break;
  67. case 'year':
  68. $sql = "SELECT COUNT(DISTINCT YEAR(date_added)) AS total FROM `" . DB_PREFIX . "order`";
  69. break;
  70. }
  71. if (!empty($data['filter_order_status_id'])) {
  72. $sql .= " WHERE order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
  73. } else {
  74. $sql .= " WHERE order_status_id > '0'";
  75. }
  76. if (!empty($data['filter_date_start'])) {
  77. $sql .= " AND DATE(date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
  78. }
  79. if (!empty($data['filter_date_end'])) {
  80. $sql .= " AND DATE(date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
  81. }
  82. $query = $this->db->query($sql);
  83. return $query->row['total'];
  84. }
  85. public function getTaxes($data = array()) {
  86. $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_total` ot LEFT JOIN `" . DB_PREFIX . "order` o ON (ot.order_id = o.order_id) WHERE ot.code = 'tax'";
  87. if (!empty($data['filter_order_status_id'])) {
  88. $sql .= " AND o.order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
  89. } else {
  90. $sql .= " AND o.order_status_id > '0'";
  91. }
  92. if (!empty($data['filter_date_start'])) {
  93. $sql .= " AND DATE(o.date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
  94. }
  95. if (!empty($data['filter_date_end'])) {
  96. $sql .= " AND DATE(o.date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
  97. }
  98. if (!empty($data['filter_group'])) {
  99. $group = $data['filter_group'];
  100. } else {
  101. $group = 'week';
  102. }
  103. switch($group) {
  104. case 'day';
  105. $sql .= " GROUP BY ot.title, DAY(o.date_added)";
  106. break;
  107. default:
  108. case 'week':
  109. $sql .= " GROUP BY ot.title, WEEK(o.date_added)";
  110. break;
  111. case 'month':
  112. $sql .= " GROUP BY ot.title, MONTH(o.date_added)";
  113. break;
  114. case 'year':
  115. $sql .= " GROUP BY ot.title, YEAR(o.date_added)";
  116. break;
  117. }
  118. if (isset($data['start']) || isset($data['limit'])) {
  119. if ($data['start'] < 0) {
  120. $data['start'] = 0;
  121. }
  122. if ($data['limit'] < 1) {
  123. $data['limit'] = 20;
  124. }
  125. $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
  126. }
  127. $query = $this->db->query($sql);
  128. return $query->rows;
  129. }
  130. public function getTotalTaxes($data = array()) {
  131. $sql = "SELECT COUNT(*) AS total FROM (SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order_total` ot LEFT JOIN `" . DB_PREFIX . "order` o ON (ot.order_id = o.order_id) WHERE ot.code = 'tax'";
  132. if (!empty($data['filter_order_status_id'])) {
  133. $sql .= " AND order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
  134. } else {
  135. $sql .= " AND order_status_id > '0'";
  136. }
  137. if (!empty($data['filter_date_start'])) {
  138. $sql .= " AND DATE(date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
  139. }
  140. if (!empty($data['filter_date_end'])) {
  141. $sql .= " AND DATE(date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
  142. }
  143. if (!empty($data['filter_group'])) {
  144. $group = $data['filter_group'];
  145. } else {
  146. $group = 'week';
  147. }
  148. switch($group) {
  149. case 'day';
  150. $sql .= " GROUP BY DAY(o.date_added), ot.title";
  151. break;
  152. default:
  153. case 'week':
  154. $sql .= " GROUP BY WEEK(o.date_added), ot.title";
  155. break;
  156. case 'month':
  157. $sql .= " GROUP BY MONTH(o.date_added), ot.title";
  158. break;
  159. case 'year':
  160. $sql .= " GROUP BY YEAR(o.date_added), ot.title";
  161. break;
  162. }
  163. $sql .= ") tmp";
  164. $query = $this->db->query($sql);
  165. return $query->row['total'];
  166. }
  167. public function getShipping($data = array()) {
  168. $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_total` ot LEFT JOIN `" . DB_PREFIX . "order` o ON (ot.order_id = o.order_id) WHERE ot.code = 'shipping'";
  169. if (!empty($data['filter_order_status_id'])) {
  170. $sql .= " AND o.order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
  171. } else {
  172. $sql .= " AND o.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. if (!empty($data['filter_group'])) {
  181. $group = $data['filter_group'];
  182. } else {
  183. $group = 'week';
  184. }
  185. switch($group) {
  186. case 'day';
  187. $sql .= " GROUP BY ot.title, DAY(o.date_added)";
  188. break;
  189. default:
  190. case 'week':
  191. $sql .= " GROUP BY ot.title, WEEK(o.date_added)";
  192. break;
  193. case 'month':
  194. $sql .= " GROUP BY ot.title, MONTH(o.date_added)";
  195. break;
  196. case 'year':
  197. $sql .= " GROUP BY ot.title, YEAR(o.date_added)";
  198. break;
  199. }
  200. if (isset($data['start']) || isset($data['limit'])) {
  201. if ($data['start'] < 0) {
  202. $data['start'] = 0;
  203. }
  204. if ($data['limit'] < 1) {
  205. $data['limit'] = 20;
  206. }
  207. $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
  208. }
  209. $query = $this->db->query($sql);
  210. return $query->rows;
  211. }
  212. public function getTotalShipping($data = array()) {
  213. $sql = "SELECT COUNT(*) AS total FROM (SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order_total` ot LEFT JOIN `" . DB_PREFIX . "order` o ON (ot.order_id = o.order_id) WHERE ot.code = 'shipping'";
  214. if (!empty($data['filter_order_status_id'])) {
  215. $sql .= " AND order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
  216. } else {
  217. $sql .= " AND order_status_id > '0'";
  218. }
  219. if (!empty($data['filter_date_start'])) {
  220. $sql .= " AND DATE(date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
  221. }
  222. if (!empty($data['filter_date_end'])) {
  223. $sql .= " AND DATE(date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
  224. }
  225. if (!empty($data['filter_group'])) {
  226. $group = $data['filter_group'];
  227. } else {
  228. $group = 'week';
  229. }
  230. switch($group) {
  231. case 'day';
  232. $sql .= " GROUP BY DAY(o.date_added), ot.title";
  233. break;
  234. default:
  235. case 'week':
  236. $sql .= " GROUP BY WEEK(o.date_added), ot.title";
  237. break;
  238. case 'month':
  239. $sql .= " GROUP BY MONTH(o.date_added), ot.title";
  240. break;
  241. case 'year':
  242. $sql .= " GROUP BY YEAR(o.date_added), ot.title";
  243. break;
  244. }
  245. $sql .= ") tmp";
  246. $query = $this->db->query($sql);
  247. return $query->row['total'];
  248. }
  249. }
  250. ?>