diff --git a/app/Exports/V3/RoadPatrols/CountryActivity.php b/app/Exports/V3/RoadPatrols/CountryActivity.php new file mode 100644 index 00000000..06ac17dd --- /dev/null +++ b/app/Exports/V3/RoadPatrols/CountryActivity.php @@ -0,0 +1,72 @@ +activities; + + return view('v3.Reports.RoadPatrols.CountryActivity', [ + 'activities' => $activities["activities"], + 'fromDate' => $activities["fromDate"], + 'toDate' => $activities["toDate"] + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + $event->sheet->getDelegate()->getStyle('A:U')->getFont()->setName('Arial'); + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setHorizontal(Alignment::HORIZONTAL_CENTER); + + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setVertical(Alignment::VERTICAL_CENTER); + } + ]; + } + + 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('q1'); + return [$drawing, $drawing2]; + } +} \ No newline at end of file diff --git a/app/Exports/V3/RoadPatrols/ProvinceActivity.php b/app/Exports/V3/RoadPatrols/ProvinceActivity.php new file mode 100644 index 00000000..959f561a --- /dev/null +++ b/app/Exports/V3/RoadPatrols/ProvinceActivity.php @@ -0,0 +1,72 @@ +activities; + + return view('v3.Reports.RoadPatrols.CountryActivity', [ + 'activities' => $activities["activities"], + 'fromDate' => $activities["fromDate"], + 'toDate' => $activities["toDate"] + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + $event->sheet->getDelegate()->getStyle('A:U')->getFont()->setName('Arial'); + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setHorizontal(Alignment::HORIZONTAL_CENTER); + + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setVertical(Alignment::VERTICAL_CENTER); + } + ]; + } + + 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('q1'); + return [$drawing, $drawing2]; + } +} \ No newline at end of file diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php index 26e218ba..be44d94a 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php @@ -8,6 +8,7 @@ use App\Http\Traits\ApiResponse; use App\Models\EdarateShahri; use App\Models\Province; use App\Models\RoadPatrolProject; +use App\Services\Reports\RoadPatrolReportService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; @@ -17,54 +18,12 @@ use Symfony\Component\HttpFoundation\BinaryFileResponse; class RoadPatrolReportController extends Controller { use ApiResponse; - public function provincePatrolActivity(Request $request): JsonResponse + public function countryPatrolActivity(Request $request, RoadPatrolReportService $roadPatrolReportService): JsonResponse { $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); - $dateTo = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); + $toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); - $activities = DB::select('SELECT - "کشوری" as province_fa, - -1 as province_id, - COUNT(*) tedade, - SUM(tedad_mavarede_moshede_shode_adi) as tedad_mavarede_moshede_shode_adi, - SUM(tedad_mavarede_moshede_shode_fori) as tedad_mavarede_moshede_shode_fori, - SUM(tedad_mavarede_moshede_shode_ani) as tedad_mavarede_moshede_shode_ani, - SUM(tedad_mavarede_peygiri_shode) as tedad_mavarede_peygiri_shode, - SUM(tedad_faliyat_sabt_shode) as tedad_faliyat_sabt_shode, - ROUND(SUM(distance)) as masafat_tey_shode - FROM (SELECT - province_id, - province_fa, - distance, - (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 1) AS tedad_mavarede_moshede_shode_adi, - (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 2) AS tedad_mavarede_moshede_shode_fori, - (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 3) AS tedad_mavarede_moshede_shode_ani, - (SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NOT NULL) AS tedad_mavarede_peygiri_shode, - (SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NULL) AS tedad_faliyat_sabt_shode - FROM `road_patrols` rp where rp.start_time BETWEEN "'.$fromDate.'" AND "'.$dateTo.'") temp - union - SELECT - province_fa, - province_id, - COUNT(*) tedade, - SUM(tedad_mavarede_moshede_shode_adi) as tedad_mavarede_moshede_shode_adi, - SUM(tedad_mavarede_moshede_shode_fori) as tedad_mavarede_moshede_shode_fori, - SUM(tedad_mavarede_moshede_shode_ani) as tedad_mavarede_moshede_shode_ani, - SUM(tedad_mavarede_peygiri_shode) as tedad_mavarede_peygiri_shode, - SUM(tedad_faliyat_sabt_shode) as tedad_faliyat_sabt_shode, - ROUND(SUM(distance)) as masafat_tey_shode - FROM (SELECT - province_id, - province_fa, - distance, - (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 1) AS tedad_mavarede_moshede_shode_adi, - (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 2) AS tedad_mavarede_moshede_shode_fori, - (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 3) AS tedad_mavarede_moshede_shode_ani, - (SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NOT NULL) AS tedad_mavarede_peygiri_shode, - (SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NULL) AS tedad_faliyat_sabt_shode - FROM `road_patrols` rp where rp.start_time BETWEEN "'.$fromDate.'" AND "'.$dateTo.'") temp - GROUP BY province_id' - ); + $activities = $roadPatrolReportService->countryActivity($fromDate, $toDate); $provinces = Province::all(['id', 'name_fa']); @@ -74,66 +33,14 @@ class RoadPatrolReportController extends Controller ]); } - public function cityPatrolActivity(Request $request): JsonResponse + public function provincePatrolActivity(Request $request, RoadPatrolReportService $roadPatrolReportService): JsonResponse { $request->validate(["province_id" => "required",]); $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); - $dateTo = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); + $toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); $provinceId = $request->province_id; - $activities = DB::select( - 'SELECT - province_fa, - province_id, - -1 AS edare_id, - "استانی" AS edare_name, - COUNT(*) tedade, - SUM(tedad_mavarede_moshede_shode_adi) as tedad_mavarede_moshede_shode_adi, - SUM(tedad_mavarede_moshede_shode_fori) as tedad_mavarede_moshede_shode_fori, - SUM(tedad_mavarede_moshede_shode_ani) as tedad_mavarede_moshede_shode_ani, - SUM(tedad_mavarede_peygiri_shode) as tedad_mavarede_peygiri_shode, - SUM(tedad_faliyat_sabt_shode) as tedad_faliyat_sabt_shode, - ROUND(SUM(distance)) as masafat_tey_shode - FROM (SELECT - province_id, - province_fa, - edare_id, - edare_name, - distance, - (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 1) AS tedad_mavarede_moshede_shode_adi, - (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 2) AS tedad_mavarede_moshede_shode_fori, - (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 3) AS tedad_mavarede_moshede_shode_ani, - (SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NOT NULL) AS tedad_mavarede_peygiri_shode, - (SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NULL) AS tedad_faliyat_sabt_shode - FROM `road_patrols` rp where rp.province_id = "'.$provinceId.'" AND rp.start_time BETWEEN "'.$fromDate.'" AND "'.$dateTo.'") temp - UNION - SELECT - province_fa, - province_id, - edare_id, - edare_name, - COUNT(*) tedade, - SUM(tedad_mavarede_moshede_shode_adi) as tedad_mavarede_moshede_shode_adi, - SUM(tedad_mavarede_moshede_shode_fori) as tedad_mavarede_moshede_shode_fori, - SUM(tedad_mavarede_moshede_shode_ani) as tedad_mavarede_moshede_shode_ani, - SUM(tedad_mavarede_peygiri_shode) as tedad_mavarede_peygiri_shode, - SUM(tedad_faliyat_sabt_shode) as tedad_faliyat_sabt_shode, - ROUND(SUM(distance)) as masafat_tey_shode - FROM (SELECT - province_id, - province_fa, - edare_id, - edare_name, - distance, - (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 1) AS tedad_mavarede_moshede_shode_adi, - (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 2) AS tedad_mavarede_moshede_shode_fori, - (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 3) AS tedad_mavarede_moshede_shode_ani, - (SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NOT NULL) AS tedad_mavarede_peygiri_shode, - (SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NULL) AS tedad_faliyat_sabt_shode - FROM `road_patrols` rp where rp.province_id = "'.$provinceId.'" AND rp.start_time BETWEEN "'.$fromDate.'" AND "'.$dateTo.'") temp - GROUP BY edare_id - ' - ); + $activities = $roadPatrolReportService->provinceActivity($fromDate, $toDate, $provinceId); $edarateShahri = EdarateShahri::query()->where('province_id', '=', $provinceId)->get(['id', 'name_fa']); @@ -143,12 +50,21 @@ class RoadPatrolReportController extends Controller ]); } - public function excel(Request $request): BinaryFileResponse + public function countryActivityExcel(Request $request, RoadPatrolReportService $roadPatrolReportService): BinaryFileResponse { + $activities = $roadPatrolReportService->countryActivity($request->from_date, $request->to_date); + $name = 'گزارش از گشت راهداری و ترابری ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download( - new RoadPatrolTable($request->from_date, $request->date_to), $name - ); + return Excel::download(new RoadPatrolTable($activities), $name); + } + + public function provinceActivityExcel(Request $request, RoadPatrolReportService $roadPatrolReportService): BinaryFileResponse + { + $activities = $roadPatrolReportService->provinceActivity($request->from_date, $request->to_date, $request->province_id); + + $name = 'گزارش از گشت راهداری و ترابری ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; + + return Excel::download(new RoadPatrolTable($activities), $name); } } diff --git a/app/Services/Reports/RoadPatrolReportService.php b/app/Services/Reports/RoadPatrolReportService.php new file mode 100644 index 00000000..bb22cd4d --- /dev/null +++ b/app/Services/Reports/RoadPatrolReportService.php @@ -0,0 +1,126 @@ + $activities, + 'fromDate' => $fromDate, + 'toDate' => $toDate + ]; + } + + public function provinceActivity(string $fromDate, string $toDate, int $provinceId): array + { + $activities = DB::select( + 'SELECT + province_fa, + province_id, + -1 AS edare_id, + "استانی" AS edare_name, + COUNT(*) tedade, + SUM(tedad_mavarede_moshede_shode_adi) as tedad_mavarede_moshede_shode_adi, + SUM(tedad_mavarede_moshede_shode_fori) as tedad_mavarede_moshede_shode_fori, + SUM(tedad_mavarede_moshede_shode_ani) as tedad_mavarede_moshede_shode_ani, + SUM(tedad_mavarede_peygiri_shode) as tedad_mavarede_peygiri_shode, + SUM(tedad_faliyat_sabt_shode) as tedad_faliyat_sabt_shode, + ROUND(SUM(distance)) as masafat_tey_shode + FROM (SELECT + province_id, + province_fa, + edare_id, + edare_name, + distance, + (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 1) AS tedad_mavarede_moshede_shode_adi, + (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 2) AS tedad_mavarede_moshede_shode_fori, + (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 3) AS tedad_mavarede_moshede_shode_ani, + (SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NOT NULL) AS tedad_mavarede_peygiri_shode, + (SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NULL) AS tedad_faliyat_sabt_shode + FROM `road_patrols` rp where rp.province_id = "'.$provinceId.'" AND rp.start_time BETWEEN "'.$fromDate.'" AND "'.$toDate.'") temp + UNION + SELECT + province_fa, + province_id, + edare_id, + edare_name, + COUNT(*) tedade, + SUM(tedad_mavarede_moshede_shode_adi) as tedad_mavarede_moshede_shode_adi, + SUM(tedad_mavarede_moshede_shode_fori) as tedad_mavarede_moshede_shode_fori, + SUM(tedad_mavarede_moshede_shode_ani) as tedad_mavarede_moshede_shode_ani, + SUM(tedad_mavarede_peygiri_shode) as tedad_mavarede_peygiri_shode, + SUM(tedad_faliyat_sabt_shode) as tedad_faliyat_sabt_shode, + ROUND(SUM(distance)) as masafat_tey_shode + FROM (SELECT + province_id, + province_fa, + edare_id, + edare_name, + distance, + (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 1) AS tedad_mavarede_moshede_shode_adi, + (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 2) AS tedad_mavarede_moshede_shode_fori, + (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 3) AS tedad_mavarede_moshede_shode_ani, + (SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NOT NULL) AS tedad_mavarede_peygiri_shode, + (SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NULL) AS tedad_faliyat_sabt_shode + FROM `road_patrols` rp where rp.province_id = "'.$provinceId.'" AND rp.start_time BETWEEN "'.$fromDate.'" AND "'.$toDate.'") temp + GROUP BY edare_id + ' + ); + + return [ + 'activities' => $activities, + 'fromDate' => $fromDate, + 'toDate' => $toDate + ]; + } +} \ No newline at end of file diff --git a/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php b/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php new file mode 100644 index 00000000..91fc320c --- /dev/null +++ b/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php @@ -0,0 +1,102 @@ + + + + + + + + کشوری + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($activities as $activity) + + + + + + + + + + + @endforeach + + + +
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} +
+
+ گزارش گشت راهداری و ترابری از تاریخ + {{ verta($fromFa)->format('Y/n/j') }} + تا + تاریخ + {{ verta($toFa)->format('Y/n/j') }} + +
+ اداره کل + + گشت راهداری +
+ تعداد کل + + اقدامات لازم جهت رسیدگی آتی + + اقدامات رسیدگی شده + + مجموع مسافت پیمایش شده(کیلومتر) + + تعداد فعالیت صورت گرفته حین گشت زنی +
+ عادی + + فوری + + آنی +
{{ $activity->province_fa }}{{ $activity->tedade }}{{ $activity->tedad_mavarede_moshede_shode_adi }}{{ $activity->tedad_mavarede_moshede_shode_fori }}{{ $activity->tedad_mavarede_moshede_shode_ani }}{{ $activity->tedad_mavarede_peygiri_shode }}{{ $activity->masafat_tey_shode }}{{ $activity->tedad_faliyat_sabt_shode }}
+ + + + diff --git a/resources/views/v3/Reports/RoadPatrols/ProvinceActivity.blade.php b/resources/views/v3/Reports/RoadPatrols/ProvinceActivity.blade.php new file mode 100644 index 00000000..c8744f76 --- /dev/null +++ b/resources/views/v3/Reports/RoadPatrols/ProvinceActivity.blade.php @@ -0,0 +1,98 @@ + + + + + + + + استانی + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($activities as $activity) + + + + + + + + + + + @endforeach + +
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} +
+
+ گزارش گشت راهداری و ترابری از تاریخ + {{ verta($fromFa)->format('Y/n/j') }} + تا + تاریخ + {{ verta($toFa)->format('Y/n/j') }} + +
+ اداره کل + + گشت راهداری +
+ تعداد کل + + اقدامات لازم جهت رسیدگی آتی + + اقدامات رسیدگی شده + + مجموع مسافت پیمایش شده(کیلومتر) + + تعداد فعالیت صورت گرفته حین گشت زنی +
+ عادی + + فوری + + آنی +
{{ $activity['name'] }}{{ $activity['tedade'] }}{{ $activity['tedad_mavarede_moshede_shode_adi'] }}{{ $activity['tedad_mavarede_moshede_shode_fori'] }}{{ $activity['tedad_mavarede_moshede_shode_ani'] }}{{ $activity['tedad_mavarede_peygiri_shode'] }}{{ $activity['masafat_tey_shode'] }}{{ $activity['tedad_faliyat_sabt_shode'] }}
+ + diff --git a/routes/v3.php b/routes/v3.php index 4d3177e0..ae606cc8 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -210,7 +210,8 @@ Route::prefix('road_patrol_reports') ->name('roadPatrolReports.') ->controller(RoadPatrolReportController::class) ->group(function () { + Route::get('/country_activity', 'countryPatrolActivity')->name('countryPatrolActivity'); Route::get('/province_activity', 'provincePatrolActivity')->name('provincePatrolActivity'); - Route::get('/city_activity', 'cityPatrolActivity')->name('cityPatrolActivity'); - Route::get('/excel', 'excel')->name('excel'); + Route::get('/country_activity_excel', 'countryActivityExcel')->name('countryActivityExcel'); + Route::get('/province_activity_excel', 'provinceActivityExcel')->name('provinceActivityExcel'); });