Merge branch 'feature/AddColumnToRoadPatrol' into 'develop'

add activity for azmayesh

See merge request witelgroup/rms_v2!54
This commit is contained in:
2025-01-04 12:03:33 +00:00
13 changed files with 228 additions and 34 deletions

View File

@@ -84,6 +84,8 @@ class AzmayeshController extends Controller
'contract_subitem_id' => $request->contract_subitem_id
]);
$user->addActivityComplete(1158);
return $this->successResponse();
}
@@ -122,6 +124,8 @@ class AzmayeshController extends Controller
'contract_subitem_id' => $request->contract_subitem_id
]);
auth()->user()->addActivityComplete(1159);
return $this->successResponse();
}
@@ -133,6 +137,8 @@ class AzmayeshController extends Controller
try {
$azmayesh->delete();
auth()->user()->addActivityComplete(1160);
return $this->successResponse();
}
catch (QueryException $exception) {

View File

@@ -67,6 +67,8 @@ class AzmayeshTypeController extends Controller
}
$azmayeshType->azmayeshFields()->attach($fieldsID);
auth()->user()->addActivityComplete(1162);
});
return $this->successResponse();
@@ -100,6 +102,8 @@ class AzmayeshTypeController extends Controller
}
$azmayeshType->azmayeshFields()->sync($fieldsID);
auth()->user()->addActivityComplete(1163);
});
return $this->successResponse();
@@ -113,6 +117,8 @@ class AzmayeshTypeController extends Controller
try {
$azmayeshType->delete();
auth()->user()->addActivityComplete(1164);
return $this->successResponse();
}
catch (QueryException $exception) {

View File

@@ -22,7 +22,6 @@ class FMSVehicleManagementController extends Controller
"machineCode" => $request->machineCode,
"startDT" => $request->startDT,
"endDT" => $request->endDT,
"minStopDuration" => $request->minStopDuration
]);
$data = $getVehicleActivityService->run();

View File

@@ -0,0 +1,60 @@
<?php
namespace App\Http\Controllers\V3;
use App\Facades\DataTable\DataTableFacade;
use App\Http\Controllers\Controller;
use App\Http\Requests\V3\ObservedItem\FilterRequest;
use App\Http\Traits\ApiResponse;
use App\Models\ObservedItem;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class ObservedItemController extends Controller
{
use ApiResponse;
public function show(ObservedItem $observedItem): JsonResponse
{
return $this->successResponse($observedItem);
}
public function filter(FilterRequest $request): JsonResponse
{
$columns = array(
'id', 'item_id', 'sub_item_id'
);
$allowedFilters = $columns;
$allowedSortings = $columns;
$data = ObservedItem::query()->whereNull('road_item_id')
->when($request->start_date, function (Builder $query) use ($request) {
return $query->whereHas('roadPatrol', function (Builder $query) use ($request) {
$query->WhereBetween('start_time', [$request->start_date.' 00:00:00', $request->end_date.' 23:59:59'])
->orWhereBetween('end_time', [$request->start_date.' 00:00:00', $request->end_date.' 23:59:59']);
});
})
->when($request->road_patrol_id, function (Builder $query) use ($request) {
return $query->where('road_patrol_id', $request->road_patrol_id);
})
->when($request->item_id, function (Builder $query) use ($request) {
return $query->where('item_id', $request->item_id);
})
->selectRaw('id as item, item_id, item_name, sub_item_id, sub_item_name, local_name');
if($data->get()->isEmpty()) {
return $this->errorResponse('موردی یافت نشد');
}
$dataTable = DataTableFacade::run(
$data,
$request,
allowedFilters: $allowedFilters,
allowedSortings: $allowedSortings);
return response()->json($dataTable);
}
}

View File

@@ -81,7 +81,7 @@ class ProfileController extends Controller
public function addActivity(Request $request): JsonResponse
{
auth()->user()->addActivityComplete($request->query('activityCode'));
auth()->user()->addActivityComplete($request->activityCode);
return $this->successResponse();
}
}

View File

