/admin/model/report/sale.php

https://github.com/sansanwawa/e-commerse · PHP · 307 lines · 249 code · 58 blank · 0 comment · 66 complexity · 83e0ea0d3b0676a213999a77b98c977b 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 (isset($data['filter_order_status_id']) && $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 (isset($data['filter_date_start']) && $data['filter_date_start']) {
  11. $sql .= " AND DATE(o.date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
  12. }
  13. if (isset($data['filter_date_end']) && $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 (isset($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. if (isset($data['start']) || isset($data['limit'])) {
  38. if ($data['start'] < 0) {
  39. $data['start'] = 0;
  40. }
  41. if ($data['limit'] < 1) {
  42. $data['limit'] = 20;
  43. }
  44. $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
  45. }
  46. $query = $this->db->query($sql);
  47. return $query->rows;
  48. }
  49. public function getTotalOrders($data = array()) {
  50. if (isset($data['filter_group'])) {
  51. $group = $data['filter_group'];
  52. } else {
  53. $group = 'week';
  54. }
  55. switch($group) {
  56. case 'day';
  57. $sql = "SELECT COUNT(DISTINCT DAY(date_added)) AS total FROM `" . DB_PREFIX . "order`";
  58. break;
  59. default:
  60. case 'week':
  61. $sql = "SELECT COUNT(DISTINCT WEEK(date_added)) AS total FROM `" . DB_PREFIX . "order`";
  62. break;
  63. case 'month':
  64. $sql = "SELECT COUNT(DISTINCT MONTH(date_added)) AS total FROM `" . DB_PREFIX . "order`";
  65. break;
  66. case 'year':
  67. $sql = "SELECT COUNT(DISTINCT YEAR(date_added)) AS total FROM `" . DB_PREFIX . "order`";
  68. break;
  69. }
  70. if (isset($data['filter_order_status_id']) && $data['filter_order_status_id']) {
  71. $sql .= " WHERE order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
  72. } else {
  73. $sql .= " WHERE order_status_id > '0'";
  74. }
  75. if (isset($data['filter_date_start']) && $data['filter_date_start']) {
  76. $sql .= " AND DATE(date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
  77. }
  78. if (isset($data['filter_date_end']) && $data['filter_date_end']) {
  79. $sql .= " AND DATE(date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
  80. }
  81. $query = $this->db->query($sql);
  82. return $query->row['total'];
  83. }
  84. public function getTaxes($data = array()) {
  85. $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'";
  86. if (isset($data['filter_order_status_id']) && $data['filter_order_status_id']) {
  87. $sql .= " AND o.order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
  88. } else {
  89. $sql .= " AND o.order_status_id > '0'";
  90. }
  91. if (isset($data['filter_date_start']) && $data['filter_date_start']) {
  92. $sql .= " AND DATE(o.date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
  93. }
  94. if (isset($data['filter_date_end']) && $data['filter_date_end']) {
  95. $sql .= " AND DATE(o.date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
  96. }
  97. if (isset($data['filter_group'])) {
  98. $group = $data['filter_group'];
  99. } else {
  100. $group = 'week';
  101. }
  102. switch($group) {
  103. case 'day';
  104. $sql .= " GROUP BY ot.title, DAY(o.date_added)";
  105. break;
  106. default:
  107. case 'week':
  108. $sql .= " GROUP BY ot.title, WEEK(o.date_added)";
  109. break;
  110. case 'month':
  111. $sql .= " GROUP BY ot.title, MONTH(o.date_added)";
  112. break;
  113. case 'year':
  114. $sql .= " GROUP BY ot.title, YEAR(o.date_added)";
  115. break;
  116. }
  117. if (isset($data['start']) || isset($data['limit'])) {
  118. if ($data['start'] < 0) {
  119. $data['start'] = 0;
  120. }
  121. if ($data['limit'] < 1) {
  122. $data['limit'] = 20;
  123. }
  124. $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
  125. }
  126. $query = $this->db->query($sql);
  127. return $query->rows;
  128. }
  129. public function getTotalTaxes($data = array()) {
  130. $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'";
  131. if (isset($data['filter_order_status_id']) && $data['filter_order_status_id']) {
  132. $sql .= " AND order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
  133. } else {
  134. $sql .= " AND order_status_id > '0'";
  135. }
  136. if (isset($data['filter_date_start']) && $data['filter_date_start']) {
  137. $sql .= " AND DATE(date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
  138. }
  139. if (isset($data['filter_date_end']) && $data['filter_date_end']) {
  140. $sql .= " AND DATE(date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
  141. }
  142. if (isset($data['filter_group'])) {
  143. $group = $data['filter_group'];
  144. } else {
  145. $group = 'week';
  146. }
  147. switch($group) {
  148. case 'day';
  149. $sql .= " GROUP BY DAY(o.date_added), ot.title";
  150. break;
  151. default:
  152. case 'week':
  153. $sql .= " GROUP BY WEEK(o.date_added), ot.title";
  154. break;
  155. case 'month':
  156. $sql .= " GROUP BY MONTH(o.date_added), ot.title";
  157. break;
  158. case 'year':
  159. $sql .= " GROUP BY YEAR(o.date_added), ot.title";
  160. break;
  161. }
  162. $sql .= ") tmp";
  163. $query = $this->db->query($sql);
  164. return $query->row['total'];
  165. }
  166. public function getShipping($data = array()) {
  167. $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'";
  168. if (isset($data['filter_order_status_id']) && $data['filter_order_status_id']) {
  169. $sql .= " AND o.order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
  170. } else {
  171. $sql .= " AND o.order_status_id > '0'";
  172. }
  173. if (isset($data['filter_date_start']) && $data['filter_date_start']) {
  174. $sql .= " AND DATE(date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
  175. }
  176. if (isset($data['filter_date_end']) && $data['filter_date_end']) {
  177. $sql .= " AND DATE(date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
  178. }
  179. if (isset($data['filter_group'])) {
  180. $group = $data['filter_group'];
  181. } else {
  182. $group = 'week';
  183. }
  184. switch($group) {
  185. case 'day';
  186. $sql .= " GROUP BY ot.title, DAY(o.date_added)";
  187. break;
  188. default:
  189. case 'week':
  190. $sql .= " GROUP BY ot.title, WEEK(o.date_added)";
  191. break;
  192. case 'month':
  193. $sql .= " GROUP BY ot.title, MONTH(o.date_added)";
  194. break;
  195. case 'year':
  196. $sql .= " GROUP BY ot.title, YEAR(o.date_added)";
  197. break;
  198. }
  199. if (isset($data['start']) || isset($data['limit'])) {
  200. if ($data['start'] < 0) {
  201. $data['start'] = 0;
  202. }
  203. if ($data['limit'] < 1) {
  204. $data['limit'] = 20;
  205. }
  206. $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
  207. }
  208. $query = $this->db->query($sql);
  209. return $query->rows;
  210. }
  211. public function getTotalShipping($data = array()) {
  212. $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'";
  213. if (isset($data['filter_order_status_id']) && $data['filter_order_status_id']) {
  214. $sql .= " AND order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
  215. } else {
  216. $sql .= " AND order_status_id > '0'";
  217. }
  218. if (isset($data['filter_date_start']) && $data['filter_date_start']) {
  219. $sql .= " AND DATE(date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
  220. }
  221. if (isset($data['filter_date_end']) && $data['filter_date_end']) {
  222. $sql .= " AND DATE(date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
  223. }
  224. if (isset($data['filter_group'])) {
  225. $group = $data['filter_group'];
  226. } else {
  227. $group = 'week';
  228. }
  229. switch($group) {
  230. case 'day';
  231. $sql .= " GROUP BY DAY(o.date_added), ot.title";
  232. break;
  233. default:
  234. case 'week':
  235. $sql .= " GROUP BY WEEK(o.date_added), ot.title";
  236. break;
  237. case 'month':
  238. $sql .= " GROUP BY MONTH(o.date_added), ot.title";
  239. break;
  240. case 'year':
  241. $sql .= " GROUP BY YEAR(o.date_added), ot.title";
  242. break;
  243. }
  244. $sql .= ") tmp";
  245. $query = $this->db->query($sql);
  246. return $query->row['total'];
  247. }
  248. }
  249. ?>