shop.balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

sale.php (14183B)


      1 <?php
      2 class ModelExtensionReportSale 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 
      6 		if (!empty($data['filter_date_added'])) {
      7 			$sql .= " AND DATE(date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')";
      8 		}
      9 
     10 		$query = $this->db->query($sql);
     11 
     12 		return $query->row['total'];
     13 	}
     14 
     15 	public function getTotalOrdersByCountry() {
     16 		$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");
     17 
     18 		return $query->rows;
     19 	}
     20 
     21 	public function getTotalOrdersByDay() {
     22 		$implode = array();
     23 
     24 		foreach ($this->config->get('config_complete_status') as $order_status_id) {
     25 			$implode[] = "'" . (int)$order_status_id . "'";
     26 		}
     27 
     28 		$order_data = array();
     29 
     30 		for ($i = 0; $i < 24; $i++) {
     31 			$order_data[$i] = array(
     32 				'hour'  => $i,
     33 				'total' => 0
     34 			);
     35 		}
     36 
     37 		$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");
     38 
     39 		foreach ($query->rows as $result) {
     40 			$order_data[$result['hour']] = array(
     41 				'hour'  => $result['hour'],
     42 				'total' => $result['total']
     43 			);
     44 		}
     45 
     46 		return $order_data;
     47 	}
     48 
     49 	public function getTotalOrdersByWeek() {
     50 		$implode = array();
     51 
     52 		foreach ($this->config->get('config_complete_status') as $order_status_id) {
     53 			$implode[] = "'" . (int)$order_status_id . "'";
     54 		}
     55 
     56 		$order_data = array();
     57 
     58 		$date_start = strtotime('-' . date('w') . ' days');
     59 
     60 		for ($i = 0; $i < 7; $i++) {
     61 			$date = date('Y-m-d', $date_start + ($i * 86400));
     62 
     63 			$order_data[date('w', strtotime($date))] = array(
     64 				'day'   => date('D', strtotime($date)),
     65 				'total' => 0
     66 			);
     67 		}
     68 
     69 		$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)");
     70 
     71 		foreach ($query->rows as $result) {
     72 			$order_data[date('w', strtotime($result['date_added']))] = array(
     73 				'day'   => date('D', strtotime($result['date_added'])),
     74 				'total' => $result['total']
     75 			);
     76 		}
     77 
     78 		return $order_data;
     79 	}
     80 
     81 	public function getTotalOrdersByMonth() {
     82 		$implode = array();
     83 
     84 		foreach ($this->config->get('config_complete_status') as $order_status_id) {
     85 			$implode[] = "'" . (int)$order_status_id . "'";
     86 		}
     87 
     88 		$order_data = array();
     89 
     90 		for ($i = 1; $i <= date('t'); $i++) {
     91 			$date = date('Y') . '-' . date('m') . '-' . $i;
     92 
     93 			$order_data[date('j', strtotime($date))] = array(
     94 				'day'   => date('d', strtotime($date)),
     95 				'total' => 0
     96 			);
     97 		}
     98 
     99 		$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)");
    100 
    101 		foreach ($query->rows as $result) {
    102 			$order_data[date('j', strtotime($result['date_added']))] = array(
    103 				'day'   => date('d', strtotime($result['date_added'])),
    104 				'total' => $result['total']
    105 			);
    106 		}
    107 
    108 		return $order_data;
    109 	}
    110 
    111 	public function getTotalOrdersByYear() {
    112 		$implode = array();
    113 
    114 		foreach ($this->config->get('config_complete_status') as $order_status_id) {
    115 			$implode[] = "'" . (int)$order_status_id . "'";
    116 		}
    117 
    118 		$order_data = array();
    119 
    120 		for ($i = 1; $i <= 12; $i++) {
    121 			$order_data[$i] = array(
    122 				'month' => date('M', mktime(0, 0, 0, $i)),
    123 				'total' => 0
    124 			);
    125 		}
    126 
    127 		$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)");
    128 
    129 		foreach ($query->rows as $result) {
    130 			$order_data[date('n', strtotime($result['date_added']))] = array(
    131 				'month' => date('M', strtotime($result['date_added'])),
    132 				'total' => $result['total']
    133 			);
    134 		}
    135 
    136 		return $order_data;
    137 	}
    138 
    139 	public function getOrders($data = array()) {
    140 		$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";
    141 
    142 		if (!empty($data['filter_order_status_id'])) {
    143 			$sql .= " WHERE o.order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
    144 		} else {
    145 			$sql .= " WHERE o.order_status_id > '0'";
    146 		}
    147 
    148 		if (!empty($data['filter_date_start'])) {
    149 			$sql .= " AND DATE(o.date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
    150 		}
    151 
    152 		if (!empty($data['filter_date_end'])) {
    153 			$sql .= " AND DATE(o.date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
    154 		}
    155 
    156 		if (!empty($data['filter_group'])) {
    157 			$group = $data['filter_group'];
    158 		} else {
    159 			$group = 'week';
    160 		}
    161 
    162 		switch($group) {
    163 			case 'day';
    164 				$sql .= " GROUP BY YEAR(o.date_added), MONTH(o.date_added), DAY(o.date_added)";
    165 				break;
    166 			default:
    167 			case 'week':
    168 				$sql .= " GROUP BY YEAR(o.date_added), WEEK(o.date_added)";
    169 				break;
    170 			case 'month':
    171 				$sql .= " GROUP BY YEAR(o.date_added), MONTH(o.date_added)";
    172 				break;
    173 			case 'year':
    174 				$sql .= " GROUP BY YEAR(o.date_added)";
    175 				break;
    176 		}
    177 
    178 		$sql .= " ORDER BY o.date_added DESC";
    179 
    180 		if (isset($data['start']) || isset($data['limit'])) {
    181 			if ($data['start'] < 0) {
    182 				$data['start'] = 0;
    183 			}
    184 
    185 			if ($data['limit'] < 1) {
    186 				$data['limit'] = 20;
    187 			}
    188 
    189 			$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
    190 		}
    191 
    192 		$query = $this->db->query($sql);
    193 
    194 		return $query->rows;
    195 	}
    196 
    197 	public function getTotalOrders($data = array()) {
    198 		if (!empty($data['filter_group'])) {
    199 			$group = $data['filter_group'];
    200 		} else {
    201 			$group = 'week';
    202 		}
    203 
    204 		switch($group) {
    205 			case 'day';
    206 				$sql = "SELECT COUNT(DISTINCT YEAR(date_added), MONTH(date_added), DAY(date_added)) AS total FROM `" . DB_PREFIX . "order`";
    207 				break;
    208 			default:
    209 			case 'week':
    210 				$sql = "SELECT COUNT(DISTINCT YEAR(date_added), WEEK(date_added)) AS total FROM `" . DB_PREFIX . "order`";
    211 				break;
    212 			case 'month':
    213 				$sql = "SELECT COUNT(DISTINCT YEAR(date_added), MONTH(date_added)) AS total FROM `" . DB_PREFIX . "order`";
    214 				break;
    215 			case 'year':
    216 				$sql = "SELECT COUNT(DISTINCT YEAR(date_added)) AS total FROM `" . DB_PREFIX . "order`";
    217 				break;
    218 		}
    219 
    220 		if (!empty($data['filter_order_status_id'])) {
    221 			$sql .= " WHERE order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
    222 		} else {
    223 			$sql .= " WHERE order_status_id > '0'";
    224 		}
    225 
    226 		if (!empty($data['filter_date_start'])) {
    227 			$sql .= " AND DATE(date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
    228 		}
    229 
    230 		if (!empty($data['filter_date_end'])) {
    231 			$sql .= " AND DATE(date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
    232 		}
    233 
    234 		$query = $this->db->query($sql);
    235 
    236 		return $query->row['total'];
    237 	}
    238 
    239 	public function getTaxes($data = array()) {
    240 		$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'";
    241 
    242 		if (!empty($data['filter_order_status_id'])) {
    243 			$sql .= " AND o.order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
    244 		} else {
    245 			$sql .= " AND o.order_status_id > '0'";
    246 		}
    247 
    248 		if (!empty($data['filter_date_start'])) {
    249 			$sql .= " AND DATE(o.date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
    250 		}
    251 
    252 		if (!empty($data['filter_date_end'])) {
    253 			$sql .= " AND DATE(o.date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
    254 		}
    255 
    256 		if (!empty($data['filter_group'])) {
    257 			$group = $data['filter_group'];
    258 		} else {
    259 			$group = 'week';
    260 		}
    261 
    262 		switch($group) {
    263 			case 'day';
    264 				$sql .= " GROUP BY YEAR(o.date_added), MONTH(o.date_added), DAY(o.date_added), ot.title";
    265 				break;
    266 			default:
    267 			case 'week':
    268 				$sql .= " GROUP BY YEAR(o.date_added), WEEK(o.date_added), ot.title";
    269 				break;
    270 			case 'month':
    271 				$sql .= " GROUP BY YEAR(o.date_added), MONTH(o.date_added), ot.title";
    272 				break;
    273 			case 'year':
    274 				$sql .= " GROUP BY YEAR(o.date_added), ot.title";
    275 				break;
    276 		}
    277 
    278 		if (isset($data['start']) || isset($data['limit'])) {
    279 			if ($data['start'] < 0) {
    280 				$data['start'] = 0;
    281 			}
    282 
    283 			if ($data['limit'] < 1) {
    284 				$data['limit'] = 20;
    285 			}
    286 
    287 			$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
    288 		}
    289 
    290 		$query = $this->db->query($sql);
    291 
    292 		return $query->rows;
    293 	}
    294 
    295 	public function getTotalTaxes($data = array()) {
    296 		if (!empty($data['filter_group'])) {
    297 			$group = $data['filter_group'];
    298 		} else {
    299 			$group = 'week';
    300 		}
    301 
    302 		switch($group) {
    303 			case 'day';
    304 				$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";
    305 				break;
    306 			default:
    307 			case 'week':
    308 				$sql = "SELECT COUNT(DISTINCT YEAR(o.date_added), WEEK(o.date_added), ot.title) AS total FROM `" . DB_PREFIX . "order` o";
    309 				break;
    310 			case 'month':
    311 				$sql = "SELECT COUNT(DISTINCT YEAR(o.date_added), MONTH(o.date_added), ot.title) AS total FROM `" . DB_PREFIX . "order` o";
    312 				break;
    313 			case 'year':
    314 				$sql = "SELECT COUNT(DISTINCT YEAR(o.date_added), ot.title) AS total FROM `" . DB_PREFIX . "order` o";
    315 				break;
    316 		}
    317 
    318 		$sql .= " LEFT JOIN `" . DB_PREFIX . "order_total` ot ON (o.order_id = ot.order_id) WHERE ot.code = 'tax'";
    319 
    320 		if (!empty($data['filter_order_status_id'])) {
    321 			$sql .= " AND o.order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
    322 		} else {
    323 			$sql .= " AND o.order_status_id > '0'";
    324 		}
    325 
    326 		if (!empty($data['filter_date_start'])) {
    327 			$sql .= " AND DATE(o.date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
    328 		}
    329 
    330 		if (!empty($data['filter_date_end'])) {
    331 			$sql .= " AND DATE(o.date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
    332 		}
    333 
    334 		$query = $this->db->query($sql);
    335 
    336 		return $query->row['total'];
    337 	}
    338 
    339 	public function getShipping($data = array()) {
    340 		$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'";
    341 
    342 		if (!empty($data['filter_order_status_id'])) {
    343 			$sql .= " AND o.order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
    344 		} else {
    345 			$sql .= " AND o.order_status_id > '0'";
    346 		}
    347 
    348 		if (!empty($data['filter_date_start'])) {
    349 			$sql .= " AND DATE(o.date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
    350 		}
    351 
    352 		if (!empty($data['filter_date_end'])) {
    353 			$sql .= " AND DATE(o.date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
    354 		}
    355 
    356 		if (!empty($data['filter_group'])) {
    357 			$group = $data['filter_group'];
    358 		} else {
    359 			$group = 'week';
    360 		}
    361 
    362 		switch($group) {
    363 			case 'day';
    364 				$sql .= " GROUP BY YEAR(o.date_added), MONTH(o.date_added), DAY(o.date_added), ot.title";
    365 				break;
    366 			default:
    367 			case 'week':
    368 				$sql .= " GROUP BY YEAR(o.date_added), WEEK(o.date_added), ot.title";
    369 				break;
    370 			case 'month':
    371 				$sql .= " GROUP BY YEAR(o.date_added), MONTH(o.date_added), ot.title";
    372 				break;
    373 			case 'year':
    374 				$sql .= " GROUP BY YEAR(o.date_added), ot.title";
    375 				break;
    376 		}
    377 
    378 		if (isset($data['start']) || isset($data['limit'])) {
    379 			if ($data['start'] < 0) {
    380 				$data['start'] = 0;
    381 			}
    382 
    383 			if ($data['limit'] < 1) {
    384 				$data['limit'] = 20;
    385 			}
    386 
    387 			$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
    388 		}
    389 
    390 		$query = $this->db->query($sql);
    391 
    392 		return $query->rows;
    393 	}
    394 
    395 	public function getTotalShipping($data = array()) {
    396 		if (!empty($data['filter_group'])) {
    397 			$group = $data['filter_group'];
    398 		} else {
    399 			$group = 'week';
    400 		}
    401 
    402 		switch($group) {
    403 			case 'day';
    404 				$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";
    405 				break;
    406 			default:
    407 			case 'week':
    408 				$sql = "SELECT COUNT(DISTINCT YEAR(o.date_added), WEEK(o.date_added), ot.title) AS total FROM `" . DB_PREFIX . "order` o";
    409 				break;
    410 			case 'month':
    411 				$sql = "SELECT COUNT(DISTINCT YEAR(o.date_added), MONTH(o.date_added), ot.title) AS total FROM `" . DB_PREFIX . "order` o";
    412 				break;
    413 			case 'year':
    414 				$sql = "SELECT COUNT(DISTINCT YEAR(o.date_added), ot.title) AS total FROM `" . DB_PREFIX . "order` o";
    415 				break;
    416 		}
    417 
    418 		$sql .= " LEFT JOIN `" . DB_PREFIX . "order_total` ot ON (o.order_id = ot.order_id) WHERE ot.code = 'shipping'";
    419 
    420 		if (!empty($data['filter_order_status_id'])) {
    421 			$sql .= " AND order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
    422 		} else {
    423 			$sql .= " AND order_status_id > '0'";
    424 		}
    425 
    426 		if (!empty($data['filter_date_start'])) {
    427 			$sql .= " AND DATE(o.date_added) >= '" . $this->db->escape($data['filter_date_start']) . "'";
    428 		}
    429 
    430 		if (!empty($data['filter_date_end'])) {
    431 			$sql .= " AND DATE(o.date_added) <= '" . $this->db->escape($data['filter_date_end']) . "'";
    432 		}
    433 
    434 		$query = $this->db->query($sql);
    435 
    436 		return $query->row['total'];
    437 	}
    438 }