110 lines
3.1 KiB
PHP
110 lines
3.1 KiB
PHP
<?php
|
|
|
|
class Controller_api_PexCard_CardLog extends Crunchbutton_Controller_RestAccount {
|
|
|
|
public function init() {
|
|
|
|
if( !c::admin()->permission()->check( ['global', 'settlement', 'support-all', 'support-crud' ] ) ){
|
|
$this->_error();
|
|
}
|
|
|
|
$limit = $this->request()['limit'] ? c::db()->escape($this->request()['limit']) : 20;
|
|
$search = $this->request()['search'] ? c::db()->escape($this->request()['search']) : '';
|
|
$type = $this->request()['type'] ? c::db()->escape($this->request()['type']) : 'all';
|
|
$status = $this->request()['status'] ? c::db()->escape($this->request()['status']) : 'all';
|
|
$page = $this->request()['page'] ? c::db()->escape($this->request()['page']) : 1;
|
|
|
|
if ($page == 1) {
|
|
$offset = '0';
|
|
} else {
|
|
$offset = ($page-1) * $limit;
|
|
}
|
|
|
|
$q = '
|
|
SELECT -WILD-
|
|
FROM
|
|
(SELECT
|
|
s.name AS `staff_name`,
|
|
a.name AS `admin_name`,
|
|
aptcs.timestamp,
|
|
NULL AS `card_serial`,
|
|
new_value AS `value`,
|
|
"using_pex" AS `type`
|
|
FROM admin_payment_type_change_set aptcs
|
|
INNER JOIN admin_payment_type_change aptc ON aptcs.id_admin_payment_type_change_set = aptc.id_admin_payment_type_change_set
|
|
AND aptc.field = "using_pex"
|
|
INNER JOIN admin_payment_type apt ON apt.id_admin_payment_type = aptcs.id_admin_payment_type
|
|
INNER JOIN admin s ON s.id_admin = apt.id_admin
|
|
INNER JOIN admin a ON a.id_admin = aptcs.id_admin
|
|
|
|
UNION
|
|
|
|
SELECT
|
|
s.name AS `staff_name`,
|
|
a.name AS `admin_name`,
|
|
apcs.timestamp,
|
|
ap.card_serial,
|
|
new_value AS `value`,
|
|
"card_assign" AS `type`
|
|
FROM admin_pexcard_change_set apcs
|
|
INNER JOIN admin_pexcard_change apc ON apcs.id_admin_pexcard_change_set = apc.id_admin_pexcard_change_set
|
|
AND apc.field = "id_admin"
|
|
INNER JOIN admin_pexcard ap ON ap.id_admin_pexcard = apcs.id_admin_pexcard
|
|
INNER JOIN admin s ON s.id_admin = apc.new_value
|
|
INNER JOIN admin a ON a.id_admin = apcs.id_admin ) log WHERE 1 = 1
|
|
';
|
|
|
|
if ($type != 'all') {
|
|
$q .= '
|
|
AND log.type = "' . $type . '"
|
|
';
|
|
}
|
|
|
|
if ($search) {
|
|
$q .= Crunchbutton_Query::search([
|
|
'search' => stripslashes($search),
|
|
'fields' => [
|
|
'log.staff_name' => 'like',
|
|
'log.admin_name' => 'like',
|
|
'log.card_serial' => 'like'
|
|
]
|
|
]);
|
|
}
|
|
|
|
|
|
// get the count
|
|
$r = c::db()->get(str_replace('-WILD-','COUNT(*) c', $q));
|
|
$count = intval( $r->_items[0]->c );
|
|
|
|
$q .= '
|
|
ORDER BY log.timestamp DESC
|
|
LIMIT '.$offset.', '.$limit . '
|
|
';
|
|
|
|
// do the query
|
|
$d = [];
|
|
$r = c::db()->query(str_replace('-WILD-','*', $q));
|
|
|
|
while ($o = $r->fetch()) {
|
|
$date = new DateTime($o->timestamp, new DateTimeZone(c::config()->timezone));;
|
|
$o->date = $date->format( 'M jS Y g:i:s A T' );
|
|
unset( $o->timestamp );
|
|
$d[] = $o;
|
|
}
|
|
|
|
echo json_encode([
|
|
'count' => intval($count),
|
|
'pages' => ceil($count / $limit),
|
|
'page' => $page,
|
|
'results' => $d
|
|
]);
|
|
|
|
exit;
|
|
}
|
|
|
|
private function _error( $error = 'invalid request' ){
|
|
echo json_encode( [ 'error' => $error ] );
|
|
exit();
|
|
}
|
|
|
|
} |