seperate the relation loading

This commit is contained in:
2025-02-18 16:06:00 +03:30
parent 6d88a4325d
commit 2dc007c4cb
6 changed files with 209 additions and 70 deletions

View File

@@ -21,30 +21,22 @@ class ReceiptController extends Controller
{
use ApiResponse;
public function show(Request $request): JsonResponse
public function index(Request $request): JsonResponse
{
$columns = array('id', 'province_fa','city_fa', 'axis_name', 'accident_type_fa', 'accident_date', 'id',
'damage_picture1', 'damage_picture2', 'plaque', 'created_at', 'sum', 'deposit_date', 'status',
'police_file_date','deposit_insurance_image','deposit_daghi_image','deposit_insurance_amount',
'deposit_daghi_amount','status_fa','final_amount','province_id','accident_time','accident_type',
'city_id','driver_name','driver_national_code','driver_phone_number','police_file','lat','lng',
'police_serial','report_base'
);
$allowedFilters = $columns;
$allowedSortings = $columns;
$allowedFilters = ['*'];
$allowedSortings = ['*'];
$user = auth()->user();
$query = null;
if ($user->hasPermissionTo('show-receipt')) {
$query = Accident::with('damages');
$query = Accident::query();
} else {
if (is_null($user->province_id)) {
return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!');
}
$query = Accident::with('damages')->where('province_id', '=', $user->province_id);
$query = Accident::query()->where('province_id', '=', $user->province_id);
}
$data = DataTableFacade::run(
@@ -83,8 +75,10 @@ class ReceiptController extends Controller
'accident_type' => $request->accident_type,
'accident_date' => $request->accident_date,
'accident_time' => $request->accident_time,
'accident_type_fa' => DailyAccidentSettings::where('type', 'accident_type')->where('name', $request->accident_type)->first()->value,
'accident_type_fa' => DailyAccidentSettings::query()->where('type', 'accident_type')->where('name', $request->accident_type)->first()->value,
'way_id' => $nominatimService->get_way_id_from_nominatim($request->lat, $request->lng),
'report_base' => $request->report_base != null ? 1 : null,
'police_file' => '',
];
if ($request->report_base) {
@@ -128,4 +122,133 @@ class ReceiptController extends Controller
auth()->user()->addActivityComplete(1123);
});
}
public function show(Accident $accident): JsonResponse
{
return $this->successResponse($accident->load('damages'));
}
public function update(Accident $accident, Request $request, NominatimService $nominatimService)
{
DB::transaction(function () use ($request, $accident, $nominatimService) {
$accident->province_fa = Province::where('id', $request->province_id)->first()->name_fa;
$accident->province_id = $request->province_id;
$accident->city_fa = City::where('id', $request->city_id)->first()->name_fa;
$accident->city_id = $request->city_id;
$accident->axis_name = $request->axis_name;
$accident->driver_name = $request->driver_name;
$accident->plaque = $request->plaque;
$accident->driver_national_code = $request->national_code;
$accident->driver_phone_number = $request->phone_number;
$accident->lat = $request->lat;
$accident->lng = $request->lng;
$accident->accident_type = $request->accident_type;
$accident->accident_type_fa = DailyAccidentSettings::where('type', 'accident_type')->where('name', $request->accident_type)->first()->value;
$accident->accident_date = $request->accident_date;
$accident->accident_time = $request->accident_time;
$accident->way_id = $nominatimService->get_way_id_from_nominatim($request->lat, $request->lng);
$accident->save();
if ($request->report_base) {
\File::delete('storage/'.$accident->police_file);
$accident->police_file = null;
$accident->police_serial = null;
$accident->report_base = 1;
} else {
if ($accident->report_base) {
if ($request->has('police_file')) {
\File::delete('storage/'.$accident->police_file);
$accident->police_file = $request->file('police_file')->storeAs('receipts_files/'.$accident->id, 'police_file_'.$accident->id.'_'.time().'.'.$request->file('police_file')->extension(), 'public');
} else {
abort(401, 'please send the file');
}
} else {
if ($request->has('police_file')) {
\File::delete('storage/'.$accident->police_file);
$accident->police_file = $request->file('police_file')->storeAs('receipts_files/'.$accident->id, 'police_file_'.$accident->id.'_'.time().'.'.$request->file('police_file')->extension(), 'public');
}
}
$accident->police_file_date = $request->police_file_date;
$accident->police_serial = $request->police_serial;
$accident->report_base = 0;
}
$accident->save();
if ($request->has('damage_picture1')) {
\File::delete('storage/'.$accident->damage_picture1);
$accident->damage_picture1 = $request->file('damage_picture1')->storeAs('receipts_files/'.$accident->id, 'damage_picture1_'.$accident->id.'_'.time().'.'.$request->file('damage_picture1')->extension(), 'public');
} elseif ($request->has('damage_picture1_is_delete')) {
\File::delete('storage/'.$accident->damage_picture1);
$accident->damage_picture1 = null;
}
if ($request->has('damage_picture2')) {
\File::delete('storage/'.$accident->damage_picture2);
$accident->damage_picture2 = $request->file('damage_picture2')->storeAs('receipts_files/'.$accident->id, 'damage_picture2_'.$accident->id.'_'.time().'.'.$request->file('damage_picture2')->extension(), 'public');
} elseif ($request->has('damage_picture2_is_delete')) {
\File::delete('storage/'.$accident->damage_picture2);
$accident->damage_picture2 = null;
}
$accident->save();
$sum = 0;
$accident->damages()->detach();
foreach (json_decode($request->items_damge) as $key => $item) {
$damage = Damage::find($item->id);
$accident->damages()->attach($item->id, [
'value' => $item->value,
'unit' => $damage->unit,
'amount' => $item->amount,
]);
$sum += $item->amount;
}
$ojrate_nasb = $sum/100*20;
$accident->ojrate_nasb = $ojrate_nasb;
$sum += $ojrate_nasb;
$accident->sum = $sum;
$accident->save();
auth()->user()->addActivityComplete(1124);
});
}
public function delete(Accident $accident)
{
\File::delete('storage/receipts_files/'.$accident->id);
$accident->damages()->detach();
$accident->delete();
auth()->user()->addActivityComplete(1125);
return $this->successResponse();
}
public function sendToInsurance(Request $request, Accident $accident)
{
DB::transaction(function () use ($request, $accident) {
$accident->sendToInsurance();
$accident->save();
auth()->user()->addActivityComplete(1126);
});
$account_data = Province::query()->where('id', $accident->province_id)->first();
return $this->successResponse([
$account_data,
$accident->load('damages')
]);
}
}

