This commit is contained in:
meusinfirmary
2025-07-23 04:44:20 +07:00
parent db6fe59062
commit 3e6ea0b3d4
9 changed files with 641 additions and 402 deletions

View File

@ -24,19 +24,11 @@ class TrackController extends Controller
$now = time();
$input = [];
$rulesInput = [];
// validasi input
// $isValidInput = Validator::make($input, $rulesInput);
// if (!$isValidInput->passes()) {
// $apiResp = Responses::bad_input($isValidInput->messages()->first());
// return new Response($apiResp, $apiResp['meta']['code']);
// }
$filter = [
"get_order_data" => 1,
];
if ($req->cptid) {
$filter["company"] = $req->cptid;
// $filter["company"] = 1;
}
if ($req->auth->is_tracking === Users::IS_TRACK_VHC_YES) {
@ -75,7 +67,6 @@ class TrackController extends Controller
$filter["vids"][] = $v->vhc_id;
}
} elseif ($req->auth->role === Users::ROLE_SPECIAL_TRACKING) {
// $filter['vid'] = 0;
$filter["company"] = $req->auth->client_group_id;
} else {
$filter["vid"] = 0;
@ -88,8 +79,7 @@ class TrackController extends Controller
// dd($list);
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
// $list[$key]->mileage_km = '-';
$list[$key]->track_schedule = $row->track_sch_h . "/" . $row->track_sch_d; // combine track_sch_h + track_sch_d
$list[$key]->is_track_holiday_text =
$list[$key]->is_track_holiday == Vehicles::ENABLED_TRACK_HOLIDAY ? "Enabled" : "Disabled";
$list[$key]->alert_zones = "-";

View File

@ -454,24 +454,163 @@ class UsersController extends Controller
return new Response($apiResp, $apiResp["meta"]["code"]);
}
// if ($req->roles == Users::ROLE_VENDOR) {
// if (!$req->bank_id) {
// $apiResp = Responses::bad_request("bank wajib diisi");
// return new Response($apiResp, $apiResp["meta"]["code"]);
// }
// if (!$req->bank_branch_name) {
// $apiResp = Responses::bad_request("bank kcp wajib diisi");
// return new Response($apiResp, $apiResp["meta"]["code"]);
// }
// if (!$req->bank_acc_number) {
// $apiResp = Responses::bad_request("nomor rekening wajib diisi");
// return new Response($apiResp, $apiResp["meta"]["code"]);
// }
// if (!$req->bank_acc_name) {
// $apiResp = Responses::bad_request("nama pemilik rekening wajib diisi");
// return new Response($apiResp, $apiResp["meta"]["code"]);
// }
// }
$uniqEmail = Users::getUserByEmail($req->email);
if (count($uniqEmail) > 0) {
$notSameUser = 1;
foreach ($uniqEmail as $key => $row) {
if ($row->id == $req->uid) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request("email has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
$uniqPhone = Users::getUserByPhone($req->phone);
if (count($uniqPhone) > 0) {
$notSameUser = 1;
foreach ($uniqPhone as $key => $row) {
if ($row->id == $req->uid) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request("phone has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
$vhcs = null;
if ($req->is_tracking == Users::IS_TRACK_VHC_YES) {
if (!$req->vehicles) {
$apiResp = Responses::bad_request("vehicles must be filled");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
foreach ($req->vehicles as $k => $v) {
$vhcs .= $v . ",";
}
if ($vhcs) {
if (substr($vhcs, -1) === ",") {
$vhcs = substr($vhcs, 0, -1);
}
}
}
$data["is_tracking"] = $req->is_tracking;
$data["vhcs"] = $vhcs;
$data["updt"] = $now;
$data["updt_by"] = $req->auth->uid;
$data["role"] = 2;
DB::beginTransaction();
Users::updateUser($req->uid, $data);
if ($req->roles) {
DB::table("model_has_roles")
->where("model_id", $req->uid)
->delete();
DB::table("model_has_roles")->insert([
"role_id" => $req->roles,
"model_type" => "App\\User",
"model_id" => $req->uid,
]);
}
$apiResp = Responses::created("success update user");
DB::commit();
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_edit_user_profile(Request $req)
{
try {
$now = time();
$roles = Users::arrRoles();
$statuses = Users::arrStatus();
$input = [
"uid" => $req->uid,
"is_tracking" => $req->is_tracking,
"vehicles" => $req->vehicles,
"bank_id" => $req->bank_id,
"bank_code" => $req->bank_code,
"bank_short" => $req->bank_short,
"bank_name" => $req->bank_name,
"bank_kcp" => $req->bank_branch_name,
"bank_acc_number" => $req->bank_acc_number,
"bank_acc_name" => $req->bank_acc_name,
"is_vdr_bcng" => $req->is_vdr_bcng,
];
$rulesInput = [
"uid" => "required|integer|not_in:0",
"is_tracking" => "nullable|numeric",
"vehicles" => "nullable|array",
"bank_id" => "nullable|integer|not_in:0",
"bank_code" => "nullable|numeric",
"bank_short" => "nullable|string",
"bank_name" => "nullable|string",
"bank_kcp" => "nullable|string",
"bank_acc_number" => "nullable|numeric",
"bank_acc_name" => "nullable|string|max:255",
"is_vdr_bcng" => "nullable|numeric",
];
$data = [
"id" => $req->uid,
];
if ($req->first_name) {
$input["first_name"] = $req->first_name;
$rulesInput["first_name"] = "required|string|max:125";
$data["first_name"] = $req->first_name;
}
if ($req->last_name) {
$input["last_name"] = $req->last_name;
$rulesInput["last_name"] = "required|string|max:125";
$data["last_name"] = $req->last_name ?? null;
}
if ($req->email) {
$input["email"] = $req->email;
$rulesInput["email"] = "required|email";
$data["email"] = $req->email;
}
if ($req->phone) {
$input["phone"] = $req->phone;
$rulesInput["phone"] = "required|integer|not_in:0";
$data["phone"] = $req->phone;
$data["phone_code"] = Users::DEFAULT_PHONE_CODE;
}
if ($req->fulladdress) {
$input["fulladdress"] = $req->fulladdress;
$rulesInput["fulladdress"] = "required|string|min:45";
$data["fulladdress"] = $req->fulladdress;
}
if ($req->password) {
$input["password"] = $req->password;
$rulesInput["password"] = "required|string";
$data["password"] = Hash::make($req->password);
}
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$getUser = Users::getUserById($req->uid);
if (count($getUser) < 1) {
$apiResp = Responses::not_found("user not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$uniqEmail = Users::getUserByEmail($req->email);
if (count($uniqEmail) > 0) {
@ -499,67 +638,20 @@ class UsersController extends Controller
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
// $uniqCPhone = Clients::getClientByPhone($req->phone);
// if (count($uniqCPhone) > 0) {
// $notSameUser = 1;
// foreach ($uniqCPhone as $key => $row) {
// if ($row->id == $getUser[0]->client_id) {
// $notSameUser = 0;
// }
// }
// if ($notSameUser) {
// $apiResp = Responses::bad_request('phone has been used');
// return (new Response($apiResp, $apiResp['meta']['code']));
// }
// }
$vhcs = null;
if ($req->is_tracking == Users::IS_TRACK_VHC_YES) {
if (!$req->vehicles) {
$apiResp = Responses::bad_request("vehicles must be filled");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
foreach ($req->vehicles as $k => $v) {
$vhcs .= $v . ",";
}
if ($vhcs) {
if (substr($vhcs, -1) === ",") {
$vhcs = substr($vhcs, 0, -1);
}
}
}
$data["is_tracking"] = $req->is_tracking;
$data["vhcs"] = $vhcs;
// if ($req->roles == Users::ROLE_VENDOR) {
// $data["bank_id"] = $req->bank_id;
// $data["bank_code"] = $req->bank_code;
// $data["bank_name"] = $req->bank_name;
// $data["bank_short_name"] = $req->bank_short;
// $data["bank_branch_name"] = $req->bank_branch_name;
// $data["bank_acc_number"] = $req->bank_acc_number;
// $data["bank_acc_name"] = $req->bank_acc_name;
// $data["is_vdr_bcng"] = $req->is_vdr_bcng;
// }
$data["updt"] = $now;
$data["updt_by"] = $req->auth->uid;
$data["role"] = 2;
DB::beginTransaction();
Users::updateUser($req->uid, $data);
DB::table("model_has_roles")
->where("model_id", $req->uid)
->delete();
if ($req->roles) {
DB::table("model_has_roles")
->where("model_id", $req->uid)
->delete();
DB::table("model_has_roles")->insert([
"role_id" => $req->roles,
"model_type" => "App\\User", // atau 'App\User' tergantung struktur kamu
"model_id" => $req->uid, // ID user-nya
"model_type" => "App\\User",
"model_id" => $req->uid,
]);
}

View File

@ -49,262 +49,471 @@ class Tracks extends Model
* device sudah sampai dilokasi pengantaran dan dimatikan, ketika dipakai lagi data tracking yang lama kelihatan dan loncat
* untuk mengatasi itu di service_tracking juga perlu validasi tambahan, entah seperti apa caranya
*/
// public static function listCurrentTracks($filter = [])
// {
// $now = time();
// $params = [];
// $query = "SELECT";
// $query .=
// " v.id as vid,v.device_id,v.name as vhc_name,c.name as vhc_cat_name,t.name as vhc_type_name";
// $query .= " ,v.nopol1,v.nopol2,v.nopol3,vd.fvhc_img";
// $query .= " ,v.is_track_holiday,v.track_sch_d,v.track_sch_h,vd.speed_limit,v.crt as vhc_crt";
// $query .= " ,client.id as client_group_id,client.c_name as client_group_name";
// $query .= " ,tr.ignition,tr.stts_engine,tr.stts_gps,tr.stts_gsm";
// $query .= " ,tr.pre_milleage,tr.sum_milleage,tr.vhc_milleage,v.sum_milleage AS vhc_sum_milleage_1";
// // FRO
// // $query .= " ,(SELECT SUM(pre_milleage) FROM " . self::T_TRACKS . " WHERE vhc_id = v.id LIMIT 1) as vhc_sum_milleage";
// // $query .= " ,(SELECT crt_s FROM " . self::T_TRACKS . " WHERE stts_engine = " . self::STTS_EN_IDLING . " AND vhc_id = v.id AND crt_s >= (
// // SELECT crt_s FROM " . self::T_TRACKS . " WHERE stts_engine IN (" . self::STTS_EN_STOPING . "," . self::STTS_EN_MOVING . ") AND vhc_id = v.id AND crt_s <= tr.crt_s ORDER BY id DESC LIMIT 1
// // ) ORDER BY id ASC LIMIT 1) as lst_idle_at";
// // $query .= " ,(SELECT crt_s FROM " . self::T_TRACKS . " WHERE stts_engine = " . self::STTS_EN_STOPING . " AND vhc_id = v.id AND crt_s >= (
// // SELECT crt_s FROM " . self::T_TRACKS . " WHERE stts_engine IN (" . self::STTS_EN_IDLING . "," . self::STTS_EN_MOVING . ") AND vhc_id = v.id AND crt_s <= tr.crt_s ORDER BY id DESC LIMIT 1
// // ) ORDER BY id ASC LIMIT 1) as lst_stop_at";
// $query .=
// " ,tr.id AS lst_master_id,tr.latitude AS lst_lat,tr.longitude AS lst_lng,tr.speed AS lst_speed,tr.orientation AS lst_orientation";
// $query .= " ,tr.crt AS lst_loc_crt,tr.crt_d AS lst_loc_crt_d,tr.crt_s AS lst_loc_crt_s";
// $query .=
// " ,tr_addr.master_id AS lst_addr_master_id,tr_addr.country_text AS lst_country_text,tr_addr.state_text AS lst_state_text,tr_addr.city_text AS lst_city_text";
// $query .=
// " ,tr_addr.district_text AS lst_district_text,tr_addr.village_text AS lst_village_text,tr_addr.postcode AS lst_postcode";
// $query .= " ,tr_addr.streets AS lst_streets,tr_addr.fulladdress AS lst_fulladdress";
// // FRO
// // $query .= " ,(SELECT COUNT(id) FROM " . self::T_TRACKS . " WHERE vhc_id = v.id AND action = 'heartbeat' AND crt BETWEEN ".($now-(10*60))." AND ".$now." LIMIT 1) as lst_heartbeat"; // heartbeat last data on further 10 minutes
// if (isset($filter["active_rates"])) {
// $query .=
// ",rate.vdr_id as rate_vdr_id,rate.vhc_type as rate_vhc_type,rate.origin_prov as rate_origin_prov,rate.dest_city as rate_dest_city,rate.dest_district as rate_dest_district";
// $query .=
// ",rate.fast_time as rate_fast_time,rate.long_time as rate_long_time,rate.sell_kg as rate_sell_kg,rate.sell_cbm as rate_sell_cbm,rate.sell_ftl as rate_sell_ftl";
// }
// if (isset($filter["get_order_data"])) {
// $query .=
// ",ord.id as ord_id,ord.code as ord_code,ord.status as ord_stts,ord.crt as ord_crt,ord_pck.pck_name as ord_pck_name,ord_pck.pck_addr as ord_pck_addr,ord_drop.drop_name as ord_drop_name,ord_drop.drop_addr as ord_drop_addr";
// $query .=
// ",(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_pck.pck_ktid LIMIT 1) ord_pck_ktname, (SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_drop.drop_ktid LIMIT 1) ord_drop_ktname";
// $query .=
// ",ord_drv.drv_name as ord_drv_name,ord_drv.drv_phone_val as ord_drv_phone_val,ord_drv.drv_phone2_val as ord_drv_phone2_val,ord_drv.drv_addr as ord_drv_addr";
// $query .= ",ord_c.c_name as ord_c_name,ord_c.c_pt_name as ord_c_pt_name";
// }
// $query .= " FROM t_vehicles AS v";
// $query .= " INNER JOIN t_vehicles_detail AS vd ON v.id = vd.vid";
// $query .= " INNER JOIN t_vehicles_types AS t ON v.type_id = t.id";
// $query .= " INNER JOIN t_vehicles_cats AS c ON v.cat_id = c.id";
// $query .= " LEFT JOIN t_users AS vendor ON v.vendor_id = vendor.id";
// $query .= " LEFT JOIN t_clients AS client ON vendor.client_group_id = client.id";
// // get last updated row from many rows
// // $query .= " LEFT JOIN ( SELECT MAX(crt) max_crt, device_id FROM " . self::T_TRACKS . " WHERE latitude is not null AND longitude is not null GROUP BY device_id ORDER BY crt DESC ) AS tr1 ON (v.device_id = tr1.device_id)"; // cara lama berlaku utk gps tracker saja
// // // $query .= " LEFT JOIN ( SELECT MAX(crt) max_crt, device_id, vhc_id FROM " . self::T_TRACKS . " WHERE latitude is not null AND longitude is not null GROUP BY vhc_id ORDER BY crt DESC ) AS tr1 ON (v.id = tr1.vhc_id)"; // support gps tracker dan smartphone / apapun yang mempunyai device_id(IMEI)
// // $query .= " LEFT JOIN " . self::T_TRACKS . " AS tr ON (tr.crt = tr1.max_crt)";
// // get last updated tracking from updated table realtime
// // $query .= " LEFT JOIN db_trucking.t_gps_tracks_rltm AS tr ON tr.vhc_id = v.id";
// $query .= " LEFT JOIN t_gps_tracks_rltm AS tr ON tr.vhc_id = v.id";
// // $query .= " LEFT JOIN " . self::T_TRACKS_ADDR . " AS tr_addr ON tr.id = tr_addr.master_id";
// //FRO
// $query .=
// " LEFT JOIN " .
// self::T_TRACKS_ADDR .
// " AS tr_addr ON tr.latitude = tr_addr.lat and tr.longitude = tr_addr.lng";
// if (isset($filter["active_rates"])) {
// // $query .= " INNER JOIN t_conf_rates as rate ON v.type_id = rate.vhc_type";
// $query .= " INNER JOIN t_conf_rates as rate ON v.vendor_id = rate.vdr_id";
// }
// if (isset($filter["get_order_data"])) {
// // the old way => only 1 order 1 vehicle
// $query .= " LEFT JOIN t_orders as ord ON v.ord_id = ord.id";
// $query .= " LEFT JOIN t_orders_pickups as ord_pck ON v.ord_id = ord_pck.ord_id";
// $query .= " LEFT JOIN t_orders_drops as ord_drop ON v.ord_id = ord_drop.ord_id";
// $query .= " LEFT JOIN t_orders_drivers as ord_drv ON v.ord_id = ord_drv.ord_id";
// $query .= " LEFT JOIN t_orders_clients as ord_c ON v.ord_id = ord_c.ord_id";
// // the new way => can handle 2 order in 1 vehicle
// // $query .= " LEFT JOIN t_orders_vehicles as ord_vhc ON v.id = ord_vhc.vhc_id";
// // $query .= " LEFT JOIN t_orders as ord ON ord_vhc.ord_id = ord.id";
// // $query .= " LEFT JOIN t_orders_pickups as ord_pck ON ord_vhc.ord_id = ord_pck.ord_id";
// // $query .= " LEFT JOIN t_orders_drops as ord_drop ON ord_vhc.ord_id = ord_drop.ord_id";
// // $query .= " LEFT JOIN t_orders_drivers as ord_drv ON ord_vhc.ord_id = ord_drv.ord_id";
// // $query .= " LEFT JOIN t_orders_clients as ord_c ON ord_vhc.ord_id = ord_c.ord_id";
// }
// $query .= " WHERE v.dlt is null";
// // $query .= " AND tr.action IN ('location','alarm')"; // kalo gamau ngambil data heartbeat(idling)
// // $query .= " AND tr.device_id = v.device_id"; // cara lama berlaku utk gps tracker saja
// // $query .= " AND tr.vhc_id = v.id"; // support gps tracker dan smartphone / apapun yang mempunyai device_id(IMEI) // bikin lemot
// $query .= " AND tr.latitude != 0 AND tr.latitude is not null";
// if (isset($filter["status"])) {
// $query .= " AND v.status = ?";
// $params[] = $filter["status"];
// }
// if (isset($filter["is_in_ord"])) {
// $query .= " AND v.is_in_ord = ?";
// $params[] = $filter["is_in_ord"];
// }
// if (isset($filter["nopol1"]) && isset($filter["nopol2"]) && isset($filter["nopol3"])) {
// $query .= " AND v.nopol1 = ? AND v.nopol2 = ? AND v.nopol3 = ?";
// array_push($params, $filter["nopol1"], $filter["nopol2"], $filter["nopol3"]);
// }
// if (isset($filter["vid"])) {
// $query .= " AND v.id = ?";
// $params[] = $filter["vid"];
// }
// if (isset($filter["vids"])) {
// if ($filter["vids"] && count($filter["vids"]) > 0) {
// $binds_vids = "";
// foreach ($filter["vids"] as $k => $v) {
// $binds_vids .= "?,";
// $params[] = $v;
// }
// if (substr($binds_vids, -1) === ",") {
// $binds_vids = substr($binds_vids, 0, -1);
// }
// $query .= " AND v.id IN ($binds_vids)";
// } else {
// $query .= " AND v.id = ?";
// $params[] = 0;
// }
// }
// if (isset($filter["own_by_vdr_id"])) {
// $query .= " AND v.vendor_id = ?";
// $params[] = $filter["own_by_vdr_id"];
// }
// if (isset($filter["active_rates"])) {
// // v1
// // $query .= " AND rate.vdr_id != 0 AND rate.dest_city != 0 AND rate.dest_district != 0";
// // $query .= " AND rate.origin_prov = ? AND (rate.dest_city = ? OR rate.dest_district = ?) AND rate.sell_kg = ? AND rate.sell_cbm = ? AND rate.long_time = ?";
// // array_push($params, $filter['active_rates']->origin_prov, $filter['active_rates']->dest_city, $filter['active_rates']->dest_district, $filter['active_rates']->sell_kg, $filter['active_rates']->sell_cbm, $filter['active_rates']->long_time);
// // v2
// $query .=
// " AND rate.vdr_id != 0 AND rate.dest_city != 0 AND rate.is_active = " . ConfRates::IS_ACTIVE;
// $query .=
// " AND rate.origin_prov = ? AND (rate.dest_city = ? OR rate.dest_district = ?) AND rate.sell_ftl = ? AND rate.long_time = ?";
// array_push(
// $params,
// $filter["active_rates"]->origin_prov,
// $filter["active_rates"]->dest_city,
// $filter["active_rates"]->dest_district,
// $filter["active_rates"]->sell_ftl,
// $filter["active_rates"]->long_time
// );
// }
// if (isset($filter["prefer_truck_type"])) {
// $query .= " AND v.type_id = ?";
// $params[] = $filter["prefer_truck_type"];
// }
// if (isset($filter["get_order_data"])) {
// if (isset($filter["client_id"])) {
// $query .= " AND ord_c.c_id = ?";
// $params[] = $filter["client_id"];
// }
// // $query .= " AND ord.status IN (22,4)";
// }
// if (isset($filter["company"])) {
// $query .= " AND client.id = ?";
// $params[] = $filter["company"];
// }
// // $query .= " AND v.id = 70";
// $query .= " GROUP BY v.id";
// $query .= " ORDER BY tr.crt_d DESC";
// $query .= " LIMIT 500;";
// // dd($query);
// $list = DB::select($query, $params);
// foreach ($list as $_list) {
// $_query =
// " SELECT SUM(pre_milleage) as vhc_sum_milleage FROM " . self::T_TRACKS . " WHERE vhc_id = ?";
// $_query = DB::select($_query, [$_list->vid]);
// $_list->vhc_sum_milleage = $_query[0]->vhc_sum_milleage;
// $_query =
// "
// SELECT
// crt_s as lst_idle_at
// FROM
// " .
// self::T_TRACKS .
// "
// WHERE
// stts_engine = " .
// self::STTS_EN_IDLING .
// "
// AND vhc_id = ?
// AND crt_s >= (
// SELECT
// crt_s
// FROM
// " .
// self::T_TRACKS .
// "
// WHERE
// stts_engine IN (
// " .
// self::STTS_EN_STOPING .
// ",
// " .
// self::STTS_EN_MOVING .
// ")
// AND vhc_id = ?
// AND crt_s <= ?
// ORDER BY
// id DESC
// LIMIT 1
// )
// ORDER BY
// id ASC
// LIMIT 1";
// $_query = DB::select($_query, [$_list->vid, $_list->vid, $_list->lst_loc_crt_s]);
// $_list->lst_idle_at = count($_query) == 0 ? "" : $_query[0]->lst_idle_at;
// $_query =
// "SELECT crt_s as lst_stop_at FROM " .
// self::T_TRACKS .
// " WHERE stts_engine = " .
// self::STTS_EN_STOPING .
// " AND vhc_id = ? AND crt_s >= (
// SELECT crt_s FROM " .
// self::T_TRACKS .
// " WHERE stts_engine IN (" .
// self::STTS_EN_IDLING .
// "," .
// self::STTS_EN_MOVING .
// ") AND vhc_id = ? AND crt_s <= ? ORDER BY id DESC LIMIT 1
// ) ORDER BY id ASC LIMIT 1 ";
// $_query = DB::select($_query, [$_list->vid, $_list->vid, $_list->lst_loc_crt_s]);
// $_list->lst_stop_at = count($_query) == 0 ? "" : $_query[0]->lst_stop_at;
// $_query =
// " SELECT COUNT(id) as lst_heartbeat FROM " .
// self::T_TRACKS .
// " WHERE vhc_id = ? AND action = 'heartbeat' AND crt BETWEEN " .
// ($now - 10 * 60) .
// " AND " .
// $now .
// " LIMIT 1";
// $_query = DB::select($_query, [$_list->vid]);
// $_list->lst_heartbeat = count($_query) == 0 ? "" : $_query[0]->lst_heartbeat;
// }
// // em
// return $list;
// }
// public static function listCurrentTracks($filter = [])
// {
// $now = time();
// $params = [];
// $query = "SELECT";
// $query .=
// " v.id as vid,v.device_id,v.name as vhc_name,c.name as vhc_cat_name,t.name as vhc_type_name";
// $query .= " ,v.nopol1,v.nopol2,v.nopol3,vd.fvhc_img";
// $query .= " ,v.is_track_holiday,v.track_sch_d,v.track_sch_h,vd.speed_limit,v.crt as vhc_crt";
// $query .= " ,client.id as client_group_id,client.c_name as client_group_name";
// $query .= " ,tr.ignition,tr.stts_engine,tr.stts_gps,tr.stts_gsm";
// $query .= " ,tr.pre_milleage,tr.sum_milleage,tr.vhc_milleage,v.sum_milleage AS vhc_sum_milleage_1";
// $query .=
// " ,tr.id AS lst_master_id,tr.latitude AS lst_lat,tr.longitude AS lst_lng,tr.speed AS lst_speed,tr.orientation AS lst_orientation";
// $query .= " ,tr.crt AS lst_loc_crt,tr.crt_d AS lst_loc_crt_d,tr.crt_s AS lst_loc_crt_s";
// $query .=
// " ,tr_addr.master_id AS lst_addr_master_id,tr_addr.country_text AS lst_country_text,tr_addr.state_text AS lst_state_text,tr_addr.city_text AS lst_city_text";
// $query .=
// " ,tr_addr.district_text AS lst_district_text,tr_addr.village_text AS lst_village_text,tr_addr.postcode AS lst_postcode";
// $query .= " ,tr_addr.streets AS lst_streets,tr_addr.fulladdress AS lst_fulladdress";
// $query .= " FROM t_vehicles AS v";
// $query .= " INNER JOIN t_vehicles_detail AS vd ON v.id = vd.vid";
// $query .= " INNER JOIN t_vehicles_types AS t ON v.type_id = t.id";
// $query .= " INNER JOIN t_vehicles_cats AS c ON v.cat_id = c.id";
// $query .= " LEFT JOIN t_users AS vendor ON v.vendor_id = vendor.id";
// $query .= " LEFT JOIN t_clients AS client ON vendor.client_group_id = client.id";
// $query .= " LEFT JOIN t_gps_tracks_rltm AS tr ON tr.vhc_id = v.id";
// $query .=
// " LEFT JOIN t_gps_tracks_address AS tr_addr ON tr.latitude = tr_addr.lat and tr.longitude = tr_addr.lng";
// $query .= " WHERE v.dlt is null";
// $query .= " AND tr.latitude != 0 AND tr.latitude is not null";
// $query .= " GROUP BY v.id";
// $query .= " ORDER BY tr.crt_d DESC";
// $query .= " LIMIT 500;";
// $list = DB::select($query, $params);
// foreach ($list as $_list) {
// $_query = "SELECT sum_milleage as vhc_sum_milleage FROM t_vehicles WHERE id = ?";
// $_query = DB::select($_query, [$_list->vid]);
// $_list->vhc_sum_milleage = $_query[0]->vhc_sum_milleage ?? 0;
// $_query = "
// SELECT
// crt_s as lst_idle_at
// FROM
// t_gps_tracks
// WHERE
// stts_engine = 2
// AND vhc_id = ?
// AND crt_s >= (
// SELECT
// crt_s
// FROM
// t_gps_tracks
// WHERE
// stts_engine IN (0, 1)
// AND vhc_id = ?
// AND crt_s <= ?
// ORDER BY
// id DESC
// LIMIT 1
// )
// ORDER BY
// id ASC
// LIMIT 1";
// $_query = DB::select($_query, [$_list->vid, $_list->vid, $_list->lst_loc_crt_s]);
// $_list->lst_idle_at = count($_query) == 0 ? "" : $_query[0]->lst_idle_at;
// $_query = "SELECT crt_s as lst_stop_at FROM t_gps_tracks WHERE stts_engine = 0 AND vhc_id = ? AND crt_s >= (
// SELECT crt_s FROM t_gps_tracks WHERE stts_engine IN (2,1) AND vhc_id = ? AND crt_s <= ? ORDER BY id DESC LIMIT 1
// ) ORDER BY id ASC LIMIT 1 ";
// $_query = DB::select($_query, [$_list->vid, $_list->vid, $_list->lst_loc_crt_s]);
// $_list->lst_stop_at = count($_query) == 0 ? "" : $_query[0]->lst_stop_at;
// $_query =
// " SELECT COUNT(id) as lst_heartbeat FROM t_gps_tracks WHERE vhc_id = ? AND action = 'heartbeat' AND crt BETWEEN " .
// ($now - 10 * 60) .
// " AND " .
// $now .
// " LIMIT 1";
// $_query = DB::select($_query, [$_list->vid]);
// $_list->lst_heartbeat = count($_query) == 0 ? "" : $_query[0]->lst_heartbeat;
// }
// return $list;
// }
public static function listCurrentTracks($filter = [])
{
$now = time();
$params = [];
$query = "SELECT";
$query .=
" v.id as vid,v.device_id,v.name as vhc_name,c.name as vhc_cat_name,t.name as vhc_type_name";
$query .= " ,v.nopol1,v.nopol2,v.nopol3,vd.fvhc_img";
$query .= " ,v.is_track_holiday,v.track_sch_d,v.track_sch_h,vd.speed_limit,v.crt as vhc_crt";
$query .= " ,client.id as client_group_id,client.c_name as client_group_name";
$query .= " ,tr.ignition,tr.stts_engine,tr.stts_gps,tr.stts_gsm";
$query .= " ,tr.pre_milleage,tr.sum_milleage,tr.vhc_milleage,v.sum_milleage AS vhc_sum_milleage_1";
$list = DB::select(
"
SELECT
v.id as vid, v.device_id, v.name as vhc_name,
c.name as vhc_cat_name, t.name as vhc_type_name,
v.nopol1, v.nopol2, v.nopol3, vd.fvhc_img,
v.is_track_holiday, v.track_sch_d, v.track_sch_h,
vd.speed_limit, v.crt as vhc_crt,
client.id as client_group_id, client.c_name as client_group_name,
tr.ignition, tr.stts_engine, tr.stts_gps, tr.stts_gsm,
tr.pre_milleage, tr.sum_milleage, tr.vhc_milleage, v.sum_milleage AS vhc_sum_milleage_1,
tr.id AS lst_master_id, tr.latitude AS lst_lat, tr.longitude AS lst_lng,
tr.speed AS lst_speed, tr.orientation AS lst_orientation,
tr.crt AS lst_loc_crt, tr.crt_d AS lst_loc_crt_d, tr.crt_s AS lst_loc_crt_s,
tr_addr.master_id AS lst_addr_master_id,
tr_addr.country_text AS lst_country_text, tr_addr.state_text AS lst_state_text,
tr_addr.city_text AS lst_city_text, tr_addr.district_text AS lst_district_text,
tr_addr.village_text AS lst_village_text, tr_addr.postcode AS lst_postcode,
tr_addr.streets AS lst_streets, tr_addr.fulladdress AS lst_fulladdress
FROM t_vehicles AS v
INNER JOIN t_vehicles_detail AS vd ON v.id = vd.vid
INNER JOIN t_vehicles_types AS t ON v.type_id = t.id
INNER JOIN t_vehicles_cats AS c ON v.cat_id = c.id
LEFT JOIN t_users AS vendor ON v.vendor_id = vendor.id
LEFT JOIN t_clients AS client ON vendor.client_group_id = client.id
LEFT JOIN t_gps_tracks_rltm AS tr ON tr.vhc_id = v.id
LEFT JOIN t_gps_tracks_address AS tr_addr ON tr.latitude = tr_addr.lat AND tr.longitude = tr_addr.lng
WHERE v.dlt IS NULL
AND tr.latitude != 0 AND tr.latitude IS NOT NULL
GROUP BY v.id
ORDER BY tr.crt_d DESC
LIMIT 20
",
$params
);
// FRO
// $query .= " ,(SELECT SUM(pre_milleage) FROM " . self::T_TRACKS . " WHERE vhc_id = v.id LIMIT 1) as vhc_sum_milleage";
// $query .= " ,(SELECT crt_s FROM " . self::T_TRACKS . " WHERE stts_engine = " . self::STTS_EN_IDLING . " AND vhc_id = v.id AND crt_s >= (
// SELECT crt_s FROM " . self::T_TRACKS . " WHERE stts_engine IN (" . self::STTS_EN_STOPING . "," . self::STTS_EN_MOVING . ") AND vhc_id = v.id AND crt_s <= tr.crt_s ORDER BY id DESC LIMIT 1
// ) ORDER BY id ASC LIMIT 1) as lst_idle_at";
// $query .= " ,(SELECT crt_s FROM " . self::T_TRACKS . " WHERE stts_engine = " . self::STTS_EN_STOPING . " AND vhc_id = v.id AND crt_s >= (
// SELECT crt_s FROM " . self::T_TRACKS . " WHERE stts_engine IN (" . self::STTS_EN_IDLING . "," . self::STTS_EN_MOVING . ") AND vhc_id = v.id AND crt_s <= tr.crt_s ORDER BY id DESC LIMIT 1
// ) ORDER BY id ASC LIMIT 1) as lst_stop_at";
$query .=
" ,tr.id AS lst_master_id,tr.latitude AS lst_lat,tr.longitude AS lst_lng,tr.speed AS lst_speed,tr.orientation AS lst_orientation";
$query .= " ,tr.crt AS lst_loc_crt,tr.crt_d AS lst_loc_crt_d,tr.crt_s AS lst_loc_crt_s";
$query .=
" ,tr_addr.master_id AS lst_addr_master_id,tr_addr.country_text AS lst_country_text,tr_addr.state_text AS lst_state_text,tr_addr.city_text AS lst_city_text";
$query .=
" ,tr_addr.district_text AS lst_district_text,tr_addr.village_text AS lst_village_text,tr_addr.postcode AS lst_postcode";
$query .= " ,tr_addr.streets AS lst_streets,tr_addr.fulladdress AS lst_fulladdress";
// FRO
// $query .= " ,(SELECT COUNT(id) FROM " . self::T_TRACKS . " WHERE vhc_id = v.id AND action = 'heartbeat' AND crt BETWEEN ".($now-(10*60))." AND ".$now." LIMIT 1) as lst_heartbeat"; // heartbeat last data on further 10 minutes
if (isset($filter["active_rates"])) {
$query .=
",rate.vdr_id as rate_vdr_id,rate.vhc_type as rate_vhc_type,rate.origin_prov as rate_origin_prov,rate.dest_city as rate_dest_city,rate.dest_district as rate_dest_district";
$query .=
",rate.fast_time as rate_fast_time,rate.long_time as rate_long_time,rate.sell_kg as rate_sell_kg,rate.sell_cbm as rate_sell_cbm,rate.sell_ftl as rate_sell_ftl";
}
if (isset($filter["get_order_data"])) {
$query .=
",ord.id as ord_id,ord.code as ord_code,ord.status as ord_stts,ord.crt as ord_crt,ord_pck.pck_name as ord_pck_name,ord_pck.pck_addr as ord_pck_addr,ord_drop.drop_name as ord_drop_name,ord_drop.drop_addr as ord_drop_addr";
$query .=
",(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_pck.pck_ktid LIMIT 1) ord_pck_ktname, (SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_drop.drop_ktid LIMIT 1) ord_drop_ktname";
$query .=
",ord_drv.drv_name as ord_drv_name,ord_drv.drv_phone_val as ord_drv_phone_val,ord_drv.drv_phone2_val as ord_drv_phone2_val,ord_drv.drv_addr as ord_drv_addr";
$query .= ",ord_c.c_name as ord_c_name,ord_c.c_pt_name as ord_c_pt_name";
}
$query .= " FROM t_vehicles AS v";
$query .= " INNER JOIN t_vehicles_detail AS vd ON v.id = vd.vid";
$query .= " INNER JOIN t_vehicles_types AS t ON v.type_id = t.id";
$query .= " INNER JOIN t_vehicles_cats AS c ON v.cat_id = c.id";
$query .= " LEFT JOIN t_users AS vendor ON v.vendor_id = vendor.id";
$query .= " LEFT JOIN t_clients AS client ON vendor.client_group_id = client.id";
// get last updated row from many rows
// $query .= " LEFT JOIN ( SELECT MAX(crt) max_crt, device_id FROM " . self::T_TRACKS . " WHERE latitude is not null AND longitude is not null GROUP BY device_id ORDER BY crt DESC ) AS tr1 ON (v.device_id = tr1.device_id)"; // cara lama berlaku utk gps tracker saja
// // $query .= " LEFT JOIN ( SELECT MAX(crt) max_crt, device_id, vhc_id FROM " . self::T_TRACKS . " WHERE latitude is not null AND longitude is not null GROUP BY vhc_id ORDER BY crt DESC ) AS tr1 ON (v.id = tr1.vhc_id)"; // support gps tracker dan smartphone / apapun yang mempunyai device_id(IMEI)
// $query .= " LEFT JOIN " . self::T_TRACKS . " AS tr ON (tr.crt = tr1.max_crt)";
// get last updated tracking from updated table realtime
// $query .= " LEFT JOIN db_trucking.t_gps_tracks_rltm AS tr ON tr.vhc_id = v.id";
$query .= " LEFT JOIN t_gps_tracks_rltm AS tr ON tr.vhc_id = v.id";
// $query .= " LEFT JOIN " . self::T_TRACKS_ADDR . " AS tr_addr ON tr.id = tr_addr.master_id";
//FRO
$query .=
" LEFT JOIN " .
self::T_TRACKS_ADDR .
" AS tr_addr ON tr.latitude = tr_addr.lat and tr.longitude = tr_addr.lng";
if (isset($filter["active_rates"])) {
// $query .= " INNER JOIN t_conf_rates as rate ON v.type_id = rate.vhc_type";
$query .= " INNER JOIN t_conf_rates as rate ON v.vendor_id = rate.vdr_id";
}
if (isset($filter["get_order_data"])) {
// the old way => only 1 order 1 vehicle
$query .= " LEFT JOIN t_orders as ord ON v.ord_id = ord.id";
$query .= " LEFT JOIN t_orders_pickups as ord_pck ON v.ord_id = ord_pck.ord_id";
$query .= " LEFT JOIN t_orders_drops as ord_drop ON v.ord_id = ord_drop.ord_id";
$query .= " LEFT JOIN t_orders_drivers as ord_drv ON v.ord_id = ord_drv.ord_id";
$query .= " LEFT JOIN t_orders_clients as ord_c ON v.ord_id = ord_c.ord_id";
// the new way => can handle 2 order in 1 vehicle
// $query .= " LEFT JOIN t_orders_vehicles as ord_vhc ON v.id = ord_vhc.vhc_id";
// $query .= " LEFT JOIN t_orders as ord ON ord_vhc.ord_id = ord.id";
// $query .= " LEFT JOIN t_orders_pickups as ord_pck ON ord_vhc.ord_id = ord_pck.ord_id";
// $query .= " LEFT JOIN t_orders_drops as ord_drop ON ord_vhc.ord_id = ord_drop.ord_id";
// $query .= " LEFT JOIN t_orders_drivers as ord_drv ON ord_vhc.ord_id = ord_drv.ord_id";
// $query .= " LEFT JOIN t_orders_clients as ord_c ON ord_vhc.ord_id = ord_c.ord_id";
}
$query .= " WHERE v.dlt is null";
// $query .= " AND tr.action IN ('location','alarm')"; // kalo gamau ngambil data heartbeat(idling)
// $query .= " AND tr.device_id = v.device_id"; // cara lama berlaku utk gps tracker saja
// $query .= " AND tr.vhc_id = v.id"; // support gps tracker dan smartphone / apapun yang mempunyai device_id(IMEI) // bikin lemot
$query .= " AND tr.latitude != 0 AND tr.latitude is not null";
if (isset($filter["status"])) {
$query .= " AND v.status = ?";
$params[] = $filter["status"];
}
if (isset($filter["is_in_ord"])) {
$query .= " AND v.is_in_ord = ?";
$params[] = $filter["is_in_ord"];
}
if (isset($filter["nopol1"]) && isset($filter["nopol2"]) && isset($filter["nopol3"])) {
$query .= " AND v.nopol1 = ? AND v.nopol2 = ? AND v.nopol3 = ?";
array_push($params, $filter["nopol1"], $filter["nopol2"], $filter["nopol3"]);
}
if (isset($filter["vid"])) {
$query .= " AND v.id = ?";
$params[] = $filter["vid"];
}
if (isset($filter["vids"])) {
if ($filter["vids"] && count($filter["vids"]) > 0) {
$binds_vids = "";
foreach ($filter["vids"] as $k => $v) {
$binds_vids .= "?,";
$params[] = $v;
}
if (substr($binds_vids, -1) === ",") {
$binds_vids = substr($binds_vids, 0, -1);
}
$query .= " AND v.id IN ($binds_vids)";
} else {
$query .= " AND v.id = ?";
$params[] = 0;
}
}
if (isset($filter["own_by_vdr_id"])) {
$query .= " AND v.vendor_id = ?";
$params[] = $filter["own_by_vdr_id"];
}
if (isset($filter["active_rates"])) {
// v1
// $query .= " AND rate.vdr_id != 0 AND rate.dest_city != 0 AND rate.dest_district != 0";
// $query .= " AND rate.origin_prov = ? AND (rate.dest_city = ? OR rate.dest_district = ?) AND rate.sell_kg = ? AND rate.sell_cbm = ? AND rate.long_time = ?";
// array_push($params, $filter['active_rates']->origin_prov, $filter['active_rates']->dest_city, $filter['active_rates']->dest_district, $filter['active_rates']->sell_kg, $filter['active_rates']->sell_cbm, $filter['active_rates']->long_time);
// v2
$query .=
" AND rate.vdr_id != 0 AND rate.dest_city != 0 AND rate.is_active = " . ConfRates::IS_ACTIVE;
$query .=
" AND rate.origin_prov = ? AND (rate.dest_city = ? OR rate.dest_district = ?) AND rate.sell_ftl = ? AND rate.long_time = ?";
array_push(
$params,
$filter["active_rates"]->origin_prov,
$filter["active_rates"]->dest_city,
$filter["active_rates"]->dest_district,
$filter["active_rates"]->sell_ftl,
$filter["active_rates"]->long_time
);
}
if (isset($filter["prefer_truck_type"])) {
$query .= " AND v.type_id = ?";
$params[] = $filter["prefer_truck_type"];
}
if (isset($filter["get_order_data"])) {
if (isset($filter["client_id"])) {
$query .= " AND ord_c.c_id = ?";
$params[] = $filter["client_id"];
}
// $query .= " AND ord.status IN (22,4)";
}
if (isset($filter["company"])) {
$query .= " AND client.id = ?";
$params[] = $filter["company"];
}
// $query .= " AND v.id = 70";
$query .= " GROUP BY v.id";
$query .= " ORDER BY tr.crt_d DESC";
$query .= " LIMIT 500;";
// dd($query);
$list = DB::select($query, $params);
foreach ($list as $_list) {
$_query =
" SELECT SUM(pre_milleage) as vhc_sum_milleage FROM " . self::T_TRACKS . " WHERE vhc_id = ?";
$_query = DB::select($_query, [$_list->vid]);
$_list->vhc_sum_milleage = $_query[0]->vhc_sum_milleage;
$_query =
"
SELECT
crt_s as lst_idle_at
FROM
" .
self::T_TRACKS .
"
WHERE
stts_engine = " .
self::STTS_EN_IDLING .
"
AND vhc_id = ?
AND crt_s >= (
SELECT
crt_s
FROM
" .
self::T_TRACKS .
"
WHERE
stts_engine IN (
" .
self::STTS_EN_STOPING .
",
" .
self::STTS_EN_MOVING .
")
AND vhc_id = ?
AND crt_s <= ?
ORDER BY
id DESC
LIMIT 1
)
ORDER BY
id ASC
LIMIT 1";
$_query = DB::select($_query, [$_list->vid, $_list->vid, $_list->lst_loc_crt_s]);
$_list->lst_idle_at = count($_query) == 0 ? "" : $_query[0]->lst_idle_at;
$_query =
"SELECT crt_s as lst_stop_at FROM " .
self::T_TRACKS .
" WHERE stts_engine = " .
self::STTS_EN_STOPING .
" AND vhc_id = ? AND crt_s >= (
SELECT crt_s FROM " .
self::T_TRACKS .
" WHERE stts_engine IN (" .
self::STTS_EN_IDLING .
"," .
self::STTS_EN_MOVING .
") AND vhc_id = ? AND crt_s <= ? ORDER BY id DESC LIMIT 1
) ORDER BY id ASC LIMIT 1 ";
$_query = DB::select($_query, [$_list->vid, $_list->vid, $_list->lst_loc_crt_s]);
$_list->lst_stop_at = count($_query) == 0 ? "" : $_query[0]->lst_stop_at;
$_query =
" SELECT COUNT(id) as lst_heartbeat FROM " .
self::T_TRACKS .
" WHERE vhc_id = ? AND action = 'heartbeat' AND crt BETWEEN " .
($now - 10 * 60) .
" AND " .
$now .
" LIMIT 1";
$_query = DB::select($_query, [$_list->vid]);
$_list->lst_heartbeat = count($_query) == 0 ? "" : $_query[0]->lst_heartbeat;
$_list->vhc_sum_milleage = self::getVehicleMileage($_list->vid);
$_list->lst_idle_at = self::getIdleAt($_list->vid, $_list->lst_loc_crt_s);
$_list->lst_stop_at = self::getStopAt($_list->vid, $_list->lst_loc_crt_s);
$_list->lst_heartbeat = self::getHeartbeat($_list->vid, $now);
}
// em
return $list;
}
private static function getVehicleMileage($vhc_id)
{
$res = DB::select("SELECT sum_milleage as vhc_sum_milleage FROM t_vehicles WHERE id = ? LIMIT 1", [
$vhc_id,
]);
return $res[0]->vhc_sum_milleage ?? 0;
}
private static function getIdleAt($vhc_id, $ref_crt_s)
{
$res = DB::select(
"
SELECT crt_s as lst_idle_at
FROM t_gps_tracks
WHERE stts_engine = 2
AND vhc_id = ?
AND crt_s >= (
SELECT crt_s FROM t_gps_tracks
WHERE stts_engine IN (0, 1) AND vhc_id = ? AND crt_s <= ?
ORDER BY id DESC LIMIT 1
)
ORDER BY id ASC LIMIT 1
",
[$vhc_id, $vhc_id, $ref_crt_s]
);
return count($res) > 0 ? $res[0]->lst_idle_at : "";
}
private static function getStopAt($vhc_id, $ref_crt_s)
{
$res = DB::select(
"
SELECT crt_s as lst_stop_at
FROM t_gps_tracks
WHERE stts_engine = 0 AND vhc_id = ?
AND crt_s >= (
SELECT crt_s FROM t_gps_tracks
WHERE stts_engine IN (2,1) AND vhc_id = ? AND crt_s <= ?
ORDER BY id DESC LIMIT 1
)
ORDER BY id ASC LIMIT 1
",
[$vhc_id, $vhc_id, $ref_crt_s]
);
return count($res) > 0 ? $res[0]->lst_stop_at : "";
}
private static function getHeartbeat($vhc_id, $now)
{
$start = $now - 600;
$res = DB::select(
"
SELECT COUNT(id) as lst_heartbeat
FROM t_gps_tracks
WHERE vhc_id = ?
AND action = 'heartbeat'
AND crt BETWEEN ? AND ?
LIMIT 1
",
[$vhc_id, $start, $now]
);
return count($res) > 0 ? $res[0]->lst_heartbeat : 0;
}
public static function lastMoveTracks($vid, $filter = [])
{
$now = time();

View File

@ -63,17 +63,6 @@ class Tracks_copy extends Model
$query .= " ,tr.ignition,tr.stts_engine,tr.stts_gps,tr.stts_gsm";
$query .= " ,tr.pre_milleage,tr.sum_milleage,tr.vhc_milleage,v.sum_milleage AS vhc_sum_milleage_1";
// FRO
// $query .= " ,(SELECT SUM(pre_milleage) FROM " . self::T_TRACKS . " WHERE vhc_id = v.id LIMIT 1) as vhc_sum_milleage";
// $query .= " ,(SELECT crt_s FROM " . self::T_TRACKS . " WHERE stts_engine = " . self::STTS_EN_IDLING . " AND vhc_id = v.id AND crt_s >= (
// SELECT crt_s FROM " . self::T_TRACKS . " WHERE stts_engine IN (" . self::STTS_EN_STOPING . "," . self::STTS_EN_MOVING . ") AND vhc_id = v.id AND crt_s <= tr.crt_s ORDER BY id DESC LIMIT 1
// ) ORDER BY id ASC LIMIT 1) as lst_idle_at";
// $query .= " ,(SELECT crt_s FROM " . self::T_TRACKS . " WHERE stts_engine = " . self::STTS_EN_STOPING . " AND vhc_id = v.id AND crt_s >= (
// SELECT crt_s FROM " . self::T_TRACKS . " WHERE stts_engine IN (" . self::STTS_EN_IDLING . "," . self::STTS_EN_MOVING . ") AND vhc_id = v.id AND crt_s <= tr.crt_s ORDER BY id DESC LIMIT 1
// ) ORDER BY id ASC LIMIT 1) as lst_stop_at";
$query .=
" ,tr.id AS lst_master_id,tr.latitude AS lst_lat,tr.longitude AS lst_lng,tr.speed AS lst_speed,tr.orientation AS lst_orientation";
$query .= " ,tr.crt AS lst_loc_crt,tr.crt_d AS lst_loc_crt_d,tr.crt_s AS lst_loc_crt_s";
@ -83,9 +72,6 @@ class Tracks_copy extends Model
" ,tr_addr.district_text AS lst_district_text,tr_addr.village_text AS lst_village_text,tr_addr.postcode AS lst_postcode";
$query .= " ,tr_addr.streets AS lst_streets,tr_addr.fulladdress AS lst_fulladdress";
// FRO
// $query .= " ,(SELECT COUNT(id) FROM " . self::T_TRACKS . " WHERE vhc_id = v.id AND action = 'heartbeat' AND crt BETWEEN ".($now-(10*60))." AND ".$now." LIMIT 1) as lst_heartbeat"; // heartbeat last data on further 10 minutes
if (isset($filter["active_rates"])) {
$query .=
",rate.vdr_id as rate_vdr_id,rate.vhc_type as rate_vhc_type,rate.origin_prov as rate_origin_prov,rate.dest_city as rate_dest_city,rate.dest_district as rate_dest_district";
@ -107,45 +93,23 @@ class Tracks_copy extends Model
$query .= " INNER JOIN t_vehicles_cats AS c ON v.cat_id = c.id";
$query .= " LEFT JOIN t_users AS vendor ON v.vendor_id = vendor.id";
$query .= " LEFT JOIN t_clients AS client ON vendor.client_group_id = client.id";
// get last updated row from many rows
// $query .= " LEFT JOIN ( SELECT MAX(crt) max_crt, device_id FROM " . self::T_TRACKS . " WHERE latitude is not null AND longitude is not null GROUP BY device_id ORDER BY crt DESC ) AS tr1 ON (v.device_id = tr1.device_id)"; // cara lama berlaku utk gps tracker saja
// // $query .= " LEFT JOIN ( SELECT MAX(crt) max_crt, device_id, vhc_id FROM " . self::T_TRACKS . " WHERE latitude is not null AND longitude is not null GROUP BY vhc_id ORDER BY crt DESC ) AS tr1 ON (v.id = tr1.vhc_id)"; // support gps tracker dan smartphone / apapun yang mempunyai device_id(IMEI)
// $query .= " LEFT JOIN " . self::T_TRACKS . " AS tr ON (tr.crt = tr1.max_crt)";
// get last updated tracking from updated table realtime
// $query .= " LEFT JOIN db_trucking.t_gps_tracks_rltm AS tr ON tr.vhc_id = v.id";
$query .= " LEFT JOIN t_gps_tracks_rltm AS tr ON tr.vhc_id = v.id";
// $query .= " LEFT JOIN " . self::T_TRACKS_ADDR . " AS tr_addr ON tr.id = tr_addr.master_id";
//FRO
$query .=
" LEFT JOIN " .
self::T_TRACKS_ADDR .
" AS tr_addr ON tr.latitude = tr_addr.lat and tr.longitude = tr_addr.lng";
if (isset($filter["active_rates"])) {
// $query .= " INNER JOIN t_conf_rates as rate ON v.type_id = rate.vhc_type";
$query .= " INNER JOIN t_conf_rates as rate ON v.vendor_id = rate.vdr_id";
}
if (isset($filter["get_order_data"])) {
// the old way => only 1 order 1 vehicle
$query .= " LEFT JOIN t_orders as ord ON v.ord_id = ord.id";
$query .= " LEFT JOIN t_orders_pickups as ord_pck ON v.ord_id = ord_pck.ord_id";
$query .= " LEFT JOIN t_orders_drops as ord_drop ON v.ord_id = ord_drop.ord_id";
$query .= " LEFT JOIN t_orders_drivers as ord_drv ON v.ord_id = ord_drv.ord_id";
$query .= " LEFT JOIN t_orders_clients as ord_c ON v.ord_id = ord_c.ord_id";
// the new way => can handle 2 order in 1 vehicle
// $query .= " LEFT JOIN t_orders_vehicles as ord_vhc ON v.id = ord_vhc.vhc_id";
// $query .= " LEFT JOIN t_orders as ord ON ord_vhc.ord_id = ord.id";
// $query .= " LEFT JOIN t_orders_pickups as ord_pck ON ord_vhc.ord_id = ord_pck.ord_id";
// $query .= " LEFT JOIN t_orders_drops as ord_drop ON ord_vhc.ord_id = ord_drop.ord_id";
// $query .= " LEFT JOIN t_orders_drivers as ord_drv ON ord_vhc.ord_id = ord_drv.ord_id";
// $query .= " LEFT JOIN t_orders_clients as ord_c ON ord_vhc.ord_id = ord_c.ord_id";
}
$query .= " WHERE v.dlt is null";
// $query .= " AND tr.action IN ('location','alarm')"; // kalo gamau ngambil data heartbeat(idling)
// $query .= " AND tr.device_id = v.device_id"; // cara lama berlaku utk gps tracker saja
// $query .= " AND tr.vhc_id = v.id"; // support gps tracker dan smartphone / apapun yang mempunyai device_id(IMEI) // bikin lemot
$query .= " AND tr.latitude != 0 AND tr.latitude is not null";
if (isset($filter["status"])) {
$query .= " AND v.status = ?";
@ -184,11 +148,6 @@ class Tracks_copy extends Model
$params[] = $filter["own_by_vdr_id"];
}
if (isset($filter["active_rates"])) {
// v1
// $query .= " AND rate.vdr_id != 0 AND rate.dest_city != 0 AND rate.dest_district != 0";
// $query .= " AND rate.origin_prov = ? AND (rate.dest_city = ? OR rate.dest_district = ?) AND rate.sell_kg = ? AND rate.sell_cbm = ? AND rate.long_time = ?";
// array_push($params, $filter['active_rates']->origin_prov, $filter['active_rates']->dest_city, $filter['active_rates']->dest_district, $filter['active_rates']->sell_kg, $filter['active_rates']->sell_cbm, $filter['active_rates']->long_time);
// v2
$query .=
" AND rate.vdr_id != 0 AND rate.dest_city != 0 AND rate.is_active = " . ConfRates::IS_ACTIVE;
$query .=
@ -211,21 +170,16 @@ class Tracks_copy extends Model
$query .= " AND ord_c.c_id = ?";
$params[] = $filter["client_id"];
}
// $query .= " AND ord.status IN (22,4)";
}
if (isset($filter["company"])) {
$query .= " AND client.id = ?";
$params[] = $filter["company"];
}
// $query .= " AND v.id = 70";
$query .= " GROUP BY v.id";
$query .= " ORDER BY tr.crt_d DESC";
$query .= " LIMIT 500;";
// dd($query);
$list = DB::select($query, $params);
foreach ($list as $_list) {
$_query =
@ -301,7 +255,6 @@ class Tracks_copy extends Model
$_query = DB::select($_query, [$_list->vid]);
$_list->lst_heartbeat = count($_query) == 0 ? "" : $_query[0]->lst_heartbeat;
}
// em
return $list;
}

View File

@ -1,5 +1,5 @@
<?php
set_time_limit(120);
set_time_limit(300);
/**
* Laravel - A PHP Framework For Web Artisans
*

View File

@ -7,9 +7,8 @@
@section('customcss')
<style>
/* .select2-container {
z-index: 99999;
} */
z-index: 99999;
} */
</style>
@endsection
@ -39,13 +38,11 @@
<h6>User Infomation</h6>
<div class="mb-3">
<label for="updt-first_name" class="form-label">Name</label>
<input type="text" class="form-control form-control-sm" name="updt-first_name"
id="updt-first_name">
<input type="text" class="form-control form-control-sm" name="updt-first_name" id="updt-first_name">
</div>
<div class="mb-3">
<label for="updt-phone" class="form-label">Phone</label>
<input type="number" class="form-control form-control-sm" name="updt-phone" id="updt-phone"
placeholder="without zero">
<input type="number" class="form-control form-control-sm" name="updt-phone" id="updt-phone" placeholder="without zero">
</div>
<div class="mb-3">
<label for="updt-email" class="form-label">Email</label>
@ -53,8 +50,7 @@
</div>
<div class="mb-3">
<label for="updt-fulladdress" class="form-label">Address</label>
<textarea name="updt-fulladdress" id="updt-fulladdress"
class="form-control form-control-sm" rows="3"></textarea>
<textarea name="updt-fulladdress" id="updt-fulladdress" class="form-control form-control-sm" rows="3"></textarea>
</div>
</div>
<div class="col-sm-6">
@ -70,15 +66,13 @@
<div class="col">
<div class="mb-3">
<label for="updt-password" class="form-label">Password</label>
<input type="password" class="form-control form-control-sm" name="updt-password"
id="updt-password">
<input type="password" class="form-control form-control-sm" name="updt-password" id="updt-password">
</div>
</div>
<div class="col">
<div class="mb-3">
<label for="updt-conf_password" class="form-label">Password Confirmation</label>
<input type="password" class="form-control form-control-sm" name="updt-conf_password"
id="updt-conf_password">
<input type="password" class="form-control form-control-sm" name="updt-conf_password" id="updt-conf_password">
</div>
</div>
</div>
@ -252,7 +246,7 @@
}
$('#btnSubmitUpdtUser').attr('disabed', true);
$.ajax({
url: "{{ route('api_edit_user', '') }}/" + data.uid,
url: "{{ route('api_edit_user_profile', '') }}/" + data.uid,
method: 'PUT',
crossDomain: true,
processData: true,
@ -291,7 +285,7 @@
})
});
},
removeReadOnly: function () {
removeReadOnly: function() {
$('#updt-first_name').removeAttr('readonly');
$('#updt-fulladdress').removeAttr('readonly');
$('#updt-phone').removeAttr('readonly');
@ -302,7 +296,7 @@
});
$('#btnSubmitUpdtUser').removeClass('d-none');
},
addReadOnly: function () {
addReadOnly: function() {
$('#updt-first_name').attr('readonly', true);
$('#updt-fulladdress').attr('readonly', true);
$('#updt-phone').attr('readonly', true);

View File

@ -434,6 +434,11 @@
<span id="c_vhc_zone">-</span>
</div>
<div class="col-auto text-start align-items-center d-flex">
<a href="javascript:void(0);" class="mb-0 text-bold text-dark me-2" id="filterVhcMarker" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Marker Info">
<span class="ion-android-pin me-2 text-muted" style="font-size: 17px"></span>
</a>
</div>
{{-- <div class="col-auto text-start align-items-center d-flex">
<a href="javascript:void(0);" class="mb-0 text-bold text-dark" id="filterVhcGps" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Vehicle GPS Filter">
<span class="ion-pinpoint me-1 text-muted" style="font-size: 17px"></span>
</a>
@ -444,15 +449,15 @@
<span class="ion-android-wifi me-1 text-muted" style="font-size: 17px"></span>
</a>
<span id="c_vhc_gsm">-</span>
</div>
</div> --}}
</div>
</div>
<div class="col-auto">
<div class="">
<div class="col text-end align-items-center d-flex">
<a href="javascript:void(0);" class="mb-0 text-bold text-dark me-2" id="filterVhcMarker" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Marker Info">
{{-- <a href="javascript:void(0);" class="mb-0 text-bold text-dark me-2" id="filterVhcMarker" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Marker Info">
<span class="ion-android-pin me-2 text-muted" style="font-size: 17px"></span>
</a>
</a> --}}
<a href="javascript:void(0);" class="text-decoration-none text-dark fz-18" id="closeRightSideBar1">
<span class="icon ion-ios-arrow-right"></span>
</a>
@ -2033,7 +2038,7 @@
},
error: (jqXHR, textStatus, error) => {
if (jqXHR.status >= 500) {
Helper.toast('Error', 'just now', 'Cannot get lists trucks');
Helper.toast('Error', 'just now', 'Cannot get lists vehicles');
} else {
Helper.toast('Error', 'just now', jqXHR.responseJSON.meta
.message);

View File

@ -21,13 +21,6 @@
</a>
</li>
@endcan
@can('transaction.view')
<li class="nav-item {{ Request::path() == 'user/vendor/transactions' || Request::path() == 'transactions/add/special' ? 'active' : '' }}">
<a class="nav-link d-flex align-items-center text-capitalize" aria-current="page" href="{{ url('user/vendor/transactions') }}">
Transaction
</a>
</li>
@endcan
@can('zone.view')
<li class="nav-item {{ Request::segment(1) == 'zone' ? 'active' : '' }}">
<a class="nav-link d-flex align-items-center text-capitalize" aria-current="page" href="{{ route('view_zone') }}">

View File

@ -252,6 +252,9 @@ Route::middleware(["auth", "auth.user"])->group(function () {
Route::get("/api/users/{uid}", "UsersController@api_show_user")->name("api_show_user");
Route::post("/api/users", "UsersController@api_add_user")->name("api_add_user");
Route::put("/api/users/{uid}", "UsersController@api_edit_user")->name("api_edit_user");
Route::put("/api/users/profile/{uid}", "UsersController@api_edit_user_profile")->name(
"api_edit_user_profile"
);
Route::delete("/api/users/{uid}", "UsersController@api_del_user")->name("api_del_user");
Route::post("/api/users/search/name", "UsersController@api_search_user_name")->name(
"api_search_user_name"