Files
gps-frontend/app/Http/Controllers/TrackController.php
meusinfirmary 77bc5f10a6 update
2025-05-29 13:21:59 +07:00

252 lines
9.1 KiB
PHP
Executable File

<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Validator;
use App\Responses;
use App\Helper;
use App\Models\Tracks;
use App\Models\Vehicles;
use App\Models\Zone;
use App\Models\Users;
use App\Models\Orders;
class TrackController extends Controller
{
public function api_list_currect_track_vhc(Request $req)
{
try {
$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) {
if ($req->auth->vhcs) {
$filter["vids"] = explode(",", $req->auth->vhcs);
} else {
$filter["vid"] = 0;
}
} elseif ($req->auth->is_tracking === Users::IS_TRACK_VHC_DEFAULT) {
if ($req->auth->role === Users::ROLE_ADMIN) {
if ($req->ord_id) {
$ord = Orders::showOrder(["id" => $req->ord_id]);
if (count($ord) > 0) {
$filter["vid"] = $ord[0]->vhc_id;
} else {
$filter["vid"] = 0;
}
} elseif ($req->ord_code) {
$ord = Orders::showOrder(["code" => $req->ord_code]);
if (count($ord) > 0) {
$filter["vid"] = $ord[0]->vhc_id;
} else {
$filter["vid"] = 0;
}
}
} elseif ($req->auth->role === Users::ROLE_VENDOR) {
$filter["own_by_vdr_id"] = $req->auth->uid;
} elseif ($req->auth->role === Users::ROLE_CLIENT_ADMIN) {
$ords = Orders::listOrders([
"client_id_active_orders" => $req->auth->uid,
"is_accident" => Orders::IS_ACCIDENT_NO,
]);
$filter["vids"] = [];
$filter["client_id"] = $req->auth->uid;
foreach ($ords as $k => $v) {
$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;
}
} else {
$filter["vid"] = 0;
}
$list = Tracks::listCurrentTracks($filter);
// 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 = "-";
$list[$key]->cameras = "-";
$insideZones = [];
$insideZoneCircle = Zone::insideZoneCircle($row->lst_lat, $row->lst_lng);
if (count($insideZoneCircle) > 0) {
array_push($insideZones, ...$insideZoneCircle);
}
$insideZoneShape = Zone::insideZoneShape($row->lst_lat, $row->lst_lng);
if (count($insideZoneShape) > 0) {
array_push($insideZones, ...$insideZoneShape);
}
if (count($insideZones) > 0) {
$list[$key]->inside_zones = $insideZones;
} else {
$list[$key]->inside_zones = null;
}
}
$apiResp = Responses::success("success list vehicles");
$apiResp["data"] = $list;
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_last_move_track_vhc(Request $req)
{
try {
$now = time();
$input = [
"vid" => $req->vid,
"end_at" => $req->end_at,
];
$rulesInput = [
"vid" => "required|integer",
"end_at" => "nullable|date",
];
// 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 = [
"limit" => 500,
];
// default 500, jika ada filter date maka max 5K
if (
$req->start_date != null &&
$req->start_date != "" &&
($req->end_date != null && $req->end_date != "")
) {
$filter["start_date"] = $req->start_date;
$filter["end_date"] = $req->end_date;
$filter["limit"] = 5000;
}
$list = Tracks::lastMoveTracks($req->vid, $filter);
$apiResp = Responses::success("success get last movements");
$apiResp["data"] = $list;
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_conf_list_logs_gps(Request $req)
{
try {
$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 = [
"limit" => 1000,
"crt_greater_than" => 1646122574,
];
$list = Tracks::listLogsGps($filter);
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
$list[$key]->action = "-";
}
$apiResp = Responses::success("success list gps tracker");
$apiResp["count"] = count($list);
$apiResp["data"] = $list;
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_track_order(Request $req)
{
try {
$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']);
// }
$ord = [];
$filter = [
"get_pic_zone" => 1,
"get_zone_data" => 1,
];
if ($req->ord_id) {
$filter["id"] = $req->ord_id;
} elseif ($req->ord_code) {
$filter["code"] = $req->ord_code;
}
$ord = Orders::showOrder($filter);
if (count($ord) < 1) {
$apiResp = Responses::not_found("order not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$vid = $ord[0]->vhc_id;
$history = Tracks::lastMoveTracks($vid, [
"start_at" => $ord[0]->confirm_at,
]);
$apiResp = Responses::success("success track order");
$apiResp["data"] = [
"order" => $ord[0],
"history" => $history,
];
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
}