@@ -145,7 +145,7 @@ class RoadPatrolProjectController extends Controller
return response()->json($data);
}
public function store(StoreRequest $request, NominatimService $nominatimService)
public function store(StoreRequest $request, NominatimService $nominatimService): JsonResponse
{
$user = auth()->user();
@@ -161,24 +161,13 @@ class RoadPatrolProjectController extends Controller
], 400);
}
$start_coordinates = explode(',', $request->start_point);
$end_coordinates = explode(',', $request->end_point);
$edare_id = $user->edarate_shahri_id ?? $user->edarate_ostani_id;
$edare_name = $user->edarate_shahri_id ? $user->edarate_shahri_name : $user->edarate_ostani_name;
$road_patrol = DB::transaction(function () use ($request, $start_coordinates,
$end_coordinates, $edare_id,
$road_patrol = DB::transaction(function () use ($request, $edare_id,
$edare_name, $nominatimService, $user) {
$road_patrol = RoadPatrol::query()->create([
'start_lat' => $start_coordinates[0],
'start_lon' => $start_coordinates[1],
'end_lat' => $end_coordinates[0],
'end_lon' => $end_coordinates[1],
'officer_name' => $request->officer_name,
'officer_phone_number' => $request->officer_phone_number,
'officer_plaque' => $request->officer_plaque,
'operator_id' => $user->id,
'operator_name' => $user->name,
'province_id' => $user->province_id,
@@ -187,18 +176,19 @@ class RoadPatrolProjectController extends Controller
'city_fa' => $user->city_fa,
'edare_id' => $edare_id,
'edare_name' => $edare_name,
'start_way_id' => $nominatimService->get_way_id_from_nominatim($start_coordinates[0], $start_coordinates[1]),
'end_way_id' => $nominatimService->get_way_id_from_nominatim($end_coordinates[0], $end_coordinates[1]),
'status' => 0,
'status_fa' => 'در حال بررسی',
'distance' => $request->distance,
'start_time' => $request->start_time,
'end_time' => $request->end_time,
'description' => $request->description ?? null,
'fuel_consumption' => $request->fuel_consumption,
'vehicle_runtime' => $request->vehicle_runtime,
'stop_points' => json_encode($request->stop_points),
]);
$road_patrol->rahdaran()->attach($request->rahdaran_id);
$road_patrol->cmmsMachines()->attach($request->machines_id);
$road_patrol->rahdaran()->attach($request->road_patrol_rahdaran_id);
$road_patrol->cmmsMachines()->attach($request->road_patrol_machines_id);
if ($request->observed_items) {
foreach ($request->observed_items as $index => $item) {
@@ -294,8 +284,8 @@ class RoadPatrolProjectController extends Controller
], 400);
}
$road_item->rahdaran()->attach($request->rahdaran_id);
$road_item->cmmsMachines()->attach($request->machines_id);
$road_item->rahdaran()->attach($item['road_item_rahdaran_id']);
$road_item->cmmsMachines()->attach($item['road_item_machines_id']);
}
}
}

View File

@@ -0,0 +1,39 @@
<?php
namespace App\Http\Requests\V3\ObservedItem;
use Illuminate\Foundation\Http\FormRequest;
class FilterRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
'start_date' => 'date_format:Y-m-d',
'end_date' => 'date_format:Y-m-d|after_or_equal:start_date',
'road_patrol_id' => 'numeric',
'item_id' => 'numeric',
];
}
public function attributes(): array
{
return [
'start_date' => 'ساعت شروع گشت',
'end_date' => 'ساعت پایان گشت',
];
}
}

View File

@@ -2,6 +2,7 @@
namespace App\Http\Requests\V3\RoadPatrolProject;
use App\Rules\VerificationCode;
use Illuminate\Foundation\Http\FormRequest;
class StoreRequest extends FormRequest
@@ -22,14 +23,17 @@ class StoreRequest extends FormRequest
public function rules(): array
{
return [
'start_point' => 'required',
'end_point' => 'required',
'verification_code' => ['required', 'string', new VerificationCode($this->phone_number)],
'distance' => 'numeric',
'officer_name' => 'required',
'officer_plaque' => 'required',
'officer_phone_number' => 'required|digits:11',
'start_time' => 'required|date_format:Y-m-d H:i',
'end_time' => 'required|date_format:Y-m-d H:i|after:start_time',
'fuel_consumption' => 'required|integer',
'vehicle_runtime' => 'required|integer',
'stop_points' => 'required|array',
'road_patrol_machines_id' => 'required|array',
'road_patrol_machines_id.*' => 'required|exists:cmms_machines,id',
'road_patrol_rahdaran_id' => 'required|array',
'road_patrol_rahdaran_id.*' => 'required|exists:rahdaran,id',
'observed_items' => 'array',
'observed_items.*.item_id' => 'required|integer',
@@ -41,16 +45,17 @@ class StoreRequest extends FormRequest
// road item projects fields
'observed_items.*.start_point' => 'required',
'observed_items.*.end_point' => '',
'observed_items.*.amount' => 'numeric|required_if:instant_action,1',
'observed_items.*.amount' => 'numeric|required_if:observed_items.*.instant_action,1',
'observed_items.*.before_image' => 'image|max:4096',
'observed_items.*.after_image' => 'image|max:4096',
'observed_items.*.priority' => 'integer|in:1,2,3|required_if:instant_action,0',
'observed_items.*.priority_fa' => 'string|required_if:instant_action,0',
'observed_items.*.priority' => 'integer|in:1,2,3|required_if:observed_items.*.instant_action,0',
'observed_items.*.priority_fa' => 'string|required_if:observed_items.*.instant_action,0',
'description' => 'string|required_with:observed_items',
'machines_id' => 'required|array',
'machines_id.*' => 'required|exists:cmms_machines,id',
'rahdaran_id' => 'required|array',
'rahdaran_id.*' => 'required|exists:rahdaran,id',
'observed_items.*.road_item_machines_id' => 'required_if:observed_items.*.instant_action,1|array',
'observed_items.*.road_item_machines_id.*' => 'required_if:observed_items.*.instant_action,1|exists:cmms_machines,id',
'observed_items.*.road_item_rahdaran_id' => 'required_if:observed_items.*.instant_action,1|array',
'observed_items.*.road_item_rahdaran_id.*' => 'required_if:observed_items.*.instant_action,1|exists:rahdaran,id',
];
}

