From 1227814dea34324226b6d8490785dcfc9c3b35dd Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Wed, 23 Apr 2025 09:53:09 +0330 Subject: [PATCH 1/7] change query columns --- app/Enums/SafetyAndPrivacyStatus.php | 4 ++-- .../V3/Dashboard/SafetyAndPrivacyController.php | 13 +++++++++++-- ...00327_add_column_to_safety_and_privacy_table.php | 3 ++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/app/Enums/SafetyAndPrivacyStatus.php b/app/Enums/SafetyAndPrivacyStatus.php index 34358e24..78168c2a 100644 --- a/app/Enums/SafetyAndPrivacyStatus.php +++ b/app/Enums/SafetyAndPrivacyStatus.php @@ -4,16 +4,16 @@ namespace App\Enums; enum SafetyAndPrivacyStatus: int { + case PENDING = 0; case CONFIRM = 1; case REJECT = 2; - case PENDING = 3; public static function name(int $state): string { $mapArray = [ + 0 => 'در حال بررسی', 1 => 'تایید', 2 => 'عدم تایید', - 3 => 'در حال بررسی' ]; return $mapArray[$state]; diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php index 3124cce8..afb45a7d 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php @@ -202,8 +202,11 @@ class SafetyAndPrivacyController extends Controller public function confirm(Request $request, SafetyAndPrivacy $safetyAndPrivacy): JsonResponse { + $status_id = SafetyAndPrivacyStatus::CONFIRM->value; + $safetyAndPrivacy->update([ 'status' => SafetyAndPrivacyStatus::CONFIRM->value, + 'status_fa' => SafetyAndPrivacyStatus::name($status_id), 'supervisor_description' => $request->supervisor_description ]); @@ -212,8 +215,11 @@ class SafetyAndPrivacyController extends Controller public function reject(Request $request, SafetyAndPrivacy $safetyAndPrivacy): JsonResponse { + $status_id = SafetyAndPrivacyStatus::REJECT->value; + $safetyAndPrivacy->update([ - 'status' => SafetyAndPrivacyStatus::REJECT->value, + 'status' => $status_id, + 'status_fa' => SafetyAndPrivacyStatus::name($status_id), 'supervisor_description' => $request->supervisor_description ]); @@ -222,10 +228,13 @@ class SafetyAndPrivacyController extends Controller public function finish(Request $request, SafetyAndPrivacy $safetyAndPrivacy): JsonResponse { + $status_id = SafetyAndPrivacyStatus::PENDING->value; + $safetyAndPrivacy->update([ - 'is_finished' => $request->is_finished, + 'is_finished' => 1, 'final_description' => $request->final_description, 'status' => SafetyAndPrivacyStatus::PENDING->value, + 'status_fa' => SafetyAndPrivacyStatus::name($status_id), ]); return $this->successResponse(); diff --git a/database/migrations/2025_04_22_100327_add_column_to_safety_and_privacy_table.php b/database/migrations/2025_04_22_100327_add_column_to_safety_and_privacy_table.php index 49d997a7..d63218ce 100644 --- a/database/migrations/2025_04_22_100327_add_column_to_safety_and_privacy_table.php +++ b/database/migrations/2025_04_22_100327_add_column_to_safety_and_privacy_table.php @@ -14,6 +14,7 @@ return new class extends Migration Schema::table('safety_and_privacy', function (Blueprint $table) { $table->boolean('is_finished')->nullable(); $table->integer('status')->nullable(); + $table->string('status_fa')->nullable(); $table->string('supervisor_description')->nullable(); $table->string('final_description')->nullable(); }); @@ -25,7 +26,7 @@ return new class extends Migration public function down(): void { Schema::table('safety_and_privacy', function (Blueprint $table) { - $table->dropColumn(['status', 'final_description', 'is_finished', 'supervisor_description']); + $table->dropColumn(['status', 'final_description', 'is_finished', 'supervisor_description', 'status_fa']); }); } }; From 99ce5133b0a462f762c5e11a0da040b1a0f5aede Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Wed, 23 Apr 2025 10:17:07 +0330 Subject: [PATCH 2/7] create form request for supervisor --- .../Dashboard/SafetyAndPrivacyController.php | 23 +++++++++------ .../V3/SafetyAndPrivacy/FinishRequest.php | 28 +++++++++++++++++++ .../V3/SafetyAndPrivacy/RejectRequest.php | 28 +++++++++++++++++++ .../SafetyAndPrivacyTableService.php | 8 +++--- routes/v3.php | 2 +- 5 files changed, 75 insertions(+), 14 deletions(-) create mode 100644 app/Http/Requests/V3/SafetyAndPrivacy/FinishRequest.php create mode 100644 app/Http/Requests/V3/SafetyAndPrivacy/RejectRequest.php diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php index afb45a7d..c89b5842 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php @@ -9,6 +9,8 @@ use App\Exports\V3\SafetyAndPrivacy\CartableReport; use App\Facades\DataTable\DataTableFacade; use App\Facades\File\FileFacade; use App\Http\Controllers\Controller; +use App\Http\Requests\V3\SafetyAndPrivacy\FinishRequest; +use App\Http\Requests\V3\SafetyAndPrivacy\RejectRequest; use App\Http\Requests\V3\SafetyAndPrivacy\FirstStepStoreRequest; use App\Http\Requests\V3\SafetyAndPrivacy\SecondStepStoreRequest; use App\Http\Requests\V3\SafetyAndPrivacy\ThirdStepStoreRequest; @@ -60,6 +62,7 @@ class SafetyAndPrivacyController extends Controller DB::transaction(function () use ($request, $coordinates, $item, $nominatimService, $user) { + $step = SafetyAndPrivacySteps::SHENASAEI->value; $safety_and_privacy = SafetyAndPrivacy::query()->create([ 'lat' => $coordinates[0], 'lon' => $coordinates[1], @@ -77,9 +80,10 @@ class SafetyAndPrivacyController extends Controller 'way_id' => $nominatimService->get_way_id_from_nominatim($coordinates[0], $coordinates[1]), 'axis_type_id' => $request->axis_type_id, 'axis_type_name' => AxisTypes::name($request->axis_type_id), - 'step' => SafetyAndPrivacySteps::SHENASAEI->value, - 'step_fa' => SafetyAndPrivacySteps::name(1), - 'is_finished' => false + 'step' => $step, + 'step_fa' => SafetyAndPrivacySteps::name($step), + 'is_finished' => false, + 'final_description' => 'پیام سیستمی : این عملیات پس از طی تمامی گام ها خاتمه یافت' ]); $safety_and_privacy->recognize_picture = $request->has('recognize_picture') ? @@ -103,11 +107,12 @@ class SafetyAndPrivacyController extends Controller foreach ($request->judiciary_document as $index => $file) { $judiciary_document[] = FileFacade::save($file, "safety_and_privacy/{$safetyAndPrivacy->id}/judiciary_document"); } + $step = SafetyAndPrivacySteps::MOSTANADAT_GAZAEI->value; $safetyAndPrivacy->update([ 'judiciary_document' => serialize($judiciary_document), 'judiciary_document_upload_date' => now(), 'step' => SafetyAndPrivacySteps::MOSTANADAT_GAZAEI->value, - 'step_fa' => SafetyAndPrivacySteps::name(2), + 'step_fa' => SafetyAndPrivacySteps::name($step), ]); $user->addActivityComplete(1135); @@ -121,9 +126,10 @@ class SafetyAndPrivacyController extends Controller $user = auth()->user(); DB::transaction(function () use ($request, $safetyAndPrivacy, $user) { + $step = SafetyAndPrivacySteps::BARKHORD->value; $safetyAndPrivacy->update([ 'step' => SafetyAndPrivacySteps::BARKHORD->value, - 'step_fa' => SafetyAndPrivacySteps::name(3), + 'step_fa' => SafetyAndPrivacySteps::name($step), 'action_picture' => FileFacade::save($request->action_picture, "safety_and_privacy/{$safetyAndPrivacy->id}/action_picture"), 'action_picture_document_upload_date' => now(), 'action_date' => $request->action_date, @@ -200,20 +206,19 @@ class SafetyAndPrivacyController extends Controller )); } - public function confirm(Request $request, SafetyAndPrivacy $safetyAndPrivacy): JsonResponse + public function confirm(SafetyAndPrivacy $safetyAndPrivacy): JsonResponse { $status_id = SafetyAndPrivacyStatus::CONFIRM->value; $safetyAndPrivacy->update([ 'status' => SafetyAndPrivacyStatus::CONFIRM->value, 'status_fa' => SafetyAndPrivacyStatus::name($status_id), - 'supervisor_description' => $request->supervisor_description ]); return $this->successResponse(); } - public function reject(Request $request, SafetyAndPrivacy $safetyAndPrivacy): JsonResponse + public function reject(RejectRequest $request, SafetyAndPrivacy $safetyAndPrivacy): JsonResponse { $status_id = SafetyAndPrivacyStatus::REJECT->value; @@ -226,7 +231,7 @@ class SafetyAndPrivacyController extends Controller return $this->successResponse(); } - public function finish(Request $request, SafetyAndPrivacy $safetyAndPrivacy): JsonResponse + public function finish(FinishRequest $request, SafetyAndPrivacy $safetyAndPrivacy): JsonResponse { $status_id = SafetyAndPrivacyStatus::PENDING->value; diff --git a/app/Http/Requests/V3/SafetyAndPrivacy/FinishRequest.php b/app/Http/Requests/V3/SafetyAndPrivacy/FinishRequest.php new file mode 100644 index 00000000..a8cb30bc --- /dev/null +++ b/app/Http/Requests/V3/SafetyAndPrivacy/FinishRequest.php @@ -0,0 +1,28 @@ +|string> + */ + public function rules(): array + { + return [ + 'final_description' => 'required|string', + ]; + } +} diff --git a/app/Http/Requests/V3/SafetyAndPrivacy/RejectRequest.php b/app/Http/Requests/V3/SafetyAndPrivacy/RejectRequest.php new file mode 100644 index 00000000..7ddc7700 --- /dev/null +++ b/app/Http/Requests/V3/SafetyAndPrivacy/RejectRequest.php @@ -0,0 +1,28 @@ +|string> + */ + public function rules(): array + { + return [ + 'supervisor_description' => 'required|string', + ]; + } +} diff --git a/app/Services/Cartables/SafetyAndPrivacyTableService.php b/app/Services/Cartables/SafetyAndPrivacyTableService.php index 8aca0a54..40f70cc4 100644 --- a/app/Services/Cartables/SafetyAndPrivacyTableService.php +++ b/app/Services/Cartables/SafetyAndPrivacyTableService.php @@ -22,10 +22,10 @@ class SafetyAndPrivacyTableService { $user = auth()->user(); - $fields = ['id','lat','lon','province_id','province_fa','city_id','city_fa','edare_shahri_id','edare_shahri_name', - 'recognize_picture','action_picture','operator_id','operator_name','way_id','created_at','updated_at','step', - 'info_id','info_fa','activity_date_time', 'action_picture_document_upload_date', 'judiciary_document_upload_date', - 'step_fa', 'axis_type_id', 'axis_type_name', 'action_date' + $fields = ['id','lat','lon', 'province_fa', 'edare_shahri_name', + 'recognize_picture','action_picture','created_at','step', 'final_description', + 'info_fa', 'activity_date_time', 'action_picture_document_upload_date', 'judiciary_document_upload_date', + 'step_fa', 'axis_type_id', 'axis_type_name', 'action_date', 'is_finished', 'status_fa', 'supervisor_description' ]; if ($user->hasPermissionTo('show-safety-and-privacy-operator-cartable')) { diff --git a/routes/v3.php b/routes/v3.php index d0924334..55ab1d3f 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -337,7 +337,7 @@ Route::prefix('safety_and_privacy') ->name('SafetyAndPrivacy.') ->controller(SafetyAndPrivacyController::class) ->group(function () { - Route::get('/', 'operatorIndex')->name('operatorIndex')->middleware('permission:show-safety-and-privacy-operator-cartable|show-safety-and-privacy-operator-cartable-province|show-safety-and-privacy-operator-cartable-edarate-shahri'); + Route::get('/operator_index', 'operatorIndex')->name('operatorIndex')->middleware('permission:show-safety-and-privacy-operator-cartable|show-safety-and-privacy-operator-cartable-province|show-safety-and-privacy-operator-cartable-edarate-shahri'); Route::get('/excel_report', 'excelReport')->name('excelReport')->middleware('permission:show-safety-and-privacy-operator-cartable|show-safety-and-privacy-operator-cartable-province|show-safety-and-privacy-operator-cartable-edarate-shahri'); Route::post('/first_step_store', 'firstStepStore')->name('firstStepStore') ->middleware(['validate-store-access', 'permission:add-safety-and-privacy']); From c29738f96c2234141489774a06f91554c136b29a Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Wed, 23 Apr 2025 10:34:05 +0330 Subject: [PATCH 3/7] create report for supervisor --- ...eReport.php => OperatorCartableReport.php} | 4 +- .../SupervisorCartableReport.php | 69 +++++++++++ .../Dashboard/SafetyAndPrivacyController.php | 18 ++- ...e.php => OperatorCartableReport.blade.php} | 0 .../SupervisorCartableReport.blade.php | 109 ++++++++++++++++++ routes/v3.php | 11 +- 6 files changed, 202 insertions(+), 9 deletions(-) rename app/Exports/V3/SafetyAndPrivacy/{CartableReport.php => OperatorCartableReport.php} (91%) create mode 100644 app/Exports/V3/SafetyAndPrivacy/SupervisorCartableReport.php rename resources/views/v3/Reports/SafetyAndPrivacy/{CartableReport.blade.php => OperatorCartableReport.blade.php} (100%) create mode 100644 resources/views/v3/Reports/SafetyAndPrivacy/SupervisorCartableReport.blade.php diff --git a/app/Exports/V3/SafetyAndPrivacy/CartableReport.php b/app/Exports/V3/SafetyAndPrivacy/OperatorCartableReport.php similarity index 91% rename from app/Exports/V3/SafetyAndPrivacy/CartableReport.php rename to app/Exports/V3/SafetyAndPrivacy/OperatorCartableReport.php index 6c066aa1..81137eea 100644 --- a/app/Exports/V3/SafetyAndPrivacy/CartableReport.php +++ b/app/Exports/V3/SafetyAndPrivacy/OperatorCartableReport.php @@ -12,13 +12,13 @@ use Maatwebsite\Excel\Events\AfterSheet; use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; -class CartableReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings +class OperatorCartableReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings { public function __construct(private ?Collection $data){} public function view(): View { - return view('v3.Reports.SafetyAndPrivacy.CartableReport', [ + return view('v3.Reports.SafetyAndPrivacy.OperatorCartableReport', [ 'data' => $this->data, ]); } diff --git a/app/Exports/V3/SafetyAndPrivacy/SupervisorCartableReport.php b/app/Exports/V3/SafetyAndPrivacy/SupervisorCartableReport.php new file mode 100644 index 00000000..cf712aaf --- /dev/null +++ b/app/Exports/V3/SafetyAndPrivacy/SupervisorCartableReport.php @@ -0,0 +1,69 @@ + $this->data, + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + }, + ]; + } + + public function drawings(): array + { + $drawing = new Drawing(); + $drawing->setName('Logo'); + $drawing->setDescription('This is my logo'); + $drawing->setPath(public_path('/dist/logo.png')); + $drawing->setWidth(50); + $drawing->setHeight(50); + $drawing->setOffsetX(5); + $drawing->setOffsetY(5); + $drawing->setCoordinates('A1'); + + $drawing2 = new Drawing(); + $drawing2->setName('Logo'); + $drawing2->setDescription('This is my logo'); + $drawing2->setPath(public_path('/dist/141icon.png')); + $drawing2->setWidth(50); + $drawing2->setHeight(50); + $drawing2->setOffsetX(5); + $drawing2->setOffsetY(5); + $drawing2->setCoordinates('B1'); + return [$drawing, $drawing2]; + } + + public function styles(Worksheet $sheet): array + { + return [ + 'A:BA' => [ + 'font' => [ + 'name' => 'B Nazanin' + ] + ], + ]; + } +} \ No newline at end of file diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php index c89b5842..89d9324c 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php @@ -5,7 +5,8 @@ namespace App\Http\Controllers\V3\Dashboard; use App\Enums\AxisTypes; use App\Enums\SafetyAndPrivacyStatus; use App\Enums\SafetyAndPrivacySteps; -use App\Exports\V3\SafetyAndPrivacy\CartableReport; +use App\Exports\V3\SafetyAndPrivacy\OperatorCartableReport; +use App\Exports\V3\SafetyAndPrivacy\SupervisorCartableReport; use App\Facades\DataTable\DataTableFacade; use App\Facades\File\FileFacade; use App\Http\Controllers\Controller; @@ -43,11 +44,11 @@ class SafetyAndPrivacyController extends Controller /** * @throws Throwable */ - public function excelReport(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): BinaryFileResponse + public function operatorExcelReport(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): BinaryFileResponse { $name = 'گزارش از نگهداری حریم راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; $data = $safetyAndPrivacyTableService->operatorDatatable($request); - return Excel::download(new CartableReport($data['data']), $name); + return Excel::download(new OperatorCartableReport($data['data']), $name); } public function firstStepStore(FirstStepStoreRequest $request, NominatimService $nominatimService): JsonResponse @@ -111,7 +112,7 @@ class SafetyAndPrivacyController extends Controller $safetyAndPrivacy->update([ 'judiciary_document' => serialize($judiciary_document), 'judiciary_document_upload_date' => now(), - 'step' => SafetyAndPrivacySteps::MOSTANADAT_GAZAEI->value, + 'step' => $step, 'step_fa' => SafetyAndPrivacySteps::name($step), ]); @@ -128,7 +129,7 @@ class SafetyAndPrivacyController extends Controller DB::transaction(function () use ($request, $safetyAndPrivacy, $user) { $step = SafetyAndPrivacySteps::BARKHORD->value; $safetyAndPrivacy->update([ - 'step' => SafetyAndPrivacySteps::BARKHORD->value, + 'step' => $step, 'step_fa' => SafetyAndPrivacySteps::name($step), 'action_picture' => FileFacade::save($request->action_picture, "safety_and_privacy/{$safetyAndPrivacy->id}/action_picture"), 'action_picture_document_upload_date' => now(), @@ -249,4 +250,11 @@ class SafetyAndPrivacyController extends Controller { return response()->json($safetyAndPrivacyTableService->supervisorDataTable($request)); } + + public function supervisorExcelReport(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): BinaryFileResponse + { + $name = 'گزارش از نگهداری حریم راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; + $data = $safetyAndPrivacyTableService->supervisorDataTable($request); + return Excel::download(new SupervisorCartableReport($data['data']), $name); + } } diff --git a/resources/views/v3/Reports/SafetyAndPrivacy/CartableReport.blade.php b/resources/views/v3/Reports/SafetyAndPrivacy/OperatorCartableReport.blade.php similarity index 100% rename from resources/views/v3/Reports/SafetyAndPrivacy/CartableReport.blade.php rename to resources/views/v3/Reports/SafetyAndPrivacy/OperatorCartableReport.blade.php diff --git a/resources/views/v3/Reports/SafetyAndPrivacy/SupervisorCartableReport.blade.php b/resources/views/v3/Reports/SafetyAndPrivacy/SupervisorCartableReport.blade.php new file mode 100644 index 00000000..c1065678 --- /dev/null +++ b/resources/views/v3/Reports/SafetyAndPrivacy/SupervisorCartableReport.blade.php @@ -0,0 +1,109 @@ + + + + + + + + فعالیت های نگهداری حریم راه + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($data as $item) + + + + + + + + + + + + + + + + @endforeach + +
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} +
+
+ گزارش فعالیت های نگهداری حریم راه +
+ کد یکتا + + استان + + اداره + + مورد مشاهده شده + + نوع محور + + تاریخ ثبت + + تاریخ بازدید + + تاریخ بارگذاری مستندات قضایی + + تاریخ اقدام + + وضعیت +
{{ $item['id'] ?? '-' }}{{ $item['province_fa'] ?? '-' }}{{ $item['edare_shahri_name'] ?? '-' }}{{ $item['info_fa'] ?? '-' }}{{ $item['axis_type_name'] ?? '-' }}{{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }}{{ $item['activity_date_time'] ? verta($item['activity_date_time'])->format('Y/n/j H:i:s') : '-' }} + {{ $item['judiciary_document_upload_date'] && $item['judiciary_document_upload_date'] != '0000-00-00 00:00:00' ? verta($item['judiciary_document_upload_date'])->format('Y/n/j H:i:s') : '-' }} + + {{ $item['action_picture_document_upload_date'] ? verta($item['action_date'])->format('Y/n/j H:i:s') : '-' }} + {{ $item['step_fa'] ?? '-' }}
+ + diff --git a/routes/v3.php b/routes/v3.php index 55ab1d3f..9bb08728 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -337,8 +337,12 @@ Route::prefix('safety_and_privacy') ->name('SafetyAndPrivacy.') ->controller(SafetyAndPrivacyController::class) ->group(function () { - Route::get('/operator_index', 'operatorIndex')->name('operatorIndex')->middleware('permission:show-safety-and-privacy-operator-cartable|show-safety-and-privacy-operator-cartable-province|show-safety-and-privacy-operator-cartable-edarate-shahri'); - Route::get('/excel_report', 'excelReport')->name('excelReport')->middleware('permission:show-safety-and-privacy-operator-cartable|show-safety-and-privacy-operator-cartable-province|show-safety-and-privacy-operator-cartable-edarate-shahri'); + Route::get('/operator_index', 'operatorIndex')->name('operatorIndex') + ->middleware('permission:show-safety-and-privacy-operator-cartable|show-safety-and-privacy-operator-cartable-province|show-safety-and-privacy-operator-cartable-edarate-shahri'); + Route::get('/supervisor_index', 'supervisorIndex')->name('supervisorIndex') + ->middleware('permission:show-safety-and-privacy-operator-cartable|show-safety-and-privacy-operator-cartable-province|show-safety-and-privacy-operator-cartable-edarate-shahri'); + Route::get('/operator_excel_report', 'operatorExcelReport')->name('operatorExcelReport') + ->middleware('permission:show-safety-and-privacy-operator-cartable|show-safety-and-privacy-operator-cartable-province|show-safety-and-privacy-operator-cartable-edarate-shahri'); Route::post('/first_step_store', 'firstStepStore')->name('firstStepStore') ->middleware(['validate-store-access', 'permission:add-safety-and-privacy']); @@ -350,6 +354,9 @@ Route::prefix('safety_and_privacy') Route::get('/{safetyAndPrivacy}', 'show')->name('show'); Route::delete('/{safetyAndPrivacy}', 'destroy')->name('destroy')->middleware('permission:delete-safety-and-privacy'); Route::get('/deserialize/{safetyAndPrivacy}', 'deserialize')->name('deserialize'); + Route::post('/confirm/{safetyAndPrivacy}', 'confirm')->name('confirm'); + Route::post('/reject/{safetyAndPrivacy}', 'reject')->name('reject'); + Route::post('/finish/{safetyAndPrivacy}', 'finish')->name('finish'); }); Route::prefix('safety_and_privacy_report') From 717b268f76c8c684a715dc8373902436244f3939 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Wed, 23 Apr 2025 11:45:01 +0330 Subject: [PATCH 4/7] add permission --- .../V3/Dashboard/SafetyAndPrivacyController.php | 4 ++-- .../Cartables/SafetyAndPrivacyTableService.php | 4 ++-- .../SafetyAndPrivacy/OperatorCartableReport.blade.php | 10 ---------- routes/v3.php | 11 ++++++----- 4 files changed, 10 insertions(+), 19 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php index 89d9324c..06f215fd 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php @@ -212,7 +212,7 @@ class SafetyAndPrivacyController extends Controller $status_id = SafetyAndPrivacyStatus::CONFIRM->value; $safetyAndPrivacy->update([ - 'status' => SafetyAndPrivacyStatus::CONFIRM->value, + 'status' => $status_id, 'status_fa' => SafetyAndPrivacyStatus::name($status_id), ]); @@ -239,7 +239,7 @@ class SafetyAndPrivacyController extends Controller $safetyAndPrivacy->update([ 'is_finished' => 1, 'final_description' => $request->final_description, - 'status' => SafetyAndPrivacyStatus::PENDING->value, + 'status' => $status_id, 'status_fa' => SafetyAndPrivacyStatus::name($status_id), ]); diff --git a/app/Services/Cartables/SafetyAndPrivacyTableService.php b/app/Services/Cartables/SafetyAndPrivacyTableService.php index 40f70cc4..4e651ef4 100644 --- a/app/Services/Cartables/SafetyAndPrivacyTableService.php +++ b/app/Services/Cartables/SafetyAndPrivacyTableService.php @@ -22,8 +22,8 @@ class SafetyAndPrivacyTableService { $user = auth()->user(); - $fields = ['id','lat','lon', 'province_fa', 'edare_shahri_name', - 'recognize_picture','action_picture','created_at','step', 'final_description', + $fields = [ + 'id','lat','lon', 'recognize_picture','action_picture','created_at','step', 'final_description', 'info_fa', 'activity_date_time', 'action_picture_document_upload_date', 'judiciary_document_upload_date', 'step_fa', 'axis_type_id', 'axis_type_name', 'action_date', 'is_finished', 'status_fa', 'supervisor_description' ]; diff --git a/resources/views/v3/Reports/SafetyAndPrivacy/OperatorCartableReport.blade.php b/resources/views/v3/Reports/SafetyAndPrivacy/OperatorCartableReport.blade.php index c1065678..043a3f4d 100644 --- a/resources/views/v3/Reports/SafetyAndPrivacy/OperatorCartableReport.blade.php +++ b/resources/views/v3/Reports/SafetyAndPrivacy/OperatorCartableReport.blade.php @@ -42,14 +42,6 @@ style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;"> کد یکتا - - استان - - - اداره - مورد مشاهده شده @@ -85,8 +77,6 @@ @foreach ($data as $item) {{ $item['id'] ?? '-' }} - {{ $item['province_fa'] ?? '-' }} - {{ $item['edare_shahri_name'] ?? '-' }} {{ $item['info_fa'] ?? '-' }} {{ $item['axis_type_name'] ?? '-' }} {{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }} diff --git a/routes/v3.php b/routes/v3.php index 9bb08728..7d6b2e8f 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -338,14 +338,15 @@ Route::prefix('safety_and_privacy') ->controller(SafetyAndPrivacyController::class) ->group(function () { Route::get('/operator_index', 'operatorIndex')->name('operatorIndex') - ->middleware('permission:show-safety-and-privacy-operator-cartable|show-safety-and-privacy-operator-cartable-province|show-safety-and-privacy-operator-cartable-edarate-shahri'); + ->middleware('permission:show-safety-and-privacy-operator-cartable-edarate-shahri'); Route::get('/supervisor_index', 'supervisorIndex')->name('supervisorIndex') - ->middleware('permission:show-safety-and-privacy-operator-cartable|show-safety-and-privacy-operator-cartable-province|show-safety-and-privacy-operator-cartable-edarate-shahri'); + ->middleware('permission:show-safety-and-privacy-operator-cartable|show-safety-and-privacy-operator-cartable-province'); Route::get('/operator_excel_report', 'operatorExcelReport')->name('operatorExcelReport') - ->middleware('permission:show-safety-and-privacy-operator-cartable|show-safety-and-privacy-operator-cartable-province|show-safety-and-privacy-operator-cartable-edarate-shahri'); - Route::post('/first_step_store', 'firstStepStore')->name('firstStepStore') - ->middleware(['validate-store-access', 'permission:add-safety-and-privacy']); + ->middleware('permission:show-safety-and-privacy-operator-cartable-edarate-shahri'); + Route::get('/supervisor_excel_report', 'supervisorExcelReport')->name('supervisorExcelReport') + ->middleware('permission:show-safety-and-privacy-operator-cartable|show-safety-and-privacy-operator-cartable-province'); + Route::post('/first_step_store', 'firstStepStore')->name('firstStepStore')->middleware(['validate-store-access', 'permission:add-safety-and-privacy']); Route::get('/sub_items', 'subItems')->name('subItems'); Route::get('/map', 'map')->name('map'); Route::post('/second_step_store/{safetyAndPrivacy}', 'secondStepStore')->name('secondStepStore')->middleware(['validate-store-access','permission:add-safety-and-privacy']); From 65eea49aa49d1e1bc46f0188f38e451b1e4b03de Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Wed, 23 Apr 2025 12:00:01 +0330 Subject: [PATCH 5/7] debug mass assignment --- .../Controllers/V3/Dashboard/SafetyAndPrivacyController.php | 4 ++-- app/Models/SafetyAndPrivacy.php | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php index 06f215fd..36d41115 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php @@ -84,7 +84,6 @@ class SafetyAndPrivacyController extends Controller 'step' => $step, 'step_fa' => SafetyAndPrivacySteps::name($step), 'is_finished' => false, - 'final_description' => 'پیام سیستمی : این عملیات پس از طی تمامی گام ها خاتمه یافت' ]); $safety_and_privacy->recognize_picture = $request->has('recognize_picture') ? @@ -134,7 +133,8 @@ class SafetyAndPrivacyController extends Controller 'action_picture' => FileFacade::save($request->action_picture, "safety_and_privacy/{$safetyAndPrivacy->id}/action_picture"), 'action_picture_document_upload_date' => now(), 'action_date' => $request->action_date, - 'is_finished' => true + 'is_finished' => true, + 'final_description' => 'پیام سیستمی : این عملیات پس از طی تمامی گام ها خاتمه یافت' ]); $user->addActivityComplete(1136); diff --git a/app/Models/SafetyAndPrivacy.php b/app/Models/SafetyAndPrivacy.php index d1c6cc3f..78660895 100644 --- a/app/Models/SafetyAndPrivacy.php +++ b/app/Models/SafetyAndPrivacy.php @@ -40,7 +40,8 @@ class SafetyAndPrivacy extends Model 'status', 'final_description', 'is_finished', - 'supervisor_description' + 'supervisor_description', + 'status_fa' ]; public $table = "safety_and_privacy"; From 89f39a1f337c8a3e5168b1b115b976c6689cfc4a Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Wed, 23 Apr 2025 13:22:38 +0330 Subject: [PATCH 6/7] update fillable fields --- app/Models/SafetyAndPrivacy.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/Models/SafetyAndPrivacy.php b/app/Models/SafetyAndPrivacy.php index 78660895..55e0a239 100644 --- a/app/Models/SafetyAndPrivacy.php +++ b/app/Models/SafetyAndPrivacy.php @@ -41,7 +41,8 @@ class SafetyAndPrivacy extends Model 'final_description', 'is_finished', 'supervisor_description', - 'status_fa' + 'status_fa', + 'need_judiciary' ]; public $table = "safety_and_privacy"; From 5e4f6379ffea432f53d1eb8b10c5baebef62b92e Mon Sep 17 00:00:00 2001 From: joddyabott Date: Wed, 23 Apr 2025 14:01:03 +0330 Subject: [PATCH 7/7] chenge two table and improve safetyand privacy controller and request --- .../Dashboard/SafetyAndPrivacyController.php | 21 +++++++++++++------ .../SecondStepStoreRequest.php | 1 + ...add_column_to_safety_and_privacy_table.php | 7 ++++++- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php index 36d41115..06b03021 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php @@ -101,18 +101,27 @@ class SafetyAndPrivacyController extends Controller { $user = auth()->user(); - DB::transaction(function () use ($request, $safetyAndPrivacy, $user) - { + DB::transaction(function () use ($request, $safetyAndPrivacy, $user) { + + $need_judiciary = $request->need_judiciary; + $judiciary_document = []; - foreach ($request->judiciary_document as $index => $file) { - $judiciary_document[] = FileFacade::save($file, "safety_and_privacy/{$safetyAndPrivacy->id}/judiciary_document"); + if ($need_judiciary) { + foreach ($request->judiciary_document as $index => $file) { + $judiciary_document[] = FileFacade::save( + $file, + "safety_and_privacy/{$safetyAndPrivacy->id}/judiciary_document" + ); + } } + $step = SafetyAndPrivacySteps::MOSTANADAT_GAZAEI->value; $safetyAndPrivacy->update([ - 'judiciary_document' => serialize($judiciary_document), - 'judiciary_document_upload_date' => now(), 'step' => $step, 'step_fa' => SafetyAndPrivacySteps::name($step), + 'judiciary_document' => $need_judiciary ? serialize($judiciary_document) : null, + 'judiciary_document_upload_date' => $need_judiciary ? now() : null, + 'need_judiciary' => $need_judiciary, ]); $user->addActivityComplete(1135); diff --git a/app/Http/Requests/V3/SafetyAndPrivacy/SecondStepStoreRequest.php b/app/Http/Requests/V3/SafetyAndPrivacy/SecondStepStoreRequest.php index 5d130d51..78e471ad 100644 --- a/app/Http/Requests/V3/SafetyAndPrivacy/SecondStepStoreRequest.php +++ b/app/Http/Requests/V3/SafetyAndPrivacy/SecondStepStoreRequest.php @@ -22,6 +22,7 @@ class SecondStepStoreRequest extends FormRequest public function rules(): array { return [ + 'need_judiciary' => 'required|boolean', 'judiciary_document' => 'required|array', 'judiciary_document.*' => 'file', ]; diff --git a/database/migrations/2025_04_22_100327_add_column_to_safety_and_privacy_table.php b/database/migrations/2025_04_22_100327_add_column_to_safety_and_privacy_table.php index d63218ce..e78b6af7 100644 --- a/database/migrations/2025_04_22_100327_add_column_to_safety_and_privacy_table.php +++ b/database/migrations/2025_04_22_100327_add_column_to_safety_and_privacy_table.php @@ -17,6 +17,9 @@ return new class extends Migration $table->string('status_fa')->nullable(); $table->string('supervisor_description')->nullable(); $table->string('final_description')->nullable(); + $table->boolean('need_judiciary')->nullable(); + $table->text('judiciary_document')->nullable()->change(); + $table->dateTime('judiciary_document_upload_date')->nullable()->change(); }); } @@ -26,7 +29,9 @@ return new class extends Migration public function down(): void { Schema::table('safety_and_privacy', function (Blueprint $table) { - $table->dropColumn(['status', 'final_description', 'is_finished', 'supervisor_description', 'status_fa']); + $table->dropColumn(['status', 'final_description', 'is_finished', 'supervisor_description', 'status_fa', 'need_judiciary']); + $table->text('judiciary_document')->change(); + $table->dateTime('judiciary_document_upload_date')->change(); }); } };