View File

@@ -99,7 +99,7 @@ class RoadItemsProjectController extends Controller
public function supervisorCartableReport(Request $request, RoadItemReportService $roadItemReportService): BinaryFileResponse
{
$name = 'گزارش از کارتابل ارزیابی فعالیت روزانه ' . verta()->now()->format('Y-m-d H:i') . '.xlsx';
$data = $roadItemReportService->supervisorCartableReport($request);
$data = $roadItemReportService->supervisorCartableReport($request, true);
return Excel::download(new SupervisorCartableReport($data['data']), $name);
}
@@ -267,7 +267,22 @@ class RoadItemsProjectController extends Controller
public function operatorCartableReport(Request $request, RoadItemReportService $roadItemReportService): BinaryFileResponse
{
$name = 'گزارش از کارتابل عملیات فعالیت روزانه ' . verta()->now()->format('Y-m-d H:i') . '.xlsx';
$data = $roadItemReportService->operatorCartableReport($request);
$data = $roadItemReportService->operatorCartableReport($request, true);
return Excel::download(new OperatorCartableReport($data['data']), $name);
}
public function roadItemMachine(RoadItemsProject $roadItemsProject): JsonResponse
{
return $this->successResponse($roadItemsProject->load('cmmsMachines:id,machine_code,car_name,plak_number'));
}
public function roadItemRahdar(RoadItemsProject $roadItemsProject): JsonResponse
{
return $this->successResponse($roadItemsProject->load('rahdaran:id,name,code'));
}
public function roadItemFile(RoadItemsProject $roadItemsProject): JsonResponse
{
return $this->successResponse($roadItemsProject->load('files'));
}
}

