diff --git a/app/Exports/V3/SafetyAndPrivacy/CountryActivityReport.php b/app/Exports/V3/SafetyAndPrivacy/CountryActivityReport.php new file mode 100644 index 00000000..99a9fb7d --- /dev/null +++ b/app/Exports/V3/SafetyAndPrivacy/CountryActivityReport.php @@ -0,0 +1,62 @@ +data; + + return view('v3.Reports.SafetyAndPrivacy.CountryActivityReport', [ + 'data' => $data['activities'], + 'fromDate' => $data['fromDate'], + 'toDate' => $data['toDate'], + ]); + } + + 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('K1'); + return [$drawing, $drawing2]; + } +} \ No newline at end of file diff --git a/app/Exports/V3/SafetyAndPrivacy/ProvinceActivityReport.php b/app/Exports/V3/SafetyAndPrivacy/ProvinceActivityReport.php new file mode 100644 index 00000000..c5ffa6ab --- /dev/null +++ b/app/Exports/V3/SafetyAndPrivacy/ProvinceActivityReport.php @@ -0,0 +1,62 @@ +data; + + return view('v3.Reports.SafetyAndPrivacy.ProvinceActivityReport', [ + 'data' => $data['activities'], + 'fromDate' => $data['fromDate'], + 'toDate' => $data['toDate'], + ]); + } + + 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('K1'); + return [$drawing, $drawing2]; + } +} \ No newline at end of file diff --git a/app/Http/Controllers/V3/Dashboard/Reports/SafetyAndPrivacyReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/SafetyAndPrivacyReportController.php index 19151055..cc4291f8 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/SafetyAndPrivacyReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/SafetyAndPrivacyReportController.php @@ -2,19 +2,43 @@ namespace App\Http\Controllers\V3\Dashboard\Reports; +use App\Exports\V3\SafetyAndPrivacy\CountryActivityReport; +use App\Exports\V3\SafetyAndPrivacy\ProvinceActivityReport; use App\Http\Controllers\Controller; +use App\Http\Traits\ApiResponse; use App\Services\Cartables\SafetyAndPrivacyTableService; +use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; +use Maatwebsite\Excel\Facades\Excel; +use Symfony\Component\HttpFoundation\BinaryFileResponse; class SafetyAndPrivacyReportController extends Controller { - public function countryActivity(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService) - { + use ApiResponse; + public function countryActivity(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): JsonResponse + { + $data = $safetyAndPrivacyTableService->countryActivity($request); + return $this->successResponse($data['activities']); } - public function provinceActivity(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService) + public function provinceActivity(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): JsonResponse { + $data = $safetyAndPrivacyTableService->provinceActivity($request); + return $this->successResponse($data['activities']); + } + public function countryExcelActivity(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): BinaryFileResponse + { + $data = $safetyAndPrivacyTableService->countryActivity($request); + $name = 'گزارش از نگهداری حریم راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; + return Excel::download(new CountryActivityReport($data), $name); + } + + public function provinceExcelActivity(Request $request, SafetyAndPrivacyTableService $safetyAndPrivacyTableService): BinaryFileResponse + { + $data = $safetyAndPrivacyTableService->provinceActivity($request); + $name = 'گزارش از نگهداری حریم راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; + return Excel::download(new ProvinceActivityReport($data), $name); } } diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php index 5c67f6a4..425a203e 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php @@ -176,10 +176,10 @@ class SafetyAndPrivacyController extends Controller return $this->successResponse($result); } - public function subItem(): JsonResponse + public function subItems(): JsonResponse { return $this->successResponse(InfoItem::query() - ->where('item', 17) + ->where('item', '=', 17) ->select('id', 'item', 'item_str', 'sub_item_str as name', 'sub_item_unit as unit', 'needs_image', 'needs_end_point', 'sub_item') ->get()); } diff --git a/app/Services/Cartables/SafetyAndPrivacyTableService.php b/app/Services/Cartables/SafetyAndPrivacyTableService.php index e646367c..65a1dc3f 100644 --- a/app/Services/Cartables/SafetyAndPrivacyTableService.php +++ b/app/Services/Cartables/SafetyAndPrivacyTableService.php @@ -59,9 +59,6 @@ class SafetyAndPrivacyTableService $country = DB::select( "SELECT COUNT(*) as qty,info_id, step,step_fa, info_fa FROM safety_and_privacy where created_at BETWEEN '".$fromDate."' and '".$toDate."' GROUP BY info_id,step" ); - $provinces = DB::select( - "SELECT province_id, COUNT(*) as qty,info_id, step, step_fa, info_fa FROM safety_and_privacy where created_at BETWEEN '".$fromDate."' and '".$toDate."' GROUP BY info_id,step,province_id,province_fa" - ); $countryTotalSum = 0; foreach ($country as $key => $value) { @@ -86,9 +83,12 @@ class SafetyAndPrivacyTableService $activities[$value->id]["sum"] = 0; $activities[$value->id]["name_fa"] = $value->name_fa; - $activities[$value->id]["id"] = $value->id; } + $provinces = DB::select( + "SELECT province_id, province_fa, COUNT(*) as qty,info_id, step, step_fa, info_fa FROM safety_and_privacy where created_at BETWEEN '".$fromDate."' and '".$toDate."' GROUP BY info_id,step,province_id,province_fa" + ); + $provinceTotalSum = 0; foreach ($provinces as $key => $value) { $provinceTotalSum += $value->qty; @@ -103,4 +103,59 @@ class SafetyAndPrivacyTableService 'toDate' => $toDate, ]; } + + public function provinceActivity(Request $request): array + { + $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); + $toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); + $provinceId = $request->province_id; + $activities = []; + + $province = DB::select(' + SELECT COUNT(*) as qty,info_id, step,step_fa, info_fa FROM safety_and_privacy where province_id ='.$provinceId.' and created_at BETWEEN "'.$fromDate.'" and "'.$toDate.'" GROUP BY info_id,step + '); + + $provinceTotalSum = 0; + foreach ($province as $key => $value) { + $provinceTotalSum += $value->qty; + $activities[-1]["info-".$value->info_id]["step-".$value->step] = $value->qty; + $activities[-1]["sum"] = $provinceTotalSum; + } + + foreach (\App\Models\EdarateShahri::query()->where('province_id', $provinceId)->get() as $key => $value) { + $activities[$value->id]["info-89"]["step-1"] = 0; + $activities[$value->id]["info-89"]["step-2"] = 0; + $activities[$value->id]["info-89"]["step-3"] = 0; + + $activities[$value->id]["info-90"]["step-1"] = 0; + $activities[$value->id]["info-90"]["step-2"] = 0; + $activities[$value->id]["info-90"]["step-3"] = 0; + + $activities[$value->id]["info-91"]["step-1"] = 0; + $activities[$value->id]["info-91"]["step-2"] = 0; + $activities[$value->id]["info-91"]["step-3"] = 0; + + $activities[$value->id]["sum"] = 0; + $activities[$value->id]["name_fa"] = $value->name_fa; + } + + + $cities = DB::select(' + SELECT edare_shahri_id, COUNT(*) as qty,info_id, step,step_fa, info_fa FROM safety_and_privacy where province_id ='.$provinceId.' and created_at BETWEEN "'.$fromDate.'" and "'.$toDate.'" GROUP BY info_id,step,edare_shahri_id + '); + + $cityTotalSum = 0; + foreach ($cities as $key => $value) { + $cityTotalSum += $value->qty; + $activities[$value->edare_shahri_id]["info-".$value->info_id]["step-".$value->step] = $value->qty; + $activities[$value->edare_shahri_id][""] = $value; + $activities[$value->edare_shahri_id]["sum"] = $cityTotalSum; + } + + return [ + 'activities' => $activities, + 'fromDate' => $fromDate, + 'toDate' => $toDate, + ]; + } } diff --git a/resources/views/v3/Reports/SafetyAndPrivacy/CountryActivityReport.blade.php b/resources/views/v3/Reports/SafetyAndPrivacy/CountryActivityReport.blade.php new file mode 100644 index 00000000..2959afed --- /dev/null +++ b/resources/views/v3/Reports/SafetyAndPrivacy/CountryActivityReport.blade.php @@ -0,0 +1,107 @@ + + + + + + + + کشوری + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($data as $item) + + + + + + + + + + + + + + @endforeach + +
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} +
+
+ گزارش نگهداری حریم راه از تاریخ + {{ verta($fromDate)->format('Y/n/j') }} + تا + تاریخ + {{ verta($toDate)->format('Y/n/j') }} + +
+ اداره کل + + تعداد کل + + ساخت و ساز غیر مجاز + + راه دسترسی غیر مجاز + + عبور تاسیسات زیربنایی غیر مجاز +
+ گام اول (شناسایی) + + گام دوم (مستندات قضایی) + + گام سوم (برخورد) + + گام اول (شناسایی) + + گام دوم (مستندات قضایی) + + گام سوم (برخورد) + + گام اول (شناسایی) + + گام دوم (مستندات قضایی) + + گام سوم (برخورد) +
{{ $item['name_fa'] }}{{ $item['sum'] }}{{ $item['info-89']['step-1'] }}{{ $item['info-89']['step-2'] }}{{ $item['info-89']['step-3'] }}{{ $item['info-90']['step-1'] }}{{ $item['info-90']['step-2'] }}{{ $item['info-90']['step-3'] }}{{ $item['info-91']['step-1'] }}{{ $item['info-91']['step-2'] }}{{ $item['info-91']['step-3'] }}
+ + diff --git a/resources/views/v3/Reports/SafetyAndPrivacy/ProvinceActivityReport.blade.php b/resources/views/v3/Reports/SafetyAndPrivacy/ProvinceActivityReport.blade.php new file mode 100644 index 00000000..ffe68f28 --- /dev/null +++ b/resources/views/v3/Reports/SafetyAndPrivacy/ProvinceActivityReport.blade.php @@ -0,0 +1,133 @@ + + + + + + + + استانی + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($data as $item) + @if ($item['is_province'] == '1') + + + + + + + + + + + + + + @else + + + + + + + + + + + + + + @endif + @endforeach + +
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} +
+
+ گزارش نگهداری حریم راه از تاریخ + {{ verta($fromDate)->format('Y/n/j') }} + تا + تاریخ + {{ verta($toDate)->format('Y/n/j') }} + +
+ اداره کل + + تعداد کل + + ساخت و ساز غیر مجاز + + راه دسترسی غیر مجاز + + عبور تاسیسات زیربنایی غیر مجاز +
+ گام اول (شناسایی) + + گام دوم (مستندات قضایی) + + گام سوم (برخورد) + + گام اول (شناسایی) + + گام دوم (مستندات قضایی) + + گام سوم (برخورد) + + گام اول (شناسایی) + + گام دوم (مستندات قضایی) + + گام سوم (برخورد) +
+ {{ $item['name_fa'] }} + {{ $item['sum'] }} + {{ $item['info-89']['step-1'] }} + {{ $item['info-89']['step-2'] }} + {{ $item['info-89']['step-3'] }} + {{ $item['info-90']['step-1'] }} + {{ $item['info-90']['step-2'] }} + {{ $item['info-90']['step-3'] }} + {{ $item['info-91']['step-1'] }} + {{ $item['info-91']['step-2'] }} + {{ $item['info-91']['step-3'] }}
{{ $item['name_fa'] }}{{ $item['sum'] }}{{ $item['info-89']['step-1'] }}{{ $item['info-89']['step-2'] }}{{ $item['info-89']['step-3'] }}{{ $item['info-90']['step-1'] }}{{ $item['info-90']['step-2'] }}{{ $item['info-90']['step-3'] }}{{ $item['info-91']['step-1'] }}{{ $item['info-91']['step-2'] }}{{ $item['info-91']['step-3'] }}
+ + diff --git a/routes/v3.php b/routes/v3.php index 62781fe6..199f7d56 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -327,11 +327,12 @@ Route::prefix('safety_and_privacy') ->controller(SafetyAndPrivacyController::class) ->group(function () { Route::get('/', 'index')->name('index')->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('/first_step_store', 'firstStepStore')->name('firstStepStore')->middleware('permission:add-safety-and-privacy'); - Route::get('/second_step_store', 'secondStepStore')->name('secondStepStore')->middleware('permission:add-safety-and-privacy'); - Route::get('/third_step_store', 'thirdStepStore')->name('thirdStepStore')->middleware('permission:add-safety-and-privacy'); + Route::post('/first_step_store', 'firstStepStore')->name('firstStepStore')->middleware('permission:add-safety-and-privacy'); + Route::post('/second_step_store', 'secondStepStore')->name('secondStepStore')->middleware('permission:add-safety-and-privacy'); + Route::post('/third_step_store', 'thirdStepStore')->name('thirdStepStore')->middleware('permission:add-safety-and-privacy'); + Route::get('/sub_items', 'subItems')->name('subItems'); Route::get('/{safetyAndPrivacy}', 'show')->name('show'); - Route::get('/{safetyAndPrivacy}', 'destroy')->name('destroy')->middleware('permission:delete-safety-and-privacy'); + Route::delete('/{safetyAndPrivacy}', 'destroy')->name('destroy')->middleware('permission:delete-safety-and-privacy'); Route::get('/deserialize/{safetyAndPrivacy}', 'deserialize')->name('deserialize'); }); @@ -339,5 +340,8 @@ Route::prefix('safety_and_privacy_report') ->name('SafetyAndPrivacyReport.') ->controller(SafetyAndPrivacyReportController::class) ->group(function () { - Route::get('/', 'index')->name('index'); + Route::get('/country_activity', 'countryActivity')->name('countryActivity'); + Route::get('/province_activity', 'provinceActivity')->name('provinceActivity'); + Route::get('/country_excel_activity', 'countryExcelActivity')->name('countryExcelActivity'); + Route::get('/province_excel_activity', 'provinceExcelActivity')->name('provinceExcelActivity'); });