View File

@@ -0,0 +1,27 @@
<?php
namespace App\Rules;
use App\Facades\Otp\Otp;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
use Illuminate\Translation\PotentiallyTranslatedString;
class VerificationCode implements ValidationRule
{
public function __construct(protected string $phone_number){}
/**
* Run the validation rule.
*
* @param \Closure(string): PotentiallyTranslatedString $fail
*/
public function validate(string $attribute, mixed $value, Closure $fail): void
{
$verified = Otp::verifyOtpToken($this->phone_number, $value);
if (!$verified) {
$fail('The :attribute is not valid.')->translate();
}
}
}

View File

@@ -63,6 +63,7 @@ class GetVehicleActivityService
$inputData = $this->inputParameters + array(
"username" => $this->username,
"password" => $this->password,
"minStopDuration" => 1,
);
return json_encode($inputData);

View File

@@ -0,0 +1,40 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('road_patrols', function (Blueprint $table) {
$table->double('start_lat', null, 0)->nullable()->change();
$table->double('start_lon', null, 0)->nullable()->change();
$table->double('end_lat', null, 0)->nullable()->change();
$table->double('end_lon', null, 0)->nullable()->change();
$table->integer('fuel_consumption')->nullable();
$table->integer('vehicle_runtime')->nullable();
$table->json('stop_points')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('road_patrols', function (Blueprint $table) {
$table->double('start_lat', null, 0)->change();
$table->double('start_lon', null, 0)->change();
$table->double('end_lat', null, 0)->change();
$table->double('end_lon', null, 0)->change();
$table->dropColumn('fuel_consumption');
$table->dropColumn('vehicle_runtime');
$table->dropColumn('stop_points');
});
}
};

View File

@@ -7,6 +7,7 @@ use App\Http\Controllers\V3\Azmayesh\AzmayeshTypeController;
use App\Http\Controllers\V3\CMMSMachinesController;
use App\Http\Controllers\V3\FMSVehicleManagementController;
use App\Http\Controllers\V3\Harim\DivarkeshiController;
use App\Http\Controllers\V3\ObservedItemController;
use App\Http\Controllers\V3\ProfileController;
use App\Http\Controllers\V3\RahdaranController;
use App\Http\Controllers\V3\RoadItemsProjectController;
@@ -176,5 +177,13 @@ Route::prefix('fms_vehicle')
->name('fmsVehicle.')
->controller(FMSVehicleManagementController::class)
->group(function () {
Route::get('/get_activity', 'getActivity')->name('getActivity');
Route::post('/get_activity', 'getActivity')->name('getActivity');
});
Route::prefix('observed_items')
->name('observedItem.')
->controller(ObservedItemController::class)
->group(function () {
Route::post('/filter', 'filter')->name('filter');
Route::get('/{observedItem}', 'show')->name('show');
});

View File

@@ -149,3 +149,15 @@ INSERT INTO log_lists (description,log_unique_code,action_type,is_done) VALUES
('ثبت فعالیت روزانه','1154','action',0),
('حذف نگهداری و حریم','1155','action',0),
('ورود به نقشه نگهداری حریم','1156','show',1);
INSERT INTO log_lists (description,log_unique_code,action_type,is_done) VALUES
('ورود به کارتابل آزمایشات','1157','action',0),
('ثبت آزمایش','1158','action',0),
('ویرایش آزمایش','1159','action',0),
('حذف آزمایش','1160','action',0),
('ورود به کارتابل نوع آزمایشات','1161','action',0),
('ثبت نوع آزمایش','1162','action',0),
('ویرایش نوع آزمایش','1163','action',0),
('حذف نوع آزمایش','1164','action',0),
('ثبت نمونه آزمایش','1165','action',0),
('ویرایش نمونه آزمایش','1166','action',0),
('حذف نمونه آزمایش','1167','action',0),