View File

@@ -83,7 +83,7 @@ class RoadPatrolProjectController extends Controller
public function supervisorCartableReport(Request $request, RoadPatrolReportService $roadPatrolReportService): BinaryFileResponse
{
$name = 'گزارش از کارتابل ارزیابی گشت راهداری ' . verta()->now()->format('Y-m-d H:i') . '.xlsx';
$data = $roadPatrolReportService->supervisorCartableReport($request);
$data = $roadPatrolReportService->supervisorCartableReport($request, true);
return Excel::download(new SupervisorCartableReport($data['data']), $name);
}
@@ -325,7 +325,17 @@ class RoadPatrolProjectController extends Controller
public function operatorCartableReport(Request $request, RoadPatrolReportService $roadPatrolReportService): BinaryFileResponse
{
$name = 'گزارش از کارتابل عملیات گشت راهداری ' . verta()->now()->format('Y-m-d H:i') . '.xlsx';
$data = $roadPatrolReportService->operatorCartableReport($request);
$data = $roadPatrolReportService->operatorCartableReport($request, true);
return Excel::download(new OperatorCartableReport($data['data']), $name);
}
public function roadPatrolMachine(RoadPatrol $roadPatrol): JsonResponse
{
return $this->successResponse($roadPatrol->load('cmmsMachines:id,machine_code,car_name,plak_number'));
}
public function roadPatrolRahdar(RoadPatrol $roadPatrol): JsonResponse
{
return $this->successResponse($roadPatrol->load('rahdaran:id,name,code'));
}
}

View File

