Files
gps-frontend/app/Http/Controllers/VehiclesController.php
Pringgosutono fbbcf86509 user logs
2025-10-16 11:59:06 +07:00

758 lines
31 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 Auth;
use App\Responses;
use App\Helper;
use App\Models\Vehicles;
use App\Models\Devices;
use App\Models\VehiclesDetail;
use App\Models\Users;
use App\Models\UserLogs;
class VehiclesController extends Controller
{
public function api_list_vehicles(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 = [];
if ($req->cptid) {
$filter["company"] = $req->cptid;
}
$list = Vehicles::listVehicles($req->auth, $filter);
foreach ($list as $key => $row) {
$list[$key]->DT_RowIndex = $key + 1;
// $list[$key]->mileage_km = '-';
// $list[$key]->div_name = 'All Division';
// $list[$key]->group_name = 'All Group';
// $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 = '-';
$list[$key]->action = "-";
}
$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_show_vehicle(Request $req, $vid)
{
try {
$now = time();
$input = [
"vid" => $vid,
];
$rulesInput = [
"vid" => "required|integer|not_in:0",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$vehicle = Vehicles::showVehicleById($vid);
if (count($vehicle) < 1) {
$apiResp = Responses::not_found("vehicle not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$apiResp = Responses::success("success get detail vehicle");
$apiResp["data"] = $vehicle[0];
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_add_vehicle(Request $req)
{
$url_fvhc = "";
$url_stnk = "";
if ($req->hasFile("fvhc_file")) {
$fileFvhc = $req->file("fvhc_file");
$fvhcContent = file_get_contents($fileFvhc->getRealPath());
$req->fvhc_base64 = base64_encode($fvhcContent);
} else {
$req->fvhc_base64 = null;
}
// Ambil file stnk_file dan ubah ke base64
if ($req->hasFile("stnk_file")) {
$fileStnk = $req->file("stnk_file");
$stnkContent = file_get_contents($fileStnk->getRealPath());
$req->stnk_base64 = base64_encode($stnkContent);
} else {
$req->stnk_base64 = null;
}
$req->dvc_id = $req->dvc_id === "undefined" ? null : $req->dvc_id;
try {
$now = time();
$device_id = str_pad($req->device_id, Vehicles::MAX_DEVICE_ID, "0", STR_PAD_LEFT);
$input = [
"front_vehicle_photo" => $req->fvhc_base64,
"dvc_id" => $req->dvc_id,
"simcard" => $req->simcard,
"device_id" => $req->device_id,
"vehicle_name" => $req->vhc_name,
"brand_id" => $req->brand_id,
"type_id" => $req->type_id,
"model_id" => $req->model_id,
"speed_limit" => $req->speed_limit,
"fuel_capacity" => $req->fuel_capacity,
"fuel_drop_treshold" => $req->fuel_drop_treshold,
"max_pressure" => $req->max_pressure,
"current_driver" => $req->d_current,
"assign_driver" => $req->d_assign,
"stnk_photo" => $req->stnk_base64,
"stnk_exp" => $req->stnk_exp,
"nopol1" => $req->nopol1,
// "nopol2" => $req->nopol2,
// "nopol3" => $req->nopol3,
"manufacture_year" => $req->stnk_vyear,
"cylinder_capacity" => $req->cc,
"vehicle_identity_number" => $req->vin,
"engine_number" => $req->en,
"vehicle_color" => $req->color,
"fuel_type" => $req->fuel_type,
"license_plat_color" => $req->tnkb_color,
"regis_year" => $req->regis_year,
"tax_exp" => $req->tax_exp,
// "kir_exp" => $req->kir_exp,
// "vendor_id" => $req->vendor_id,
"dc_code" => $req->dc_code,
"pool_code" => $req->pool_code,
];
$rulesInput = [
"front_vehicle_photo" => "required|string",
"dvc_id" => "nullable|integer",
"simcard" => "nullable|numeric",
"device_id" => "nullable|numeric",
"vehicle_name" => "required|string",
"brand_id" => "required|integer",
"type_id" => "required|integer",
"model_id" => "nullable|integer",
"speed_limit" => "required|numeric",
// "fuel_capacity" => "required|numeric",
// "fuel_drop_treshold" => "required|numeric",
// "max_pressure" => "required|numeric",
"current_driver" => "nullable|integer",
"assign_driver" => "nullable|integer",
"stnk_photo" => "required|string",
"stnk_exp" => "required|date_format:Y-m-d",
"nopol1" => "required|string",
// "nopol2" => "required|string|max:4",
// "nopol3" => "required|string|max:3",
"manufacture_year" => "required|digits:4",
"cylinder_capacity" => "required|integer",
"vehicle_identity_number" => "required|string",
"engine_number" => "required|string",
"vehicle_color" => "required|string|min:3|max:25",
"fuel_type" => "required|string|min:3|max:25",
"license_plat_color" => "required|string|min:3|max:25",
"regis_year" => "required|digits:4",
"tax_exp" => "required|date_format:Y-m-d",
// "kir_exp" => "required|date_format:Y-m-d",
// "vendor_id" => "nullable|integer|not_in:0",
"dc_code" => "nullable|string",
"pool_code" => "nullable|string",
];
if ($req->auth->role == Users::ROLE_VENDOR) {
$rulesInput["simcard"] = "nullable";
}
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if (strlen($req->device_id) > Vehicles::MAX_DEVICE_ID) {
$apiResp = Responses::bad_input("device_id max length is " . Vehicles::MAX_DEVICE_ID);
return new Response($apiResp, $apiResp["meta"]["code"]);
}
// if ($device_id !== str_pad(0, Vehicles::MAX_DEVICE_ID, "0", STR_PAD_LEFT)) {
// $uniqDeviceId = Vehicles::getVehicleByDeviceId($device_id);
// if (count($uniqDeviceId) > 0) {
// $apiResp = Responses::bad_request("device id has been used");
// return new Response($apiResp, $apiResp["meta"]["code"]);
// }
// }
// $uniqSimcard = Vehicles::getVehicleBySimcard($req->simcard);
// if (count($uniqSimcard) > 0) {
// $apiResp = Responses::bad_request("simcard has been used");
// return new Response($apiResp, $apiResp["meta"]["code"]);
// }
$uniqPlatNo = Vehicles::getVehicleByPlatNo($req->nopol1, $req->nopol2, $req->nopol3);
if (count($uniqPlatNo) > 0) {
$apiResp = Responses::bad_request("Vehicle identity number has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
DB::beginTransaction();
$insVhc = [
"name" => $req->vhc_name,
"dvc_id" => $req->dvc_id ?? 0,
"device_id" => $device_id,
"simcard" => $req->simcard ?? 0,
"cat_id" => Vehicles::DEFAULT_CAT_ID,
"brand_id" => $req->brand_id,
"type_id" => $req->type_id,
"nopol1" => strtoupper($req->nopol1),
// "nopol2" => strtoupper($req->nopol2),
// "nopol3" => strtoupper($req->nopol3),
"sum_milleage" => $req->mileage ?? 0,
"c_did" => $req->d_current ?? 0,
"a_did" => $req->d_assign ?? 0,
"is_track_holiday" => Vehicles::DEFAULT_TRACK_HOLIDAY,
"track_sch_d" => Vehicles::DEFAULT_TRACK_SCH_D,
"track_sch_h" => Vehicles::DEFAULT_TRACK_SCH_H,
// "client_group_id" => $req->auth->client_group_id ?? 1,
// "vendor_id" => $req->auth->client_group_id ?? 1,
"client_group_id" => 1,
"vendor_id" => 1,
"crt" => $now,
"crt_by" => $req->auth->uid,
"updt" => $now,
"updt_by" => $req->auth->uid,
];
// dd($insVhc);
if ($req->model_id) {
$insVhc["model_id"] = $req->model_id;
}
if ($req->auth->role == Users::ROLE_VENDOR) {
// $insVhc["vendor_id"] = $req->auth->uid;
$insVhc["vendor_id"] = 1;
$insVhc["simcard"] = 0;
} else {
// $insVhc["vendor_id"] = $req->vendor_id ?? 1;
$insVhc["vendor_id"] = 1;
}
$vid = Vehicles::addVehicle($insVhc);
if ($req->auth->role == Users::ROLE_VENDOR) {
$getUsrId = DB::table("t_users")
->where("id", Auth::user()->id)
->first();
$vhclid = DB::table("t_vehicles")->insertGetId($insVhc);
$new = $getUsrId->vhcs . "," . $vhclid;
$dtupdate = [
"vhcs" => $new,
];
DB::table("t_users")
->where("id", Auth::user()->id)
->update($dtupdate);
$dtUpdataIsTracking = [
"is_tracking" => 1,
];
DB::table("t_users")
->where("id", Auth::user()->id)
->update($dtUpdataIsTracking);
}
$url_fvhc = "vehicles/$vid/front_$now.jpeg";
if (!Storage::disk("public")->put($url_fvhc, base64_decode($req->fvhc_base64))) {
DB::rollBack();
$apiResp = Responses::bad_request("fail upload front photo");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$url_stnk = "vehicles/$vid/stnk_$now.jpeg";
if (!Storage::disk("public")->put($url_stnk, base64_decode($req->stnk_base64))) {
Storage::disk("public")->delete($url_fvhc);
DB::rollBack();
$apiResp = Responses::bad_request("fail upload front photo");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$insDetail = [
"vid" => $vid,
"speed_limit" => $req->speed_limit,
"fuel_capacity" => $req->fuel_capacity,
"fuel_drop_treshold" => $req->fuel_drop_treshold,
"max_pressure" => $req->max_pressure,
"fvhc_img" => $url_fvhc,
"stnk_img" => $url_stnk,
"stnk_exp" => $req->stnk_exp,
"vyear" => $req->stnk_vyear, // manufacture_year
"cc" => $req->cc, // cylinder_capacity
"vin" => strtoupper($req->vin), // vehicle_identity_number
"en" => strtoupper($req->en), // engine_number
"vcolor" => strtoupper($req->color),
"fuel_type" => strtoupper($req->fuel_type),
"tnkb_color" => strtoupper($req->tnkb_color), // license_plat_color
"regis_year" => $req->regis_year,
"tax_exp" => $req->tax_exp,
"kir_exp" => $req->kir_exp,
"dc_code" => $req->dc_code,
"pool_code" => $req->pool_code,
];
VehiclesDetail::addDetail($insDetail);
$apiResp = Responses::created("success add new vehicle");
DB::commit();
UserLogs::insert(Auth::user()->id, "Add new vehicle : ".$req->vhc_name);
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
Storage::disk("public")->delete($url_fvhc);
Storage::disk("public")->delete($url_stnk);
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_edit_vehicle(Request $req, $vid)
{
$url_fvhc = "";
$url_stnk = "";
try {
$now = time();
$device_id = str_pad($req->device_id, Vehicles::MAX_DEVICE_ID, "0", STR_PAD_LEFT);
$input = [
"vid" => 1,
"front_vehicle_photo" => $req->fvhc_base64,
"dvc_id" => $req->dvc_id ?? 0,
"simcard" => $req->simcard,
"device_id" => $req->device_id,
"vehicle_name" => $req->vhc_name,
"brand_id" => $req->brand_id,
"type_id" => $req->type_id,
"model_id" => $req->model_id,
"speed_limit" => $req->speed_limit,
"sum_milleage" => $req->mileage,
"fuel_capacity" => $req->fuel_capacity,
"fuel_drop_treshold" => $req->fuel_drop_treshold,
"max_pressure" => $req->max_pressure,
"current_driver" => $req->d_current,
"assign_driver" => $req->d_assign,
"stnk_photo" => $req->stnk_base64,
"stnk_exp" => $req->stnk_exp,
"nopol1" => $req->nopol1,
// "nopol2" => $req->nopol2,
// "nopol3" => $req->nopol3,
"manufacture_year" => $req->stnk_vyear,
"cylinder_capacity" => $req->cc,
"vehicle_identity_number" => $req->vin,
"engine_number" => $req->en,
"vehicle_color" => $req->color,
"fuel_type" => $req->fuel_type,
"license_plat_color" => $req->tnkb_color,
"regis_year" => $req->regis_year,
"tax_exp" => $req->tax_exp,
// "kir_exp" => $req->kir_exp,
// "vendor_id" => $req->vendor_id,
"dc_code" => $req->dc_code,
"pool_code" => $req->pool_code,
];
$rulesInput = [
"vid" => "required|integer|not_in:0",
"front_vehicle_photo" => "nullable|string",
// "dvc_id" => "nullable|integer",
"simcard" => "nullable|numeric",
"device_id" => "nullable|numeric",
"vehicle_name" => "required|string",
"brand_id" => "required|integer",
"type_id" => "required|integer",
"model_id" => "nullable|integer",
"speed_limit" => "required|numeric",
"sum_milleage" => "required|numeric",
// "fuel_capacity" => "required|numeric",
// "fuel_drop_treshold" => "required|numeric",
// "max_pressure" => "required|numeric",
"current_driver" => "nullable|integer",
"assign_driver" => "nullable|integer",
"stnk_photo" => "nullable|string",
"stnk_exp" => "required|date_format:Y-m-d",
"nopol1" => "required|string",
// "nopol2" => "required|string|max:4",
// "nopol3" => "required|string|max:3",
"manufacture_year" => "required|digits:4",
"cylinder_capacity" => "required|integer",
"vehicle_identity_number" => "required|string",
"engine_number" => "required|string",
"vehicle_color" => "required|string|min:3|max:25",
"fuel_type" => "required|string|min:3|max:25",
"license_plat_color" => "required|string|min:3|max:25",
"regis_year" => "required|digits:4",
"tax_exp" => "required|date_format:Y-m-d",
// "kir_exp" => "required|date_format:Y-m-d",
// "vendor_id" => "nullable|integer|not_in:0",
"dc_code" => "nullable|string",
"pool_code" => "nullable|string",
];
if ($req->auth->role == Users::ROLE_VENDOR) {
$rulesInput["simcard"] = "nullable";
}
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if (strlen($req->device_id) > Vehicles::MAX_DEVICE_ID) {
$apiResp = Responses::bad_input("device id max length is " . Vehicles::MAX_DEVICE_ID);
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$vhc = Vehicles::getVehicleById($vid);
if (count($vhc) < 1) {
$apiResp = Responses::bad_request("vehicle not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$vd = VehiclesDetail::getDetailByVid($vid);
if (count($vd) < 1) {
$apiResp = Responses::bad_request("vehicle not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
// if ($req->dvc_id) {
// $uniqDeviceId = Vehicles::getVehicleByDeviceId($device_id);
// if (count($uniqDeviceId) > 0) {
// $notSameUser = 1;
// foreach ($uniqDeviceId as $key => $row) {
// if ($row->id == $vid) {
// $notSameUser = 0;
// }
// }
// if ($notSameUser) {
// $apiResp = Responses::bad_request("device id has been used");
// return new Response($apiResp, $apiResp["meta"]["code"]);
// }
// }
// }
$uniqSimcard = Vehicles::getVehicleBySimcard($req->simcard);
if (count($uniqSimcard) > 0) {
$notSameUser = 1;
foreach ($uniqSimcard as $key => $row) {
if ($row->id == $vid) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request("simcard has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
$uniqPlatNo = Vehicles::getVehicleByPlatNo($req->nopol1, $req->nopol2, $req->nopol3);
if (count($uniqPlatNo) > 0) {
$notSameUser = 1;
foreach ($uniqPlatNo as $key => $row) {
if ($row->id == $vid) {
$notSameUser = 0;
}
}
if ($notSameUser) {
$apiResp = Responses::bad_request("plat number has been used");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
DB::beginTransaction();
$updtVhc = [
"name" => $req->vhc_name,
"dvc_id" => $req->dvc_id,
"device_id" => $device_id,
"simcard" => (int) $req->simcard,
"cat_id" => Vehicles::DEFAULT_CAT_ID,
"brand_id" => $req->brand_id,
"type_id" => $req->type_id,
"nopol1" => strtoupper($req->nopol1),
"nopol2" => strtoupper($req->nopol2),
"nopol3" => strtoupper($req->nopol3),
"c_did" => $req->d_current ?? 0,
"a_did" => $req->d_assign ?? 0,
"sum_milleage" => $req->mileage ?? 0,
"is_track_holiday" => Vehicles::DEFAULT_TRACK_HOLIDAY,
"track_sch_d" => Vehicles::DEFAULT_TRACK_SCH_D,
"track_sch_h" => Vehicles::DEFAULT_TRACK_SCH_H,
"vendor_id" => 1,
"updt" => $now,
"updt_by" => $req->auth->uid,
];
if ($req->model_id) {
$updtVhc["model_id"] = $req->model_id;
}
if ($req->auth->role == Users::ROLE_VENDOR) {
$updtVhc["vendor_id"] = $req->auth->uid;
// $updtVhc["simcard"] = (int) $uniqDeviceId[0]->simcard;
} else {
$updtVhc["vendor_id"] = $req->vendor_id ?? 1;
}
Vehicles::updateVehicle($vid, $updtVhc);
if ($req->dvc_id) {
Devices::updateDevice($req->dvc_id, [
"is_assigned" => Devices::IS_ASSIGNED,
]);
} else {
Devices::updateDevice($vhc[0]->dvc_id, [
"is_assigned" => Devices::IS_UNASSIGNED,
]);
}
if ($req->fvhc_base64) {
$url_fvhc = "vehicles/$vid/front_$now.jpeg";
if (!Storage::disk("public")->put($url_fvhc, base64_decode($req->fvhc_base64))) {
DB::rollBack();
$apiResp = Responses::bad_request("fail upload front photo");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
Storage::disk("public")->delete($vd[0]->fvhc_img);
}
if ($req->stnk_base64) {
$url_stnk = "vehicles/$vid/stnk_$now.jpeg";
if (!Storage::disk("public")->put($url_stnk, base64_decode($req->stnk_base64))) {
Storage::disk("public")->delete($url_fvhc);
DB::rollBack();
$apiResp = Responses::bad_request("fail upload front photo");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
Storage::disk("public")->delete($vd[0]->stnk_img);
}
$updtDetail = [
"vid" => $vid,
"speed_limit" => $req->speed_limit,
"fuel_capacity" => $req->fuel_capacity,
"fuel_drop_treshold" => $req->fuel_drop_treshold,
"max_pressure" => $req->max_pressure,
"stnk_exp" => $req->stnk_exp,
"vyear" => $req->stnk_vyear, // manufacture_year
"cc" => $req->cc, // cylinder_capacity
"vin" => strtoupper($req->vin), // vehicle_identity_number
"en" => strtoupper($req->en), // engine_number
"vcolor" => strtoupper($req->color),
"fuel_type" => strtoupper($req->fuel_type),
"tnkb_color" => strtoupper($req->tnkb_color), // license_plat_color
"regis_year" => $req->regis_year,
"tax_exp" => $req->tax_exp,
"kir_exp" => $req->kir_exp,
"dc_code" => $req->dc_code,
"pool_code" => $req->pool_code,
];
if ($req->fvhc_base64) {
$updtDetail["fvhc_img"] = $url_fvhc;
}
if ($req->stnk_base64) {
$updtDetail["stnk_img"] = $url_stnk;
}
VehiclesDetail::updateDetailByVid($vid, $updtDetail);
DB::commit();
$apiResp = Responses::success("success update vehicle");
UserLogs::insert(Auth::user()->id, "Edit vehicle : ".$req->vhc_name);
return new Response($apiResp, $apiResp["meta"]["code"]);
} catch (\Exception $e) {
Storage::disk("public")->delete($url_fvhc);
Storage::disk("public")->delete($url_stnk);
DB::rollBack();
$apiResp = Responses::error($e->getMessage());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
}
public function api_del_vehicle(Request $req, $vid)
{
try {
$now = time();
$input = [
"vid" => $vid,
];
$rulesInput = [
"vid" => "required|integer|not_in:0",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$vehicle = Vehicles::showVehicleById($vid);
if (count($vehicle) < 1) {
$apiResp = Responses::not_found("vehicle not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
DB::beginTransaction();
$device_id = str_pad(0, Devices::MAX_DEVICE_ID, "0", STR_PAD_LEFT);
Vehicles::updateVehicle($vid, [
"dvc_id" => 0,
"device_id" => $device_id,
"simcard" => 0,
"dlt" => $now,
"dlt_by" => $req->auth->uid,
]);
if ($vehicle[0]->dvc_id != 0) {
Devices::updateDevice($vehicle[0]->dvc_id, [
"is_assigned" => Devices::IS_UNASSIGNED,
]);
}
// Storage::disk('public')->delete($vehicle[0]->fvhc_img);
// Storage::disk('public')->delete($vehicle[0]->stnk_img);
DB::commit();
$apiResp = Responses::success("success delete vehicle");
UserLogs::insert(Auth::user()->id, "Delete vehicle : ".$vehicle[0]->name);
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_search_device_id(Request $req)
{
try {
$now = time();
$input = [
"device_id" => $req->device_id,
];
$rulesInput = [
"device_id" => "required|numeric",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
if (strlen($req->device_id) > Vehicles::MAX_DEVICE_ID) {
$apiResp = Responses::bad_input("device id max length is " . Vehicles::MAX_DEVICE_ID);
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$device_id = str_pad($req->device_id, Vehicles::MAX_DEVICE_ID, "0", STR_PAD_LEFT);
$devices = Vehicles::getVehicleByDeviceId($device_id);
if (count($devices) < 1) {
$apiResp = Responses::not_found("device id not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$apiResp = Responses::success("success search device id");
$apiResp["data"] = $devices;
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_search_nopol(Request $req)
{
try {
$now = time();
$input = [
"nopol" => $req->nopol,
];
$rulesInput = [
"nopol" => "required|string",
];
// validasi input
$isValidInput = Validator::make($input, $rulesInput);
if (!$isValidInput->passes()) {
$apiResp = Responses::bad_input($isValidInput->messages()->first());
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$nopol = explode(" ", strtoupper($req->nopol));
$cNopol = count($nopol);
if ($cNopol === 3) {
} elseif ($cNopol === 2) {
$nopol[2] = "";
} elseif ($cNopol === 1) {
$nopol[1] = "";
$nopol[2] = "";
} else {
$apiResp = Responses::bad_input("Nomor polisi kendaraan tidak valid");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$vehicles = Vehicles::searchVehicleByPlatNo($nopol[0], $nopol[1], $nopol[2]);
if (count($vehicles) < 1) {
$apiResp = Responses::not_found("vehicles not found");
return new Response($apiResp, $apiResp["meta"]["code"]);
}
$apiResp = Responses::success("success search vehicles");
$apiResp["data"] = $vehicles;
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"]);
}
}
}