@@ -11,31 +11,31 @@ use Illuminate\Support\Facades\DB;
class RoadItemReportService
{
public function supervisorCartableReport(Request $request)
public function supervisorCartableReport(Request $request, $loadRelations = false)
{
$columns = array(
'id', 'user_id', 'start_lat', 'start_lng', 'end_lat',
'end_lng', 'project_distance', 'item', 'item_fa', 'sub_item_fa', 'sub_item',
'sub_item_data', 'created_at', 'updated_at', 'province_id', 'province_fa',
'unit_fa', 'status', 'status_fa', 'supervisor_description', 'supervising_time',
'supervisor_name', 'edarat_id', 'edarat_name', 'activity_date_time','cmmsMachines.machine_code', 'rahdaran.code',
);
$allowedFilters = $columns;
$allowedSortings = $columns;
$allowedFilters = ['*'];
$allowedSortings = ['*'];
$user = auth()->user();
$query = null;
if ($user->hasPermissionTo('show-road-item-supervise-cartable')) {
$query = RoadItemsProject::query()->where('is_new', 1)->with(['files', 'rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']);
$query = RoadItemsProject::query()
->select(['id', 'province_fa', 'edarat_name', 'item_fa', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng',
'end_lat', 'end_lng', 'activity_date_time', 'created_at', 'status_fa', 'status'])
->where('is_new', 1)
->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']));
}
elseif ($user->hasPermissionTo('show-road-item-supervise-cartable-province')) {
if (is_null($user->province_id)) {
return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!');
}
$query = RoadItemsProject::query()->where('is_new', 1)
->with(['files', 'rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])->where('province_id', auth()->user()->province_id);
$query = RoadItemsProject::query()
->select(['id', 'province_fa', 'edarat_name', 'item_fa', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng',
'end_lat', 'end_lng', 'activity_date_time', 'created_at', 'status_fa', 'status'])
->where('is_new', 1)
->where('province_id', auth()->user()->province_id)
->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']));
}
$data = DataTableFacade::run(
@@ -47,22 +47,17 @@ class RoadItemReportService
return $data;
}
public function operatorCartableReport(Request $request)
public function operatorCartableReport(Request $request, $loadRelations = false)
{
$columns = array(
'id', 'user_id', 'start_lat', 'start_lng', 'end_lat',
'end_lng', 'project_distance', 'item', 'item_fa', 'sub_item_fa', 'sub_item',
'sub_item_data', 'created_at', 'updated_at', 'province_id', 'province_fa',
'unit_fa', 'status', 'status_fa', 'supervisor_description', 'supervising_time',
'supervisor_name', 'edarat_id', 'edarat_name', 'activity_date_time', 'cmmsMachines.machine_code', 'rahdaran.code',
);
$allowedFilters = ['*'];
$allowedSortings = ['*'];
$allowedFilters = $columns;
$allowedSortings = $columns;
$query = RoadItemsProject::with(['files', 'rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])
$query = RoadItemsProject::query()
->select(['id', 'supervisor_description', 'item_fa', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng',
'end_lat', 'end_lng', 'activity_date_time', 'created_at', 'status_fa', 'status'])
->where('is_new', 1)
->where('user_id', auth()->user()->id);
->where('user_id', auth()->user()->id)
->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']));;
$data = DataTableFacade::run(
$query,

View File

@@ -9,33 +9,27 @@ use Illuminate\Support\Facades\DB;
class RoadPatrolReportService
{
public function supervisorCartableReport(Request $request)
public function supervisorCartableReport(Request $request, $loadRelations = false)
{
$columns = array(
'id', 'start_lat', 'start_lon', 'end_lat', 'end_lon', 'operator_id', 'created_at',
'operator_name', 'officer_plaque', 'officer_phone_number', 'officer_name',
'supervisor_description', 'supervising_time', 'supervisor_name', 'status',
'status_fa', 'distance', 'province_id', 'province_fa', 'edare_id', 'edare_name',
'start_time', 'end_time','description', 'cmmsMachines.machine_code', 'rahdaran.code',
);
$allowedFilters = $columns;
$allowedSortings = $columns;
$allowedFilters = ['*'];
$allowedSortings = ['*'];
$user = auth()->user();
$query = null;
if ($user->hasPermissionTo('show-road-patrol-supervise-cartable')) {
$query = RoadPatrol::query()
->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']);
->select([])
->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']));
}
elseif ($user->hasPermissionTo('show-road-patrol-supervise-cartable-province')) {
if (is_null($user->province_id)) {
return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!');
}
$query = RoadPatrol::query()
->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])
->where('province_id', '=', $user->province_id);
->select([])
->where('province_id', '=', $user->province_id)
->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']));
}
$data = DataTableFacade::run(
@@ -47,20 +41,15 @@ class RoadPatrolReportService
return $data;
}
public function operatorCartableReport(Request $request)
public function operatorCartableReport(Request $request, $loadRelations = false)
{
$columns = array(
'id', 'start_lat', 'start_lon', 'end_lat', 'end_lon', 'officer_plaque', 'created_at',
'officer_phone_number', 'officer_name', 'supervisor_description', 'supervising_time',
'supervisor_name', 'status', 'status_fa', 'distance', 'start_time', 'end_time', 'cmmsMachines.machine_code', 'rahdaran.code',
);
$allowedFilters = $columns;
$allowedSortings = $columns;
$allowedFilters = ['*'];
$allowedSortings = ['*'];
$query = RoadPatrol::query()
->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])
->where('operator_id', '=', auth()->user()->id);
->select([])
->where('operator_id', '=', auth()->user()->id)
->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']));
$data = DataTableFacade::run(
$query,

View File

@@ -121,6 +121,10 @@ Route::prefix('road_items')
Route::get('/operator_report', 'operatorCartableReport')
->name('operatorCartableReport');
Route::get('/machines/{roadItemsProject}', 'roadItemMachine')->name('roadItemMachine');
Route::get('/rahdaran/{roadItemsProject}', 'roadItemRahdar')->name('roadItemRahdar');
Route::get('/files/{roadItemsProject}', 'roadItemFile')->name('roadItemFile');
});
Route::prefix('road_patrols')
@@ -155,6 +159,9 @@ Route::prefix('road_patrols')
Route::get('/detail/{roadPatrol}', 'show')
->name('show');
Route::get('/machines/{roadPatrol}', 'roadPatrolMachine')->name('roadPatrolMachine');
Route::get('/rahdaran/{roadPatrol}', 'roadPatrolRahdar')->name('roadPatrolRahdar');
});
Route::prefix('cmms_machines')